diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 98c0a8eb799..3ddf6b4f769 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -1228,6 +1228,11 @@ impl ElementMethods for Element { self.attr_list.or_init(|| NamedNodeMap::new(&window_from_node(self), self)) } + // https://dom.spec.whatwg.org/#dom-element-getattributenames + fn GetAttributeNames(&self) -> Vec { + self.attrs.borrow().iter().map(|attr| attr.Name()).collect() + } + // https://dom.spec.whatwg.org/#dom-element-getattribute fn GetAttribute(&self, name: DOMString) -> Option { self.GetAttributeNode(name) diff --git a/components/script/dom/webidls/Element.webidl b/components/script/dom/webidls/Element.webidl index 1a9b74bb9f2..21c9f8234f0 100644 --- a/components/script/dom/webidls/Element.webidl +++ b/components/script/dom/webidls/Element.webidl @@ -34,6 +34,8 @@ interface Element : Node { [SameObject] readonly attribute NamedNodeMap attributes; [Pure] + sequence getAttributeNames(); + [Pure] DOMString? getAttribute(DOMString name); [Pure] DOMString? getAttributeNS(DOMString? namespace, DOMString localName); diff --git a/tests/wpt/metadata/dom/interfaces.html.ini b/tests/wpt/metadata/dom/interfaces.html.ini index f45ecd075a1..65c1d82f2cf 100644 --- a/tests/wpt/metadata/dom/interfaces.html.ini +++ b/tests/wpt/metadata/dom/interfaces.html.ini @@ -120,19 +120,19 @@ [Element interface: element must inherit property "hasAttributes" with the proper type (7)] expected: FAIL - [Element interface: element must inherit property "removeAttributeNode" with the proper type (21)] + [Element interface: element must inherit property "removeAttributeNode" with the proper type (22)] expected: FAIL [Element interface: calling removeAttributeNode(Attr) on element with too few arguments must throw TypeError] expected: FAIL - [Element interface: element must inherit property "query" with the proper type (33)] + [Element interface: element must inherit property "query" with the proper type (34)] expected: FAIL [Element interface: calling query(DOMString) on element with too few arguments must throw TypeError] expected: FAIL - [Element interface: element must inherit property "queryAll" with the proper type (34)] + [Element interface: element must inherit property "queryAll" with the proper type (35)] expected: FAIL [Element interface: calling queryAll(DOMString) on element with too few arguments must throw TypeError] diff --git a/tests/wpt/metadata/dom/nodes/attributes.html.ini b/tests/wpt/metadata/dom/nodes/attributes.html.ini index c66885207f2..1531de6e1a8 100644 --- a/tests/wpt/metadata/dom/nodes/attributes.html.ini +++ b/tests/wpt/metadata/dom/nodes/attributes.html.ini @@ -3,9 +3,6 @@ [Basic functionality of removeAttributeNode] expected: FAIL - [getAttributeNames tests] - expected: FAIL - [Own property names should only include all-lowercase qualified names for an HTML element in an HTML document] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index 784d086c1a2..7e7c9590db6 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -1986,19 +1986,19 @@ [Element interface: document.createElement("noscript") must inherit property "hasAttributes" with the proper type (7)] expected: FAIL - [Element interface: document.createElement("noscript") must inherit property "removeAttributeNode" with the proper type (21)] + [Element interface: document.createElement("noscript") must inherit property "removeAttributeNode" with the proper type (22)] expected: FAIL [Element interface: calling removeAttributeNode(Attr) on document.createElement("noscript") with too few arguments must throw TypeError] expected: FAIL - [Element interface: document.createElement("noscript") must inherit property "query" with the proper type (33)] + [Element interface: document.createElement("noscript") must inherit property "query" with the proper type (34)] expected: FAIL [Element interface: calling query(DOMString) on document.createElement("noscript") with too few arguments must throw TypeError] expected: FAIL - [Element interface: document.createElement("noscript") must inherit property "queryAll" with the proper type (34)] + [Element interface: document.createElement("noscript") must inherit property "queryAll" with the proper type (35)] expected: FAIL [Element interface: calling queryAll(DOMString) on document.createElement("noscript") with too few arguments must throw TypeError] diff --git a/tests/wpt/web-platform-tests/dom/interfaces.html b/tests/wpt/web-platform-tests/dom/interfaces.html index 00cf70eb92d..591c5ab3c98 100644 --- a/tests/wpt/web-platform-tests/dom/interfaces.html +++ b/tests/wpt/web-platform-tests/dom/interfaces.html @@ -287,6 +287,7 @@ interface Element : Node { boolean hasAttributes(); [SameObject] readonly attribute NamedNodeMap attributes; + sequence getAttributeNames(); DOMString? getAttribute(DOMString name); DOMString? getAttributeNS(DOMString? namespace, DOMString localName); void setAttribute(DOMString name, DOMString value); diff --git a/tests/wpt/web-platform-tests/html/dom/interfaces.html b/tests/wpt/web-platform-tests/html/dom/interfaces.html index a9991a1f28e..8067495623f 100644 --- a/tests/wpt/web-platform-tests/html/dom/interfaces.html +++ b/tests/wpt/web-platform-tests/html/dom/interfaces.html @@ -289,6 +289,7 @@ interface Element : Node { boolean hasAttributes(); [SameObject] readonly attribute NamedNodeMap attributes; + sequence getAttributeNames(); DOMString? getAttribute(DOMString name); DOMString? getAttributeNS(DOMString? namespace, DOMString localName); void setAttribute(DOMString name, DOMString value);