blob: 8c8ca1bbfbd7ed2fb703dc8a51d03b655bd03757 [file] [log] [blame]
<!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>