<!DOCTYPE html> <html> <body> <canvas id="canvas" width="1" height="1"></canvas> <script src="../../resources/js-test.js"></script> <script> jsTestIsAsync = true; var worker = new Worker('./resources/worker-onmessage-noop.js'); description("Tests how putImageData and createImageBitmap would react when the source data is neutered"); var imageWidth = 1; var imageHeight = 1; var arrBuffer = new Uint8ClampedArray(new ArrayBuffer(4)); arrBuffer[0] = 255; arrBuffer[1] = 0; arrBuffer[2] = 0; arrBuffer[3] = 255; var image = new ImageData(arrBuffer, imageWidth, imageHeight); var context = document.getElementById("canvas").getContext("2d"); var len = image.data.byteLength; shouldBe("len", "4"); shouldBe("image.data[0]", "255"); shouldBe("image.data[1]", "0"); shouldBe("image.data[2]", "0"); shouldBe("image.data[3]", "255"); context.putImageData(image, 0, 0); var newImage = context.getImageData(0, 0, 1, 1); shouldBe("newImage.data[0]", "255"); shouldBe("newImage.data[1]", "0"); shouldBe("newImage.data[2]", "0"); shouldBe("newImage.data[3]", "255"); // transfer the array buffer to the worker so that the source data is now neutered worker.postMessage({data: image.data.buffer}, [image.data.buffer]); len = image.data.byteLength; shouldBe("len", "0"); shouldBe("image.data[0]", "undefined"); shouldBe("image.data[1]", "undefined"); shouldBe("image.data[2]", "undefined"); shouldBe("image.data[3]", "undefined"); shouldThrow("context.putImageData(image, 0, 0)"); createImageBitmap(image).then(function() { testFailed('Promise resolved unexpectedly'); finishJSTest(); }, function(err) { testPassed('Promise rejected as expected: ' + err); finishJSTest(); }); </script> </body> </html>