diff options
10 files changed, 12 insertions, 35 deletions
diff --git a/components/script/canvas_state.rs b/components/script/canvas_state.rs index 34ea6741660..d596ff826fa 100644 --- a/components/script/canvas_state.rs +++ b/components/script/canvas_state.rs @@ -895,12 +895,14 @@ impl CanvasState { global: &GlobalScope, image: CanvasImageSource, mut repetition: DOMString, - ) -> Fallible<DomRoot<CanvasPattern>> { + ) -> Fallible<Option<DomRoot<CanvasPattern>>> { let (image_data, image_size) = match image { CanvasImageSource::HTMLImageElement(ref image) => { - // https://html.spec.whatwg.org/multipage/#img-error - // If the image argument is an HTMLImageElement object that is in the broken state, - // then throw an InvalidStateError exception + // https://html.spec.whatwg.org/multipage/#check-the-usability-of-the-image-argument + if !image.is_usable()? { + return Ok(None); + } + image .get_url() .and_then(|url| { @@ -933,13 +935,13 @@ impl CanvasState { } if let Ok(rep) = RepetitionStyle::from_str(&repetition) { - Ok(CanvasPattern::new( + Ok(Some(CanvasPattern::new( global, image_data, image_size, rep, self.is_origin_clean(image), - )) + ))) } else { Err(Error::Syntax) } diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 371b31bbdb0..4c36a22f717 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -566,7 +566,7 @@ impl CanvasRenderingContext2DMethods for CanvasRenderingContext2D { &self, image: CanvasImageSource, repetition: DOMString, - ) -> Fallible<DomRoot<CanvasPattern>> { + ) -> Fallible<Option<DomRoot<CanvasPattern>>> { self.canvas_state .borrow() .create_pattern(&self.global(), image, repetition) diff --git a/components/script/dom/offscreencanvasrenderingcontext2d.rs b/components/script/dom/offscreencanvasrenderingcontext2d.rs index 277b5925f27..31dc8b7dec5 100644 --- a/components/script/dom/offscreencanvasrenderingcontext2d.rs +++ b/components/script/dom/offscreencanvasrenderingcontext2d.rs @@ -210,7 +210,7 @@ impl OffscreenCanvasRenderingContext2DMethods for OffscreenCanvasRenderingContex &self, image: CanvasImageSource, repetition: DOMString, - ) -> Fallible<DomRoot<CanvasPattern>> { + ) -> Fallible<Option<DomRoot<CanvasPattern>>> { self.canvas_state .borrow() .create_pattern(&self.global(), image, repetition) diff --git a/components/script/dom/paintrenderingcontext2d.rs b/components/script/dom/paintrenderingcontext2d.rs index e4b0a3cf71e..b9adc23e52d 100644 --- a/components/script/dom/paintrenderingcontext2d.rs +++ b/components/script/dom/paintrenderingcontext2d.rs @@ -340,7 +340,7 @@ impl PaintRenderingContext2DMethods for PaintRenderingContext2D { &self, image: CanvasImageSource, repetition: DOMString, - ) -> Fallible<DomRoot<CanvasPattern>> { + ) -> Fallible<Option<DomRoot<CanvasPattern>>> { self.context.CreatePattern(image, repetition) } diff --git a/components/script/dom/webidls/CanvasRenderingContext2D.webidl b/components/script/dom/webidls/CanvasRenderingContext2D.webidl index 52e532e3a8b..bcc1b56396c 100644 --- a/components/script/dom/webidls/CanvasRenderingContext2D.webidl +++ b/components/script/dom/webidls/CanvasRenderingContext2D.webidl @@ -93,7 +93,7 @@ interface mixin CanvasFillStrokeStyles { [Throws] CanvasGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1); [Throws] - CanvasPattern createPattern(CanvasImageSource image, [TreatNullAs=EmptyString] DOMString repetition); + CanvasPattern? createPattern(CanvasImageSource image, [TreatNullAs=EmptyString] DOMString repetition); }; [Exposed=(PaintWorklet, Window, Worker)] diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.emptysrc.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.emptysrc.html.ini deleted file mode 100644 index a182cdc6e30..00000000000 --- a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.emptysrc.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.pattern.image.incomplete.emptysrc.html] - type: testharness - [Canvas test: 2d.pattern.image.incomplete.emptysrc] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.immediate.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.immediate.html.ini deleted file mode 100644 index 64b9e3e8638..00000000000 --- a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.immediate.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.pattern.image.incomplete.immediate.html] - type: testharness - [Canvas test: 2d.pattern.image.incomplete.immediate] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.nosrc.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.nosrc.html.ini deleted file mode 100644 index b8ab4c72db7..00000000000 --- a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.nosrc.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.pattern.image.incomplete.nosrc.html] - type: testharness - [Canvas test: 2d.pattern.image.incomplete.nosrc] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.reload.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.reload.html.ini deleted file mode 100644 index 7feef17685a..00000000000 --- a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.reload.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.pattern.image.incomplete.reload.html] - type: testharness - [Canvas test: 2d.pattern.image.incomplete.reload] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.removedsrc.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.removedsrc.html.ini deleted file mode 100644 index 47dadb726d7..00000000000 --- a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.removedsrc.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.pattern.image.incomplete.removedsrc.html] - type: testharness - [Canvas test: 2d.pattern.image.incomplete.removedsrc] - expected: FAIL - |