Make create_pattern() return None for incomplete images

This commit is contained in:
pylbrecht 2020-02-07 21:56:58 +01:00
parent 423b86e439
commit 481ef46167
10 changed files with 12 additions and 35 deletions

View file

@ -895,12 +895,14 @@ impl CanvasState {
global: &GlobalScope, global: &GlobalScope,
image: CanvasImageSource, image: CanvasImageSource,
mut repetition: DOMString, mut repetition: DOMString,
) -> Fallible<DomRoot<CanvasPattern>> { ) -> Fallible<Option<DomRoot<CanvasPattern>>> {
let (image_data, image_size) = match image { let (image_data, image_size) = match image {
CanvasImageSource::HTMLImageElement(ref image) => { CanvasImageSource::HTMLImageElement(ref image) => {
// https://html.spec.whatwg.org/multipage/#img-error // https://html.spec.whatwg.org/multipage/#check-the-usability-of-the-image-argument
// If the image argument is an HTMLImageElement object that is in the broken state, if !image.is_usable()? {
// then throw an InvalidStateError exception return Ok(None);
}
image image
.get_url() .get_url()
.and_then(|url| { .and_then(|url| {
@ -933,13 +935,13 @@ impl CanvasState {
} }
if let Ok(rep) = RepetitionStyle::from_str(&repetition) { if let Ok(rep) = RepetitionStyle::from_str(&repetition) {
Ok(CanvasPattern::new( Ok(Some(CanvasPattern::new(
global, global,
image_data, image_data,
image_size, image_size,
rep, rep,
self.is_origin_clean(image), self.is_origin_clean(image),
)) )))
} else { } else {
Err(Error::Syntax) Err(Error::Syntax)
} }

View file

@ -566,7 +566,7 @@ impl CanvasRenderingContext2DMethods for CanvasRenderingContext2D {
&self, &self,
image: CanvasImageSource, image: CanvasImageSource,
repetition: DOMString, repetition: DOMString,
) -> Fallible<DomRoot<CanvasPattern>> { ) -> Fallible<Option<DomRoot<CanvasPattern>>> {
self.canvas_state self.canvas_state
.borrow() .borrow()
.create_pattern(&self.global(), image, repetition) .create_pattern(&self.global(), image, repetition)

View file

@ -210,7 +210,7 @@ impl OffscreenCanvasRenderingContext2DMethods for OffscreenCanvasRenderingContex
&self, &self,
image: CanvasImageSource, image: CanvasImageSource,
repetition: DOMString, repetition: DOMString,
) -> Fallible<DomRoot<CanvasPattern>> { ) -> Fallible<Option<DomRoot<CanvasPattern>>> {
self.canvas_state self.canvas_state
.borrow() .borrow()
.create_pattern(&self.global(), image, repetition) .create_pattern(&self.global(), image, repetition)

View file

@ -340,7 +340,7 @@ impl PaintRenderingContext2DMethods for PaintRenderingContext2D {
&self, &self,
image: CanvasImageSource, image: CanvasImageSource,
repetition: DOMString, repetition: DOMString,
) -> Fallible<DomRoot<CanvasPattern>> { ) -> Fallible<Option<DomRoot<CanvasPattern>>> {
self.context.CreatePattern(image, repetition) self.context.CreatePattern(image, repetition)
} }

View file

@ -93,7 +93,7 @@ interface mixin CanvasFillStrokeStyles {
[Throws] [Throws]
CanvasGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1); CanvasGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1);
[Throws] [Throws]
CanvasPattern createPattern(CanvasImageSource image, [TreatNullAs=EmptyString] DOMString repetition); CanvasPattern? createPattern(CanvasImageSource image, [TreatNullAs=EmptyString] DOMString repetition);
}; };
[Exposed=(PaintWorklet, Window, Worker)] [Exposed=(PaintWorklet, Window, Worker)]

View file

@ -1,5 +0,0 @@
[2d.pattern.image.incomplete.emptysrc.html]
type: testharness
[Canvas test: 2d.pattern.image.incomplete.emptysrc]
expected: FAIL

View file

@ -1,5 +0,0 @@
[2d.pattern.image.incomplete.immediate.html]
type: testharness
[Canvas test: 2d.pattern.image.incomplete.immediate]
expected: FAIL

View file

@ -1,5 +0,0 @@
[2d.pattern.image.incomplete.nosrc.html]
type: testharness
[Canvas test: 2d.pattern.image.incomplete.nosrc]
expected: FAIL

View file

@ -1,5 +0,0 @@
[2d.pattern.image.incomplete.reload.html]
type: testharness
[Canvas test: 2d.pattern.image.incomplete.reload]
expected: FAIL

View file

@ -1,5 +0,0 @@
[2d.pattern.image.incomplete.removedsrc.html]
type: testharness
[Canvas test: 2d.pattern.image.incomplete.removedsrc]
expected: FAIL