Index: third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-commit-frameless-doc.html |
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-commit-frameless-doc.html b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-commit-frameless-doc.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..10542b104c4ec607a5ba51fcbfc7e6fbe1ab70d0 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-commit-frameless-doc.html |
@@ -0,0 +1,53 @@ |
+<!DOCTYPE html> |
+<script src="../../resources/testharness.js"></script> |
+<script src="../../resources/testharnessreport.js"></script> |
+<script> |
+// This test aims to ensure that OffscreenCanvas.commit() does not |
+// crash for a placeholder canvas under frameless document. |
+// Since the document is invisible, the resultant image should be |
+// not visible too. But users must be able to draw to the OffscreenCanvas |
+// and do canvas-operations on the frameless placeholder canvas. |
+// TODO(crbug.com/683172): Modify this test after handling for |
+// frameless canvas is done. |
+function createFramelessCanvas() { |
+ var framelessDoc = document.implementation.createHTMLDocument("frameless"); |
+ var canvas = framelessDoc.createElement("canvas"); |
+ canvas.width = 50; |
+ canvas.height = 50; |
+ return canvas; |
+} |
+ |
+function transferControlAndCommit(canvas) { |
+ var offscreenCanvas = canvas.transferControlToOffscreen(); |
+ var ctx = offscreenCanvas.getContext("2d"); |
+ ctx.fillStyle = "blue"; |
+ ctx.fillRect(0, 0, 50, 50); |
+ ctx.commit(); |
+ return offscreenCanvas; |
+} |
+ |
+test(function() { |
+ var offscreenCanvas = transferControlAndCommit(createFramelessCanvas()); |
+ var ctx = offscreenCanvas.getContext("2d"); |
+ var pixels = ctx.getImageData(0, 0, 1, 1).data; |
+ assert_array_equals(pixels, [0, 0, 255, 255]); |
+}, "Verify that the getImageData() works on the OffscreenCanvas context of a frameless canvas"); |
+ |
+async_test(function(t) { |
+ var canvas = createFramelessCanvas(); |
+ var offscreenCanvas = transferControlAndCommit(canvas); |
+ |
+ var c = document.createElement("canvas"); |
+ c.width = 50; |
+ c.height = 50; |
+ var ctx2 = c.getContext("2d"); |
+ setTimeout(function() { |
+ ctx2.drawImage(canvas, 0, 0); |
+ var pixels = ctx2.getImageData(0, 0, 1, 1).data; |
+ t.step(function() { |
+ assert_array_equals(pixels, [0, 0, 255, 255]); |
+ }); |
+ t.done(); |
+ }, 0); |
+}, "Verify that the placeholder canvas can be used as an image source"); |
+</script> |