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
+
+
+
+
+
+