summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/imagebitmap_structuredclone_utils.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--dom/canvas/test/imagebitmap_structuredclone_utils.js387
1 files changed, 387 insertions, 0 deletions
diff --git a/dom/canvas/test/imagebitmap_structuredclone_utils.js b/dom/canvas/test/imagebitmap_structuredclone_utils.js
new file mode 100644
index 0000000000..b138eeee80
--- /dev/null
+++ b/dom/canvas/test/imagebitmap_structuredclone_utils.js
@@ -0,0 +1,387 @@
+var gImage1;
+var gImage2;
+var gImageBitmap1;
+var gImageBitmap2;
+
+// Bug 1239752.
+var gImageData;
+var gImageBitmap3;
+
+function comparePixelColor(
+ testImgageData,
+ groundTruthImageData,
+ x,
+ y,
+ tolerance,
+ info
+) {
+ ok(
+ testImgageData.width == groundTruthImageData.width &&
+ testImgageData.height == groundTruthImageData.height,
+ "testImgageData and groundTruthImageData should have the same dimension."
+ );
+
+ var index = (groundTruthImageData.width * y + x) * 4;
+ var r = groundTruthImageData.data[index + 0];
+ var g = groundTruthImageData.data[index + 1];
+ var b = groundTruthImageData.data[index + 2];
+ var a = groundTruthImageData.data[index + 3];
+ var newR = testImgageData.data[index + 0];
+ var newG = testImgageData.data[index + 1];
+ var newB = testImgageData.data[index + 2];
+ var newA = testImgageData.data[index + 3];
+ var isTheSame =
+ Math.abs(r - newR) <= tolerance &&
+ Math.abs(g - newG) <= tolerance &&
+ Math.abs(b - newB) <= tolerance &&
+ Math.abs(a - newA) <= tolerance;
+ ok(
+ isTheSame,
+ "[" +
+ info +
+ "] " +
+ "newImageData(" +
+ newR +
+ "," +
+ newG +
+ "," +
+ newB +
+ "," +
+ newA +
+ ") should equal to imageData(" +
+ r +
+ "," +
+ g +
+ "," +
+ b +
+ "," +
+ a +
+ ")."
+ );
+}
+
+function compareImageBitmapWithImageElement(imageBitmap, imageElement) {
+ var canvas1 = document.createElement("canvas");
+ var canvas2 = document.createElement("canvas");
+
+ canvas1.width = imageElement.naturalWidth;
+ canvas1.height = imageElement.naturalHeight;
+ canvas2.width = imageElement.naturalWidth;
+ canvas2.height = imageElement.naturalHeight;
+
+ var ctx1 = canvas1.getContext("2d");
+ var ctx2 = canvas2.getContext("2d");
+
+ ctx1.drawImage(imageElement, 0, 0);
+ ctx2.drawImage(imageBitmap, 0, 0);
+
+ document.body.appendChild(canvas1);
+ document.body.appendChild(canvas2);
+
+ var imageData1 = ctx1.getImageData(0, 0, canvas1.width, canvas1.height);
+ var imageData2 = ctx2.getImageData(0, 0, canvas2.width, canvas2.height);
+
+ // Create an array of pixels that is going to be tested.
+ var pixels = [];
+ var xGap = imageElement.naturalWidth / 4;
+ var yGap = imageElement.naturalHeight / 4;
+ for (var y = 0; y < imageElement.naturalHeight; y += yGap) {
+ for (var x = 0; x < imageElement.naturalWidth; x += xGap) {
+ pixels.push({ x, y });
+ }
+ }
+
+ // Also, put the button-right pixel into pixels.
+ pixels.push({
+ x: imageElement.naturalWidth - 1,
+ y: imageElement.naturalHeight - 1,
+ });
+
+ // Do the test.
+ for (var pixel of pixels) {
+ comparePixelColor(imageData2, imageData1, pixel.x, pixel.y, 0);
+ }
+}
+
+function compareImageBitmapWithImageData(imageBitmap, imageData, info) {
+ var canvas1 = document.createElement("canvas");
+
+ canvas1.width = imageBitmap.width;
+ canvas1.height = imageBitmap.height;
+
+ var ctx1 = canvas1.getContext("2d");
+
+ ctx1.drawImage(imageBitmap, 0, 0);
+
+ document.body.appendChild(canvas1);
+
+ var imageData1 = ctx1.getImageData(0, 0, canvas1.width, canvas1.height);
+
+ // Create an array of pixels that is going to be tested.
+ var pixels = [];
+ var xGap = imageBitmap.width / 4;
+ var yGap = imageBitmap.height / 4;
+ for (var y = 0; y < imageBitmap.height; y += yGap) {
+ for (var x = 0; x < imageBitmap.width; x += xGap) {
+ pixels.push({ x, y });
+ }
+ }
+
+ // Also, put the button-right pixel into pixels.
+ pixels.push({ x: imageBitmap.width - 1, y: imageBitmap.height - 1 });
+
+ // Do the test.
+ for (var pixel of pixels) {
+ comparePixelColor(imageData1, imageData, pixel.x, pixel.y, 5, info);
+ }
+}
+
+function prepareImageBitmaps() {
+ gImage1 = document.createElement("img");
+ gImage2 = document.createElement("img");
+ gImage1.src = "image_rgrg-256x256.png";
+ gImage2.src = "image_yellow.png";
+
+ var p1 = new Promise(function(resolve, reject) {
+ gImage1.onload = function() {
+ var promise = createImageBitmap(gImage1);
+ promise.then(function(bitmap) {
+ gImageBitmap1 = bitmap;
+ resolve(true);
+ });
+ };
+ });
+
+ var p2 = new Promise(function(resolve, reject) {
+ gImage2.onload = function() {
+ var promise = createImageBitmap(gImage2);
+ promise.then(function(bitmap) {
+ gImageBitmap2 = bitmap;
+ resolve(true);
+ });
+ };
+ });
+
+ var p3 = new Promise(function(resolve, reject) {
+ // Create an ImageData with random colors.
+ var width = 5;
+ var height = 10;
+ var data = [
+ 43,
+ 143,
+ 24,
+ 148,
+ 235,
+ 165,
+ 179,
+ 91,
+ 74,
+ 228,
+ 75,
+ 195,
+ 141,
+ 109,
+ 74,
+ 65,
+ 25,
+ 177,
+ 3,
+ 201,
+ 128,
+ 105,
+ 12,
+ 199,
+ 196,
+ 93,
+ 241,
+ 131,
+ 250,
+ 121,
+ 232,
+ 189,
+ 175,
+ 131,
+ 216,
+ 190,
+ 145,
+ 123,
+ 167,
+ 70,
+ 18,
+ 196,
+ 210,
+ 162,
+ 225,
+ 1,
+ 90,
+ 188,
+ 223,
+ 216,
+ 182,
+ 233,
+ 118,
+ 50,
+ 168,
+ 56,
+ 51,
+ 206,
+ 198,
+ 199,
+ 153,
+ 29,
+ 70,
+ 130,
+ 180,
+ 135,
+ 135,
+ 51,
+ 148,
+ 46,
+ 44,
+ 144,
+ 80,
+ 171,
+ 142,
+ 95,
+ 25,
+ 178,
+ 102,
+ 110,
+ 0,
+ 28,
+ 128,
+ 91,
+ 31,
+ 222,
+ 42,
+ 170,
+ 85,
+ 8,
+ 218,
+ 146,
+ 65,
+ 30,
+ 198,
+ 238,
+ 121,
+ 57,
+ 124,
+ 88,
+ 246,
+ 40,
+ 141,
+ 146,
+ 174,
+ 195,
+ 255,
+ 149,
+ 30,
+ 153,
+ 92,
+ 116,
+ 18,
+ 241,
+ 6,
+ 111,
+ 39,
+ 162,
+ 85,
+ 143,
+ 237,
+ 159,
+ 201,
+ 244,
+ 93,
+ 68,
+ 14,
+ 246,
+ 143,
+ 143,
+ 83,
+ 221,
+ 187,
+ 215,
+ 243,
+ 154,
+ 24,
+ 125,
+ 221,
+ 53,
+ 80,
+ 153,
+ 151,
+ 219,
+ 202,
+ 241,
+ 250,
+ 191,
+ 153,
+ 129,
+ 181,
+ 57,
+ 94,
+ 18,
+ 136,
+ 231,
+ 41,
+ 252,
+ 168,
+ 207,
+ 213,
+ 103,
+ 118,
+ 172,
+ 53,
+ 213,
+ 184,
+ 204,
+ 25,
+ 29,
+ 249,
+ 199,
+ 101,
+ 55,
+ 49,
+ 167,
+ 25,
+ 23,
+ 173,
+ 78,
+ 19,
+ 234,
+ 205,
+ 155,
+ 250,
+ 175,
+ 44,
+ 201,
+ 215,
+ 92,
+ 25,
+ 59,
+ 25,
+ 29,
+ 249,
+ 199,
+ 153,
+ 129,
+ 181,
+ 57,
+ ];
+
+ gImageData = new ImageData(new Uint8ClampedArray(data), width, height);
+
+ // Create an ImageBitmap from the above ImageData.
+ createImageBitmap(gImageData).then(
+ bitmap => {
+ gImageBitmap3 = bitmap;
+ resolve(true);
+ },
+ () => {
+ reject();
+ }
+ );
+ });
+
+ return Promise.all([p1, p2, p3]);
+}