Index: third_party/WebKit/LayoutTests/fast/canvas/script-tests/canvas-toBlob-toDataURL-race.js |
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/script-tests/canvas-toBlob-toDataURL-race.js b/third_party/WebKit/LayoutTests/fast/canvas/script-tests/canvas-toBlob-toDataURL-race.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8c94c048e8baa5a317a4d7a1b26505d57e0568dd |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/fast/canvas/script-tests/canvas-toBlob-toDataURL-race.js |
@@ -0,0 +1,70 @@ |
+if (window.testRunner) { |
+ testRunner.dumpAsText(); |
+ testRunner.waitUntilDone(); |
+} |
+ |
+var numToBlobCalls = 9; |
+var numToDataURLCalls = 3; |
+var testImages = []; |
+var canvasCtxs = []; |
+ |
+// Create an original canvas with content |
+var canvas = document.createElement("canvas"); |
+var ctx = canvas.getContext("2d"); |
+ctx.fillStyle = "#EE21AF"; |
+ctx.fillRect(0, 0, 2500, 1750); |
+ |
+function testIfAllImagesAreCorrect() |
+{ |
+ // All resultant images should be the same as both async and main threads use the same image encoder |
+ var imageMatched = true; |
+ var firstImageData = canvasCtxs[0].getImageData(0, 0, 2500, 1750).data; |
+ for (var i = 1; i < (numToBlobCalls + numToDataURLCalls); i++) |
+ { |
+ var nextImageData = canvasCtxs[i].getImageData(0, 0, 2500, 1750).data; |
+ for (var k = 0; k < firstImageData.length; k++) |
+ { |
+ if (firstImageData[k]!=nextImageData[k]) |
+ { |
+ imageMatched = false; |
+ break; |
+ } |
+ } |
+ if (!imageMatched) |
+ break; |
+ } |
+ if (imageMatched) |
+ testPassed("All images encoded by both async and main threads match one another"); |
+ else |
+ testFailed("Not all images encoded by async and main threads match one another"); |
+} |
+ |
+var counter = numToBlobCalls + numToDataURLCalls; |
+function onCanvasDrawCompleted(ctx_test) |
+{ |
+ counter = counter - 1; |
+ if (counter == 0) { |
+ testIfAllImagesAreCorrect(); |
+ if (window.testRunner) |
+ testRunner.notifyDone(); |
+ } |
+} |
+ |
+function createTestCase(i) |
+{ |
+ var canvas_test = document.createElement("canvas"); |
+ var ctx_test = canvas_test.getContext("2d"); |
+ canvasCtxs[i] = ctx_test; |
+ |
+ var newImg = new Image(); |
+ newImg.onload = function() { |
+ ctx_test.drawImage(newImg, 0, 0, 2500, 1750); |
+ onCanvasDrawCompleted(ctx_test); |
+ } |
+ testImages[i] = newImg; |
+} |
+ |
+for (var i = 0; i < (numToBlobCalls + numToDataURLCalls); i++) |
+{ |
+ createTestCase(i); |
+} |