1 description("Series of tests to ensure correct behaviour when canvas size is extremely large.");
2 var canvas = document.createElement('canvas')
3 var ctx = canvas.getContext('2d');
5 // WebIDL defines width and height as int. 2147483647 is int max.
6 var extremelyLargeNumber = 2147483647;
7 canvas.width = extremelyLargeNumber;
8 canvas.height = extremelyLargeNumber;
10 debug("check for crash on extremely large canvas size.");
11 useCanvasContext(ctx);
12 var imageData = ctx.getImageData(1, 1, 98, 98);
13 var imgdata = imageData.data;
14 // Blink returns zero color if the image buffer does not exist.
15 shouldBe("imgdata[4]", "0");
16 shouldBe("imgdata[5]", "0");
17 shouldBe("imgdata[6]", "0");
19 debug("check for crash after resetting to the same size.");
20 canvas.width = extremelyLargeNumber;
21 useCanvasContext(ctx);
22 imageData = ctx.getImageData(1, 1, 98, 98);
23 imgdata = imageData.data;
24 shouldBe("imgdata[4]", "0");
25 shouldBe("imgdata[5]", "0");
26 shouldBe("imgdata[6]", "0");
28 // googol is parsed to 0.
29 var googol = Math.pow(10, 100);
30 debug("check for crash after resizing to googol.");
31 canvas.width = googol;
32 canvas.height = googol;
33 useCanvasContext(ctx);
34 imageData = ctx.getImageData(1, 1, 98, 98);
35 imgdata = imageData.data;
36 shouldBe("imgdata[4]", "0");
37 shouldBe("imgdata[5]", "0");
38 shouldBe("imgdata[6]", "0");
40 debug("check for crash after resetting to the same size.");
41 canvas.width = googol;
42 useCanvasContext(ctx);
43 imageData = ctx.getImageData(1, 1, 98, 98);
44 imgdata = imageData.data;
45 shouldBe("imgdata[4]", "0");
46 shouldBe("imgdata[5]", "0");
47 shouldBe("imgdata[6]", "0");
49 debug("check again for crash on extremely large canvas size.");
50 canvas.width = extremelyLargeNumber;
51 canvas.height = extremelyLargeNumber;
52 useCanvasContext(ctx);
53 imageData = ctx.getImageData(1, 1, 98, 98);
54 imgdata = imageData.data;
55 shouldBe("imgdata[4]", "0");
56 shouldBe("imgdata[5]", "0");
57 shouldBe("imgdata[6]", "0");
59 function useCanvasContext(ctx) {
60 ctx.fillStyle = 'green';
61 ctx.fillRect(0, 0, 100, 100);
62 for(var i = 0; i < 100; i++) {
63 // This API tries to create an image buffer if the image buffer is not created.
64 ctx.getImageData(1, 1, 1, 1);
67 ctx.rect(0,0,100,100);
69 ctx.fillStyle = 'red';
70 ctx.fillRect(0, 0, 100, 100);
72 ctx.fillStyle = 'green';
76 debug("after resizing to normal size, the canvas must be in a valid state.");
79 ctx.fillStyle = 'blue';
80 ctx.fillRect(0, 0, 100, 100);
81 imageData = ctx.getImageData(1, 1, 98, 98);
82 imgdata = imageData.data;
83 shouldBe("imgdata[4]", "0");
84 shouldBe("imgdata[5]", "0");
85 shouldBe("imgdata[6]", "255");