diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 1844bd3e426..e363baefbbc 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -1335,6 +1335,11 @@ impl ElementMethods for Element { self.attr_list.or_init(|| NamedNodeMap::new(&window_from_node(self), self)) } + // https://dom.spec.whatwg.org/#dom-element-hasattributes + fn HasAttributes(&self) -> bool { + !self.attrs.borrow().is_empty() + } + // https://dom.spec.whatwg.org/#dom-element-getattributenames fn GetAttributeNames(&self) -> Vec { self.attrs.borrow().iter().map(|attr| attr.Name()).collect() diff --git a/components/script/dom/webidls/Element.webidl b/components/script/dom/webidls/Element.webidl index f173f6afdd0..bec84acc8ce 100644 --- a/components/script/dom/webidls/Element.webidl +++ b/components/script/dom/webidls/Element.webidl @@ -35,6 +35,8 @@ interface Element : Node { [Pure] sequence getAttributeNames(); [Pure] + boolean hasAttributes(); + [Pure] DOMString? getAttribute(DOMString name); [Pure] DOMString? getAttributeNS(DOMString? namespace, DOMString localName); diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 9004a69dcaa..bfb83729c78 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -35228,6 +35228,14 @@ "url": "/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale.html" } ] + }, + "testharness": { + "dom/nodes/Element-hasAttributes.html": [ + { + "path": "dom/nodes/Element-hasAttributes.html", + "url": "/dom/nodes/Element-hasAttributes.html" + } + ] } }, "reftest_nodes": { diff --git a/tests/wpt/metadata/dom/interfaces.html.ini b/tests/wpt/metadata/dom/interfaces.html.ini index 8d92df54e4f..68196d519d3 100644 --- a/tests/wpt/metadata/dom/interfaces.html.ini +++ b/tests/wpt/metadata/dom/interfaces.html.ini @@ -102,9 +102,6 @@ [DocumentFragment interface: calling queryAll(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError] expected: FAIL - [Element interface: operation hasAttributes()] - expected: FAIL - [Element interface: operation query(DOMString)] expected: FAIL @@ -264,9 +261,6 @@ [Element interface: element must inherit property "slot" with the proper type (7)] expected: FAIL - [Element interface: element must inherit property "hasAttributes" with the proper type (8)] - expected: FAIL - [Element interface: element must inherit property "attachShadow" with the proper type (24)] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index f7f6399a95e..1acedab90ec 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -1956,9 +1956,6 @@ [HTMLElement interface: document.createElement("noscript") must inherit property "onwaiting" with the proper type (94)] expected: FAIL - [Element interface: document.createElement("noscript") must inherit property "hasAttributes" with the proper type (7)] - expected: FAIL - [Element interface: document.createElement("noscript") must inherit property "query" with the proper type (34)] expected: FAIL diff --git a/tests/wpt/web-platform-tests/dom/nodes/Element-hasAttributes.html b/tests/wpt/web-platform-tests/dom/nodes/Element-hasAttributes.html new file mode 100644 index 00000000000..fbb9c233b70 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/nodes/Element-hasAttributes.html @@ -0,0 +1,40 @@ + + + + + + + + +
+

+ + +