Index: LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html |
diff --git a/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html b/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html |
index e44c5b257b27927e4107a6c74265e82838bd7bc8..4787de443a9393342e8d8354d31d85392c5ee3bc 100644 |
--- a/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html |
+++ b/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html |
@@ -16,6 +16,8 @@ var testBitmap; // an ImageBitmap that is uncropped. We use this to test createI |
var d; // image.imageData |
var blob; |
var invalidBlob; |
+var invalidBlobTestPassed = false; |
+var invalidCanvasTestPassed = false; |
// Draw to an auxillary canvas. |
var aCanvas = document.createElement("canvas"); |
@@ -23,6 +25,11 @@ aCanvas.setAttribute("width", "200"); |
aCanvas.setAttribute("height", "200"); |
var aCtx = aCanvas.getContext("2d"); |
+// Create a terapixel canvas to generate an invalid canvas through allocation failure |
+var invalidCanvas = document.createElement("canvas"); |
+invalidCanvas.setAttribute("width", "1000000"); |
+invalidCanvas.setAttribute("height", "1000000"); |
+ |
image = new Image(); |
image.onload = imageLoaded; |
@@ -84,6 +91,26 @@ xhr2.onload = function() { |
loaded(); |
} |
+var finishIfDoneCallsRemaining = 2; |
+function finishIfDone() { |
+ finishIfDoneCallsRemaining--; |
+ if (!finishIfDoneCallsRemaining) { |
+ // Because promise fulfillment is asynchonous, pass/fail messages |
+ // must be handled here to ensure a deterministic message order. |
+ if (invalidBlobTestPassed) { |
+ testPassed("createImageBitmap(invalidBlob) was rejected."); |
+ } else { |
+ testFailed("Invalid blob fulfilled."); |
+ } |
+ if (invalidCanvasTestPassed) { |
+ testPassed("createImageBitmap(invalidCanvas) was rejected."); |
+ } else { |
+ testFailed("Invalid canvas fulfilled."); |
+ } |
+ finishJSTest(); |
+ } |
+} |
+ |
function loaded() { |
if (imageLoaded && videoLoaded && imageBitmapLoaded && blobLoaded && invalidBlobLoaded) { |
shouldThrow("createImageBitmap(undefined)", "TypeError"); |
@@ -110,15 +137,20 @@ function loaded() { |
shouldThrow("createImageBitmap(blob, 0, 0, 0, 10)"); |
createImageBitmap(invalidBlob).then(function() { |
- testFailed("Invalid blob fulfilled."); |
- finishJSTest(); |
+ finishIfDone(); |
}, function() { |
- testPassed("createImageBitmap(invalidBlob) was rejected."); |
- finishJSTest(); |
+ invalidBlobTestPassed = true; |
+ finishIfDone(); |
}); |
- } |
-} |
+ createImageBitmap(invalidCanvas).then(function() { |
+ finishIfDone(); |
+ }, function() { |
+ invalidCanvasTestPassed = true; |
+ finishIfDone(); |
+ }); |
+ } |
+} |
</script> |
</body> |
</html> |