diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index cb0f65d0b2b4..f03e43d9f2e0 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -86,14 +86,14 @@ impl Runnable for ImageResponseHandlerRunnable { // Update the image field let element = self.element.root(); let element_ref = element.r(); - let (image, metadata, trigger_image_load) = match self.image { + let (image, metadata, trigger_image_load, trigger_image_error) = match self.image { ImageResponse::Loaded(image) | ImageResponse::PlaceholderLoaded(image) => { - (Some(image.clone()), Some(ImageMetadata { height: image.height, width: image.width } ), true) + (Some(image.clone()), Some(ImageMetadata { height: image.height, width: image.width } ), true, false) } ImageResponse::MetadataLoaded(meta) => { - (None, Some(meta), false) + (None, Some(meta), false, false) } - ImageResponse::None => (None, None, true) + ImageResponse::None => (None, None, false, true) }; element_ref.current_request.borrow_mut().image = image; element_ref.current_request.borrow_mut().metadata = metadata; @@ -107,6 +107,11 @@ impl Runnable for ImageResponseHandlerRunnable { element.upcast::().fire_simple_event("load"); } + // Fire image.onerror + if trigger_image_error { + element.upcast::().fire_simple_event("error"); + } + // Trigger reflow let window = window_from_node(document.r()); window.add_pending_reflow(); diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 5606390b636e..b5a1aadce9e1 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -19305,6 +19305,10 @@ "path": "html/semantics/embedded-content/the-img-element/invalid-src.html", "url": "/html/semantics/embedded-content/the-img-element/invalid-src.html" }, + { + "path": "html/semantics/embedded-content/the-img-element/nonexistent-image.html", + "url": "/html/semantics/embedded-content/the-img-element/nonexistent-image.html" + }, { "path": "html/semantics/embedded-content/the-img-element/relevant-mutations.html", "url": "/html/semantics/embedded-content/the-img-element/relevant-mutations.html" diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-svg-image.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-svg-image.html.ini index a609b60a64b7..c91eba5318b6 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-svg-image.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-svg-image.html.ini @@ -1,5 +1,6 @@ [tex-image-and-sub-image-2d-with-svg-image.html] type: testharness + expected: TIMEOUT [WebGL test #0: at (4, 4) expected: 0,255,0 was 0,0,0] expected: FAIL diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/nonexistent-image.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/nonexistent-image.html new file mode 100644 index 000000000000..f58569ede0fa --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/nonexistent-image.html @@ -0,0 +1,21 @@ + + +Loading an nonexisting image should fail; triggering appropriate events + + + + + +