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,
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)
}

View file

@ -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)

View file

@ -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)

View file

@ -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)
}

View file

@ -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)]

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