Upstream version 7.35.144.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / fast / canvas / script-tests / canvas-extremely-large-dimensions.js
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');
4
5 // WebIDL defines width and height as int. 2147483647 is int max.
6 var extremelyLargeNumber = 2147483647;
7 canvas.width = extremelyLargeNumber;
8 canvas.height = extremelyLargeNumber;
9
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");
18
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");
27
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");
39
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");
48
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");
58
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);
65     }
66     ctx.beginPath();
67     ctx.rect(0,0,100,100);
68     ctx.save();
69     ctx.fillStyle = 'red';
70     ctx.fillRect(0, 0, 100, 100);
71     ctx.restore();
72     ctx.fillStyle = 'green';
73     ctx.fill();
74 }
75
76 debug("after resizing to normal size, the canvas must be in a valid state.");
77 canvas.width = 100;
78 canvas.height = 100;
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");