diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs
index 8107d8bcb5d..4ef2fccc79d 100644
--- a/components/script/dom/htmlimageelement.rs
+++ b/components/script/dom/htmlimageelement.rs
@@ -1414,6 +1414,11 @@ impl HTMLImageElementMethods for HTMLImageElement {
// https://html.spec.whatwg.org/multipage/#dom-img-src
make_setter!(SetSrc, "src");
+ // https://html.spec.whatwg.org/multipage/#dom-img-srcset
+ make_getter!(Srcset, "srcset");
+ // https://html.spec.whatwg.org/multipage/#dom-img-src
+ make_setter!(SetSrcset, "srcset");
+
// https://html.spec.whatwg.org/multipage/#dom-img-crossOrigin
fn GetCrossOrigin(&self) -> Option {
reflect_cross_origin_attribute(self.upcast::())
@@ -1487,13 +1492,13 @@ impl HTMLImageElementMethods for HTMLImageElement {
// https://html.spec.whatwg.org/multipage/#dom-img-complete
fn Complete(&self) -> bool {
let elem = self.upcast::();
- // TODO: take srcset into account
- if !elem.has_attribute(&local_name!("src")) {
- return true;
+ let srcset_absent = !elem.has_attribute(&local_name!("srcset"));
+ if !elem.has_attribute(&local_name!("src")) && srcset_absent {
+ return true
}
let src = elem.get_string_attribute(&local_name!("src"));
- if src.is_empty() {
- return true;
+ if srcset_absent && src.is_empty() {
+ return true
}
let request = self.current_request.borrow();
let request_state = request.state;
diff --git a/components/script/dom/webidls/HTMLImageElement.webidl b/components/script/dom/webidls/HTMLImageElement.webidl
index 4f5be4daf7c..b7dddd07b9f 100644
--- a/components/script/dom/webidls/HTMLImageElement.webidl
+++ b/components/script/dom/webidls/HTMLImageElement.webidl
@@ -9,8 +9,8 @@ interface HTMLImageElement : HTMLElement {
attribute DOMString alt;
[CEReactions]
attribute DOMString src;
- // [CEReactions]
- // attribute DOMString srcset;
+ [CEReactions]
+ attribute DOMString srcset;
[CEReactions]
attribute DOMString? crossOrigin;
[CEReactions]
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 5a657e8f587..1bdfe665e83 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -610714,7 +610714,7 @@
"support"
],
"html/semantics/embedded-content/the-img-element/img.complete.html": [
- "4be8d4db848ad259a508e1a8091feaae7733e784",
+ "ee043a8c94fa4f69b0648d5d31e17f5cc591ec5f",
"testharness"
],
"html/semantics/embedded-content/the-img-element/intrinsicsize/intrinsicsize-with-responsive-images.tentative.html": [
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
index 0f1a214d0ee..18999a2cf7b 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
@@ -1,33 +1,14 @@
[viewport-change.html]
type: testharness
- expected: TIMEOUT
[picture: source (max-width:500px) broken image, img valid image, resize to wide]
- expected: TIMEOUT
+ expected: FAIL
[picture: source (max-width:500px) valid image, img valid image, resize to wide]
expected: FAIL
[picture: source (max-width:500px) valid image, img broken image, resize to narrow]
- expected: TIMEOUT
+ expected: FAIL
[picture: source (max-width:500px) valid image, img valid image, resize to narrow]
expected: FAIL
- [picture: source (max-width:500px) broken image, img valid image, resize to narrow]
- expected: FAIL
-
- [img (srcset 1 cand) valid image, resize to wide]
- expected: FAIL
-
- [picture: same URL in source (max-width:500px) and img, resize to wide]
- expected: FAIL
-
- [img (srcset 1 cand) valid image, resize to narrow]
- expected: FAIL
-
- [picture: source (max-width:500px) valid image, img broken image, resize to wide]
- expected: FAIL
-
- [picture: same URL in source (max-width:500px) and img, resize to narrow]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/intrinsicsize/intrinsicsize-with-responsive-images.tentative.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/intrinsicsize/intrinsicsize-with-responsive-images.tentative.html.ini
index ce02e674b67..8e027c0cd4e 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/intrinsicsize/intrinsicsize-with-responsive-images.tentative.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/intrinsicsize/intrinsicsize-with-responsive-images.tentative.html.ini
@@ -1,7 +1,7 @@
[intrinsicsize-with-responsive-images.tentative.html]
expected: TIMEOUT
[Test image /images/green.png with no specified sizes, width, or height]
- expected: TIMEOUT
+ expected: FAIL
[Test image /images/green.svg with no specified sizes, width, or height]
expected: TIMEOUT
@@ -10,7 +10,7 @@
expected: FAIL
[Test image (32 x 32) with sizes = 100 and srcset descriptor = 32w]
- expected: TIMEOUT
+ expected: FAIL
[Test image /images/green.svg with width = 800, no specified sizes, or height]
expected: TIMEOUT
@@ -19,5 +19,5 @@
expected: FAIL
[Test image /images/green.png with width = 800, no specified sizes, or height]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-display-none.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-display-none.html.ini
deleted file mode 100644
index 24d7b92b058..00000000000
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-display-none.html.ini
+++ /dev/null
@@ -1,52 +0,0 @@
-[parse-a-sizes-attribute-display-none.html]
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
- [
ref sizes="1px" (display:none)]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-quirks-mode.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-quirks-mode.html.ini
deleted file mode 100644
index d5902a67ea6..00000000000
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-quirks-mode.html.ini
+++ /dev/null
@@ -1,52 +0,0 @@
-[parse-a-sizes-attribute-quirks-mode.html]
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
- [
ref sizes="1px" (quirks mode)]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-standards-mode.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-standards-mode.html.ini
deleted file mode 100644
index 779c4de3965..00000000000
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-standards-mode.html.ini
+++ /dev/null
@@ -1,52 +0,0 @@
-[parse-a-sizes-attribute-standards-mode.html]
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
- [
ref sizes="1px" (standards mode)]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-width-1000px.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-width-1000px.html.ini
deleted file mode 100644
index 4ae1d2faf27..00000000000
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-width-1000px.html.ini
+++ /dev/null
@@ -1,52 +0,0 @@
-[parse-a-sizes-attribute-width-1000px.html]
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
- [
ref sizes="1px" (width:1000px)]
- expected: FAIL
-
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/img.complete.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/img.complete.html
index 4be8d4db848..ee043a8c94f 100644
--- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/img.complete.html
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/img.complete.html
@@ -11,6 +11,7 @@
+