OLD | NEW |
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> | 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
2 <html> | 2 <html> |
3 <head> | 3 <head> |
4 <script src="../../resources/js-test.js"></script> | 4 <script src="../../resources/js-test.js"></script> |
5 </head> | 5 </head> |
6 <body> | 6 <body> |
7 <script> | 7 <script> |
8 description("Ensure correct behavior of createImageBitmap for invalid inputs."); | 8 description("Ensure correct behavior of createImageBitmap for invalid inputs."); |
9 window.jsTestIsAsync = true; | 9 window.jsTestIsAsync = true; |
10 | 10 |
11 var TypeError = "TypeError: Failed to execute 'createImageBitmap' on 'Window': N
o function was found that matched the signature provided."; | 11 var TypeError = "TypeError: Failed to execute 'createImageBitmap' on 'Window': N
o function was found that matched the signature provided."; |
12 var IndexSizeError = "IndexSizeError: Index or size was negative, or greater tha
n the allowed value."; | 12 var IndexSizeError = "IndexSizeError: Index or size was negative, or greater tha
n the allowed value."; |
13 | 13 |
14 var image; | 14 var image; |
15 var testBitmap; // an ImageBitmap that is uncropped. We use this to test createI
mageBitmap(testBitmap) | 15 var testBitmap; // an ImageBitmap that is uncropped. We use this to test createI
mageBitmap(testBitmap) |
16 var d; // image.imageData | 16 var d; // image.imageData |
17 var blob; | 17 var blob; |
18 var invalidBlob; | 18 var invalidBlob; |
| 19 var invalidBlobTestPassed = false; |
| 20 var invalidCanvasTestPassed = false; |
19 | 21 |
20 // Draw to an auxillary canvas. | 22 // Draw to an auxillary canvas. |
21 var aCanvas = document.createElement("canvas"); | 23 var aCanvas = document.createElement("canvas"); |
22 aCanvas.setAttribute("width", "200"); | 24 aCanvas.setAttribute("width", "200"); |
23 aCanvas.setAttribute("height", "200"); | 25 aCanvas.setAttribute("height", "200"); |
24 var aCtx = aCanvas.getContext("2d"); | 26 var aCtx = aCanvas.getContext("2d"); |
25 | 27 |
| 28 // Create a terapixel canvas to generate an invalid canvas through allocation fa
ilure |
| 29 var invalidCanvas = document.createElement("canvas"); |
| 30 invalidCanvas.setAttribute("width", "1000000"); |
| 31 invalidCanvas.setAttribute("height", "1000000"); |
| 32 |
26 image = new Image(); | 33 image = new Image(); |
27 image.onload = imageLoaded; | 34 image.onload = imageLoaded; |
28 | 35 |
29 // Before image loads | 36 // Before image loads |
30 shouldThrow("createImageBitmap(image)"); | 37 shouldThrow("createImageBitmap(image)"); |
31 image.src = aCanvas.toDataURL(); | 38 image.src = aCanvas.toDataURL(); |
32 | 39 |
33 video = document.createElement("video"); | 40 video = document.createElement("video"); |
34 video.addEventListener("canplaythrough", videoLoaded, false); | 41 video.addEventListener("canplaythrough", videoLoaded, false); |
35 | 42 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 var xhr2 = new XMLHttpRequest(); | 84 var xhr2 = new XMLHttpRequest(); |
78 xhr2.open("GET", 'resources/repaint.js'); | 85 xhr2.open("GET", 'resources/repaint.js'); |
79 xhr2.responseType = 'blob'; | 86 xhr2.responseType = 'blob'; |
80 xhr2.send(); | 87 xhr2.send(); |
81 xhr2.onload = function() { | 88 xhr2.onload = function() { |
82 invalidBlob = xhr2.response; | 89 invalidBlob = xhr2.response; |
83 invalidBlobLoaded = true; | 90 invalidBlobLoaded = true; |
84 loaded(); | 91 loaded(); |
85 } | 92 } |
86 | 93 |
| 94 var finishIfDoneCallsRemaining = 2; |
| 95 function finishIfDone() { |
| 96 finishIfDoneCallsRemaining--; |
| 97 if (!finishIfDoneCallsRemaining) { |
| 98 // Because promise fulfillment is asynchonous, pass/fail messages |
| 99 // must be handled here to ensure a deterministic message order. |
| 100 if (invalidBlobTestPassed) { |
| 101 testPassed("createImageBitmap(invalidBlob) was rejected."); |
| 102 } else { |
| 103 testFailed("Invalid blob fulfilled."); |
| 104 } |
| 105 if (invalidCanvasTestPassed) { |
| 106 testPassed("createImageBitmap(invalidCanvas) was rejected."); |
| 107 } else { |
| 108 testFailed("Invalid canvas fulfilled."); |
| 109 } |
| 110 finishJSTest(); |
| 111 } |
| 112 } |
| 113 |
87 function loaded() { | 114 function loaded() { |
88 if (imageLoaded && videoLoaded && imageBitmapLoaded && blobLoaded && invalid
BlobLoaded) { | 115 if (imageLoaded && videoLoaded && imageBitmapLoaded && blobLoaded && invalid
BlobLoaded) { |
89 shouldThrow("createImageBitmap(undefined)", "TypeError"); | 116 shouldThrow("createImageBitmap(undefined)", "TypeError"); |
90 | 117 |
91 shouldThrow("createImageBitmap(image, 0, 0, 10, 0)"); | 118 shouldThrow("createImageBitmap(image, 0, 0, 10, 0)"); |
92 shouldThrow("createImageBitmap(image, 0, 0, 0, 10)"); | 119 shouldThrow("createImageBitmap(image, 0, 0, 0, 10)"); |
93 | 120 |
94 shouldThrow("createImageBitmap(video, 0, 0, 10, 0)"); | 121 shouldThrow("createImageBitmap(video, 0, 0, 10, 0)"); |
95 shouldThrow("createImageBitmap(video, 0, 0, 0, 10)"); | 122 shouldThrow("createImageBitmap(video, 0, 0, 0, 10)"); |
96 | 123 |
97 shouldThrow("createImageBitmap(aCanvas, 0, 0, 10, 0)"); | 124 shouldThrow("createImageBitmap(aCanvas, 0, 0, 10, 0)"); |
98 shouldThrow("createImageBitmap(aCanvas, 0, 0, 0, 10)"); | 125 shouldThrow("createImageBitmap(aCanvas, 0, 0, 0, 10)"); |
99 | 126 |
100 shouldThrow("createImageBitmap(d, 0, 0, 10, 0)"); | 127 shouldThrow("createImageBitmap(d, 0, 0, 10, 0)"); |
101 shouldThrow("createImageBitmap(d, 0, 0, 0, 10)"); | 128 shouldThrow("createImageBitmap(d, 0, 0, 0, 10)"); |
102 | 129 |
103 shouldThrow("createImageBitmap(aCtx, 0, 0, 10, 0)"); | 130 shouldThrow("createImageBitmap(aCtx, 0, 0, 10, 0)"); |
104 shouldThrow("createImageBitmap(aCtx, 0, 0, 0, 10)"); | 131 shouldThrow("createImageBitmap(aCtx, 0, 0, 0, 10)"); |
105 | 132 |
106 shouldThrow("createImageBitmap(testBitmap, 0, 0, 10, 0)"); | 133 shouldThrow("createImageBitmap(testBitmap, 0, 0, 10, 0)"); |
107 shouldThrow("createImageBitmap(testBitmap, 0, 0, 0, 10)"); | 134 shouldThrow("createImageBitmap(testBitmap, 0, 0, 0, 10)"); |
108 | 135 |
109 shouldThrow("createImageBitmap(blob, 0, 0, 10, 0)"); | 136 shouldThrow("createImageBitmap(blob, 0, 0, 10, 0)"); |
110 shouldThrow("createImageBitmap(blob, 0, 0, 0, 10)"); | 137 shouldThrow("createImageBitmap(blob, 0, 0, 0, 10)"); |
111 | 138 |
112 createImageBitmap(invalidBlob).then(function() { | 139 createImageBitmap(invalidBlob).then(function() { |
113 testFailed("Invalid blob fulfilled."); | 140 finishIfDone(); |
114 finishJSTest(); | |
115 }, function() { | 141 }, function() { |
116 testPassed("createImageBitmap(invalidBlob) was rejected."); | 142 invalidBlobTestPassed = true; |
117 finishJSTest(); | 143 finishIfDone(); |
118 }); | 144 }); |
119 } | 145 |
| 146 createImageBitmap(invalidCanvas).then(function() { |
| 147 finishIfDone(); |
| 148 }, function() { |
| 149 invalidCanvasTestPassed = true; |
| 150 finishIfDone(); |
| 151 }); |
| 152 } |
120 } | 153 } |
121 | |
122 </script> | 154 </script> |
123 </body> | 155 </body> |
124 </html> | 156 </html> |
OLD | NEW |