| Index: LayoutTests/fast/canvas/script-tests/canvas-extremely-large-dimensions.js
|
| diff --git a/LayoutTests/fast/canvas/script-tests/canvas-extremely-large-dimensions.js b/LayoutTests/fast/canvas/script-tests/canvas-extremely-large-dimensions.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7de4f41c63ce288558d40bd823282f682c3d5960
|
| --- /dev/null
|
| +++ b/LayoutTests/fast/canvas/script-tests/canvas-extremely-large-dimensions.js
|
| @@ -0,0 +1,85 @@
|
| +description("Series of tests to ensure correct behaviour when canvas size is extremely large.");
|
| +var canvas = document.createElement('canvas')
|
| +var ctx = canvas.getContext('2d');
|
| +
|
| +// WebIDL defines width and height as int. 2147483647 is int max.
|
| +var extremelyLargeNumber = 2147483647;
|
| +canvas.width = extremelyLargeNumber;
|
| +canvas.height = extremelyLargeNumber;
|
| +
|
| +debug("check for crash on extremely large canvas size.");
|
| +useCanvasContext(ctx);
|
| +var imageData = ctx.getImageData(1, 1, 98, 98);
|
| +var imgdata = imageData.data;
|
| +// Blink returns zero color if the image buffer does not exist.
|
| +shouldBe("imgdata[4]", "0");
|
| +shouldBe("imgdata[5]", "0");
|
| +shouldBe("imgdata[6]", "0");
|
| +
|
| +debug("check for crash after resetting to the same size.");
|
| +canvas.width = extremelyLargeNumber;
|
| +useCanvasContext(ctx);
|
| +imageData = ctx.getImageData(1, 1, 98, 98);
|
| +imgdata = imageData.data;
|
| +shouldBe("imgdata[4]", "0");
|
| +shouldBe("imgdata[5]", "0");
|
| +shouldBe("imgdata[6]", "0");
|
| +
|
| +// googol is parsed to 0.
|
| +var googol = Math.pow(10, 100);
|
| +debug("check for crash after resizing to googol.");
|
| +canvas.width = googol;
|
| +canvas.height = googol;
|
| +useCanvasContext(ctx);
|
| +imageData = ctx.getImageData(1, 1, 98, 98);
|
| +imgdata = imageData.data;
|
| +shouldBe("imgdata[4]", "0");
|
| +shouldBe("imgdata[5]", "0");
|
| +shouldBe("imgdata[6]", "0");
|
| +
|
| +debug("check for crash after resetting to the same size.");
|
| +canvas.width = googol;
|
| +useCanvasContext(ctx);
|
| +imageData = ctx.getImageData(1, 1, 98, 98);
|
| +imgdata = imageData.data;
|
| +shouldBe("imgdata[4]", "0");
|
| +shouldBe("imgdata[5]", "0");
|
| +shouldBe("imgdata[6]", "0");
|
| +
|
| +debug("check again for crash on extremely large canvas size.");
|
| +canvas.width = extremelyLargeNumber;
|
| +canvas.height = extremelyLargeNumber;
|
| +useCanvasContext(ctx);
|
| +imageData = ctx.getImageData(1, 1, 98, 98);
|
| +imgdata = imageData.data;
|
| +shouldBe("imgdata[4]", "0");
|
| +shouldBe("imgdata[5]", "0");
|
| +shouldBe("imgdata[6]", "0");
|
| +
|
| +function useCanvasContext(ctx) {
|
| + ctx.fillStyle = 'green';
|
| + ctx.fillRect(0, 0, 100, 100);
|
| + for(var i = 0; i < 100; i++) {
|
| + // This API tries to create an image buffer if the image buffer is not created.
|
| + ctx.getImageData(1, 1, 1, 1);
|
| + }
|
| + ctx.beginPath();
|
| + ctx.rect(0,0,100,100);
|
| + ctx.save();
|
| + ctx.fillStyle = 'red';
|
| + ctx.fillRect(0, 0, 100, 100);
|
| + ctx.restore();
|
| + ctx.fillStyle = 'green';
|
| + ctx.fill();
|
| +}
|
| +
|
| +debug("after resizing to normal size, the canvas must be in a valid state.");
|
| +canvas.width = 100;
|
| +canvas.height = 100;
|
| +ctx.fillStyle = 'blue';
|
| +ctx.fillRect(0, 0, 100, 100);
|
| +imageData = ctx.getImageData(1, 1, 98, 98);
|
| +imgdata = imageData.data;
|
| +shouldBe("imgdata[4]", "0");
|
| +shouldBe("imgdata[5]", "0");
|
| +shouldBe("imgdata[6]", "255");
|
|
|