diff --git a/components/script/canvas_state.rs b/components/script/canvas_state.rs index ebf36bad32b..34ea6741660 100644 --- a/components/script/canvas_state.rs +++ b/components/script/canvas_state.rs @@ -382,9 +382,19 @@ impl CanvasState { ) -> ErrorResult { let result = match image { CanvasImageSource::HTMLCanvasElement(ref canvas) => { + // https://html.spec.whatwg.org/multipage/#check-the-usability-of-the-image-argument + if !canvas.is_valid() { + return Err(Error::InvalidState); + } + self.draw_html_canvas_element(&canvas, htmlcanvas, sx, sy, sw, sh, dx, dy, dw, dh) }, CanvasImageSource::OffscreenCanvas(ref canvas) => { + // https://html.spec.whatwg.org/multipage/#check-the-usability-of-the-image-argument + if !canvas.is_valid() { + return Err(Error::InvalidState); + } + self.draw_offscreen_canvas(&canvas, htmlcanvas, sx, sy, sw, sh, dx, dy, dw, dh) }, CanvasImageSource::HTMLImageElement(ref image) => { diff --git a/components/script/dom/offscreencanvas.rs b/components/script/dom/offscreencanvas.rs index 70e0573a2c4..130d2b7c49a 100644 --- a/components/script/dom/offscreencanvas.rs +++ b/components/script/dom/offscreencanvas.rs @@ -138,6 +138,10 @@ impl OffscreenCanvas { )); Some(context) } + + pub fn is_valid(&self) -> bool { + self.Width() != 0 && self.Height() != 0 + } } impl OffscreenCanvasMethods for OffscreenCanvas { diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/2d.drawImage.zerocanvas.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/2d.drawImage.zerocanvas.html.ini deleted file mode 100644 index fd39e5a9200..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/2d.drawImage.zerocanvas.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.drawImage.zerocanvas.html] - type: testharness - [Canvas test: 2d.drawImage.zerocanvas] - expected: FAIL - diff --git a/tests/wpt/metadata/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.zerocanvas.html.ini b/tests/wpt/metadata/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.zerocanvas.html.ini deleted file mode 100644 index c37d1814b13..00000000000 --- a/tests/wpt/metadata/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.zerocanvas.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[2d.drawImage.zerocanvas.html] - [OffscreenCanvas test: 2d.drawImage.zerocanvas] - expected: FAIL - diff --git a/tests/wpt/metadata/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.zerocanvas.worker.js.ini b/tests/wpt/metadata/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.zerocanvas.worker.js.ini deleted file mode 100644 index 8b67a6c1a53..00000000000 --- a/tests/wpt/metadata/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.zerocanvas.worker.js.ini +++ /dev/null @@ -1,4 +0,0 @@ -[2d.drawImage.zerocanvas.worker.html] - [2d] - expected: FAIL -