offscreencanvas.transfer.to.imagebitmap.html (3922B)
1 <!DOCTYPE html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script src="/html/canvas/resources/canvas-tests.js"></script> 5 <link rel="help" href="https://html.spec.whatwg.org/#dom-offscreencanvas-transfertoimagebitmap"> 6 7 <script id="myWorker" type="text/worker"> 8 9 self.onmessage = function(e) { 10 }; 11 12 </script> 13 14 <script> 15 function makeWorker(script) 16 { 17 var blob = new Blob([script]); 18 return new Worker(URL.createObjectURL(blob)); 19 } 20 21 test(function() { 22 function testSize(contextType) { 23 var offscreenCanvas = new OffscreenCanvas(100, 50); 24 var ctx = offscreenCanvas.getContext(contextType); 25 var image = offscreenCanvas.transferToImageBitmap(); 26 assert_equals(image.width, 100); 27 assert_equals(image.height, 50); 28 } 29 30 testSize('2d'); 31 testSize('webgl'); 32 }, "Test that transferToImageBitmap returns an ImageBitmap with correct width and height"); 33 34 test(function() { 35 function testImageBitmapClr(shouldCallTwice, alphaVal) { 36 var offscreenCanvas = new OffscreenCanvas(100, 50); 37 var ctx = offscreenCanvas.getContext('2d', {alpha: alphaVal}); 38 ctx.fillStyle = "#0f0"; 39 ctx.fillRect(0, 0, 100, 50); 40 var image = offscreenCanvas.transferToImageBitmap(); 41 42 if (shouldCallTwice) 43 image = offscreenCanvas.transferToImageBitmap(); 44 45 var drawCanvas = document.createElement('canvas'); 46 drawCanvas.width = 100; 47 drawCanvas.height = 50; 48 var dCtx = drawCanvas.getContext('2d'); 49 dCtx.drawImage(image, 0, 0); 50 51 if (shouldCallTwice) { 52 if (alphaVal) 53 _assertPixel(drawCanvas, 50,25, 0,0,0,0); 54 else 55 _assertPixel(drawCanvas, 50,25, 0,0,0,255); 56 } else { 57 _assertPixel(drawCanvas, 50,25, 0,255,0,255); 58 } 59 } 60 61 testImageBitmapClr(false, true); 62 testImageBitmapClr(true, true); 63 testImageBitmapClr(true, false); 64 }, "Test that transferToImageBitmap returns an ImageBitmap with correct color"); 65 66 test(function() { 67 var offscreenCanvas = new OffscreenCanvas(100, 50); 68 var ctx = offscreenCanvas.getContext('2d'); 69 ctx.lineWidth = 10; 70 var image = offscreenCanvas.transferToImageBitmap(); 71 assert_equals(ctx.lineWidth, 10); 72 }, "Test that transferToImageBitmap won't change context's property"); 73 74 test(function() { 75 var offscreenCanvas = new OffscreenCanvas(100, 50); 76 var ctx = offscreenCanvas.getContext('2d'); 77 ctx.rect(0, 0, 25, 50); 78 ctx.clip(); 79 ctx.translate(20, 20); 80 81 ctx.fillStyle = '#0f0'; 82 var image1 = offscreenCanvas.transferToImageBitmap(); 83 // trasnform should be preserved 84 ctx.fillRect(0, 0, 10, 10); 85 var image2 = offscreenCanvas.transferToImageBitmap(); 86 87 var drawCanvas = document.createElement('canvas'); 88 drawCanvas.width = 100; 89 drawCanvas.height = 50; 90 var dCtx = drawCanvas.getContext('2d'); 91 dCtx.drawImage(image2, 0, 0); 92 // Verify that transform was carried over. 93 _assertPixel(drawCanvas, 23,25, 0,255,0,255); 94 // Verify that clip was carried over. 95 _assertPixel(drawCanvas, 27,25, 0,0,0,0); 96 }, "Test that transferToImageBitmap preserves transform"); 97 98 async_test(function(t) { 99 var worker = makeWorker(document.getElementById("myWorker").textContent); 100 var offscreenCanvas = new OffscreenCanvas(10, 10); 101 worker.postMessage(offscreenCanvas, [offscreenCanvas]); 102 assert_throws_dom("InvalidStateError", function() { offscreenCanvas.transferToImageBitmap(); }); 103 t.done(); 104 }, "Test that call transferToImageBitmap on a detached OffscreenCanvas throws an exception"); 105 106 test(function() { 107 var offscreenCanvas = new OffscreenCanvas(10, 10); 108 assert_throws_dom("InvalidStateError", function() { offscreenCanvas.transferToImageBitmap(); }); 109 }, "Test that transferToImageBitmap without a context throws an exception"); 110 111 </script>