Index: third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-imageData-in-worker.html |
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-imageData-in-worker.html b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-imageData-in-worker.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8c8ca1bbfbd7ed2fb703dc8a51d03b655bd03757 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-imageData-in-worker.html |
@@ -0,0 +1,124 @@ |
+<!DOCTYPE html> |
+<html> |
+<body> |
+<canvas id='output' width='150' height='150'></canvas> |
+<script src="../../resources/js-test.js"></script> |
+<script id='myWorker' type='text/worker'> |
+function prefilledImageData() { |
+ var myImageData = new ImageData(10, 10); |
+ var dataArr = myImageData.data; |
+ for (var i = 0; i < dataArr.length; i+=4) { |
+ dataArr[i + 0] = 255; |
+ dataArr[i + 1] = 100; |
+ dataArr[i + 2] = 0; |
+ dataArr[i + 3] = 255; |
+ } |
+ return myImageData; |
+} |
+function postMessageToMain(t, c) { |
+ self.postMessage({topic: t, content: c}); |
+} |
+self.onmessage = function(e) { |
+ var aCanvas = new OffscreenCanvas(10, 10); |
+ var ctx = aCanvas.getContext('2d'); |
+ |
+ // createImageData(sx, sy) |
+ try { |
+ var blankImageData = ctx.createImageData(10, 10); |
+ postMessageToMain("createImageData(sx, sy)", blankImageData.data[1]); |
+ } catch (err) { |
+ postMessageToMain("createImageData(sx, sy)", err); |
+ } |
+ |
+ // createImageData(ImageData) |
+ try { |
+ var blankImageData = ctx.createImageData(prefilledImageData()); |
+ postMessageToMain('createImageData(ImageData)', blankImageData.data[1]); |
+ } catch (err) { |
+ postMessageToMain('createImageData(ImageData)', err); |
+ } |
+ |
+ // getImageData(sx, sy, sw, sh) |
+ try { |
+ ctx.fillStyle = "blue"; |
+ ctx.fillRect(2, 0, 3, 1); |
+ var imageDataFromCanvas = ctx.getImageData(2, 0, 3, 1); |
+ postMessageToMain('getImageData(sx, sy, sw, sh)', imageDataFromCanvas.data[2]); |
+ } catch (err) { |
+ postMessageToMain('getImageData(sx, sy, sw, sh)', err); |
+ } |
+ |
+ // putImageData(ImageData, dx, dy) |
+ try { |
+ ctx.putImageData(prefilledImageData(), 0, 0); |
+ var imageDataFromCanvas = ctx.getImageData(0, 0, 1, 1); |
+ postMessageToMain("putImageData(ImageData, dx, dy)", imageDataFromCanvas.data[1]); |
+ } catch (err) { |
+ postMessageToMain("putImageData(ImageData, dx, dy)", err); |
+ } |
+ |
+ // putImageData(ImageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) |
+ ctx.clearRect(0, 0, aCanvas.width, aCanvas.height); |
+ try { |
+ ctx.putImageData(prefilledImageData(), 0, 0, 3, 0, 1, 1); |
+ var imageDataFromCanvas = ctx.getImageData(3, 0, 1, 1); |
+ postMessageToMain("putImageData(ImageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight)", imageDataFromCanvas.data[1]); |
+ } catch (err) { |
+ postMessageToMain("putImageData(ImageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) failed: ", err); |
+ } |
+ |
+ postMessageToMain("", ""); |
+}; |
+</script> |
+<script> |
+if (window.testRunner) { |
+ testRunner.waitUntilDone(); |
+} |
+ |
+var blob = new Blob([document.getElementById('myWorker').textContent]); |
+var worker = new Worker(URL.createObjectURL(blob)); |
+worker.addEventListener('message', msg => { |
+ var data = msg.data; |
+ switch (data.topic) { |
+ case "createImageData(sx, sy)": |
+ if (data.content == "0") |
+ testPassed("createImageData(sx, sy) creates blank image correctly"); |
+ else |
+ testFailed("createImageData(ImageData) failed: " + data.content); |
+ break; |
+ case "createImageData(ImageData)": |
+ if (data.content == "0") |
+ testPassed("createImageData(ImageData) creates blank image correctly"); |
+ else |
+ testFailed("createImageData(ImageData) failed: " + data.content); |
+ break; |
+ case "getImageData(sx, sy, sw, sh)": |
+ if (data.content == "255") |
+ testPassed("getImageData(sx, sy, sw, sh) is successful."); |
+ else |
+ testFailed("getImageData(sx, sy, sw, sh) failed: " + data.content); |
+ break; |
+ case "putImageData(ImageData, dx, dy)": |
+ if (data.content == "100") |
+ testPassed("putImageData(ImageData, dx, dy) is successful."); |
+ else |
+ testFailed("putImageData(ImageData, dx, dy) failed: " + data.content); |
+ break; |
+ case "putImageData(ImageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight)": |
+ if (data.content == "100") |
+ testPassed("putImageData(ImageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) is successful."); |
+ else |
+ testFailed("putImageData(ImageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) failed: " + data.content); |
+ break; |
+ default: |
+ if (window.testRunner) { |
+ testRunner.notifyDone(); |
+ } |
+ break; |
+ } |
+}); |
+worker.postMessage(""); |
+ |
+</script> |
+</body> |
+ |