aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Shaughnessy <pshaughn@comcast.net>2020-01-22 20:15:42 -0500
committerPatrick Shaughnessy <pshaughn@comcast.net>2020-01-23 18:04:48 -0500
commitc1a23a85b2a4f0e53d2d58de64adfee4be7fb30b (patch)
tree90c027c89619e72cca717f1808c10a32e5cf9b27
parent2b77a992dba0547180b9bfd89a015556f8a51ba5 (diff)
downloadservo-c1a23a85b2a4f0e53d2d58de64adfee4be7fb30b.tar.gz
servo-c1a23a85b2a4f0e53d2d58de64adfee4be7fb30b.zip
Implement HTMLMenuElement
-rw-r--r--components/script/dom/bindings/htmlconstructor.rs2
-rw-r--r--components/script/dom/create.rs2
-rw-r--r--components/script/dom/customelementregistry.rs1
-rw-r--r--components/script/dom/htmlmenuelement.rs54
-rw-r--r--components/script/dom/mod.rs1
-rw-r--r--components/script/dom/webidls/HTMLMenuElement.webidl17
-rw-r--r--tests/wpt/metadata/custom-elements/builtin-coverage.html.ini2
-rw-r--r--tests/wpt/metadata/html/dom/idlharness.https.html.ini30
-rw-r--r--tests/wpt/metadata/html/dom/reflection-misc.html.ini216
-rw-r--r--tests/wpt/metadata/html/semantics/interfaces.html.ini6
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json2
-rw-r--r--tests/wpt/mozilla/tests/mozilla/interfaces.html1
12 files changed, 80 insertions, 254 deletions
diff --git a/components/script/dom/bindings/htmlconstructor.rs b/components/script/dom/bindings/htmlconstructor.rs
index 1937f400fda..f94105717c4 100644
--- a/components/script/dom/bindings/htmlconstructor.rs
+++ b/components/script/dom/bindings/htmlconstructor.rs
@@ -36,6 +36,7 @@ use crate::dom::bindings::codegen::Bindings::HTMLLabelElementBinding;
use crate::dom::bindings::codegen::Bindings::HTMLLegendElementBinding;
use crate::dom::bindings::codegen::Bindings::HTMLLinkElementBinding;
use crate::dom::bindings::codegen::Bindings::HTMLMapElementBinding;
+use crate::dom::bindings::codegen::Bindings::HTMLMenuElementBinding;
use crate::dom::bindings::codegen::Bindings::HTMLMetaElementBinding;
use crate::dom::bindings::codegen::Bindings::HTMLMeterElementBinding;
use crate::dom::bindings::codegen::Bindings::HTMLModElementBinding;
@@ -279,6 +280,7 @@ pub fn get_constructor_object_from_local_name(
local_name!("map") => get_constructor!(HTMLMapElementBinding),
local_name!("mark") => get_constructor!(HTMLElementBinding),
local_name!("marquee") => get_constructor!(HTMLElementBinding),
+ local_name!("menu") => get_constructor!(HTMLMenuElementBinding),
local_name!("meta") => get_constructor!(HTMLMetaElementBinding),
local_name!("meter") => get_constructor!(HTMLMeterElementBinding),
local_name!("nav") => get_constructor!(HTMLElementBinding),
diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs
index c45e4286992..d67550ee47f 100644
--- a/components/script/dom/create.rs
+++ b/components/script/dom/create.rs
@@ -46,6 +46,7 @@ use crate::dom::htmllegendelement::HTMLLegendElement;
use crate::dom::htmllielement::HTMLLIElement;
use crate::dom::htmllinkelement::HTMLLinkElement;
use crate::dom::htmlmapelement::HTMLMapElement;
+use crate::dom::htmlmenuelement::HTMLMenuElement;
use crate::dom::htmlmetaelement::HTMLMetaElement;
use crate::dom::htmlmeterelement::HTMLMeterElement;
use crate::dom::htmlmodelement::HTMLModElement;
@@ -309,6 +310,7 @@ pub fn create_native_html_element(
local_name!("map") => make!(HTMLMapElement),
local_name!("mark") => make!(HTMLElement),
local_name!("marquee") => make!(HTMLElement),
+ local_name!("menu") => make!(HTMLMenuElement),
local_name!("meta") => make!(HTMLMetaElement),
local_name!("meter") => make!(HTMLMeterElement),
// https://html.spec.whatwg.org/multipage/#other-elements,-attributes-and-apis:multicol
diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs
index 392cf49cce5..2ce74064fc0 100644
--- a/components/script/dom/customelementregistry.rs
+++ b/components/script/dom/customelementregistry.rs
@@ -1127,6 +1127,7 @@ fn is_extendable_element_interface(element: &str) -> bool {
element == "map" ||
element == "mark" ||
element == "marquee" ||
+ element == "menu" ||
element == "meta" ||
element == "meter" ||
element == "nav" ||
diff --git a/components/script/dom/htmlmenuelement.rs b/components/script/dom/htmlmenuelement.rs
new file mode 100644
index 00000000000..b1b9955130c
--- /dev/null
+++ b/components/script/dom/htmlmenuelement.rs
@@ -0,0 +1,54 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+use crate::dom::bindings::codegen::Bindings::HTMLMenuElementBinding;
+use crate::dom::bindings::codegen::Bindings::HTMLMenuElementBinding::HTMLMenuElementMethods;
+use crate::dom::bindings::root::DomRoot;
+use crate::dom::document::Document;
+use crate::dom::htmlelement::HTMLElement;
+use crate::dom::node::Node;
+use dom_struct::dom_struct;
+use html5ever::{LocalName, Prefix};
+
+#[dom_struct]
+pub struct HTMLMenuElement {
+ htmlelement: HTMLElement,
+}
+
+impl HTMLMenuElement {
+ fn new_inherited(
+ local_name: LocalName,
+ prefix: Option<Prefix>,
+ document: &Document,
+ ) -> HTMLMenuElement {
+ HTMLMenuElement {
+ htmlelement: HTMLElement::new_inherited(local_name, prefix, document),
+ }
+ }
+
+ #[allow(unrooted_must_root)]
+ pub fn new(
+ local_name: LocalName,
+ prefix: Option<Prefix>,
+ document: &Document,
+ ) -> DomRoot<HTMLMenuElement> {
+ Node::reflect_node(
+ Box::new(HTMLMenuElement::new_inherited(local_name, prefix, document)),
+ document,
+ HTMLMenuElementBinding::Wrap,
+ )
+ }
+}
+
+impl HTMLMenuElementMethods for HTMLMenuElement {
+ // spec just mandates that compact reflects the content attribute,
+ // with no other semantics. Layout could use it to
+ // change line spacing, but nothing requires it to do so.
+
+ // https://html.spec.whatwg.org/multipage/#dom-menu-compact
+ make_bool_setter!(SetCompact, "compact");
+
+ // https://html.spec.whatwg.org/multipage/#dom-menu-compact
+ make_bool_getter!(Compact, "compact");
+}
diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs
index a39143c845b..2550eeda007 100644
--- a/components/script/dom/mod.rs
+++ b/components/script/dom/mod.rs
@@ -364,6 +364,7 @@ pub mod htmllielement;
pub mod htmllinkelement;
pub mod htmlmapelement;
pub mod htmlmediaelement;
+pub mod htmlmenuelement;
pub mod htmlmetaelement;
pub mod htmlmeterelement;
pub mod htmlmodelement;
diff --git a/components/script/dom/webidls/HTMLMenuElement.webidl b/components/script/dom/webidls/HTMLMenuElement.webidl
new file mode 100644
index 00000000000..be638bd4d88
--- /dev/null
+++ b/components/script/dom/webidls/HTMLMenuElement.webidl
@@ -0,0 +1,17 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+// https://html.spec.whatwg.org/multipage/#htmlmenuelement
+[Exposed=Window]
+interface HTMLMenuElement : HTMLElement {
+ [HTMLConstructor] constructor();
+
+ // also has obsolete members
+};
+
+// https://html.spec.whatwg.org/multipage/#HTMLMenuElement-partial
+partial interface HTMLMenuElement {
+ [CEReactions]
+ attribute boolean compact;
+};
diff --git a/tests/wpt/metadata/custom-elements/builtin-coverage.html.ini b/tests/wpt/metadata/custom-elements/builtin-coverage.html.ini
index 196dd3decbd..ffbb4fa5695 100644
--- a/tests/wpt/metadata/custom-elements/builtin-coverage.html.ini
+++ b/tests/wpt/metadata/custom-elements/builtin-coverage.html.ini
@@ -128,7 +128,7 @@
expected: FAIL
[mark: Operator 'new' should instantiate a customized built-in element]
expected: FAIL
- [menu: Define a customized built-in element]
+ [menu: Operator 'new' should instantiate a customized built-in element]
expected: FAIL
[meta: Operator 'new' should instantiate a customized built-in element]
expected: FAIL
diff --git a/tests/wpt/metadata/html/dom/idlharness.https.html.ini b/tests/wpt/metadata/html/dom/idlharness.https.html.ini
index 9e4822fb22f..6076f08dba6 100644
--- a/tests/wpt/metadata/html/dom/idlharness.https.html.ini
+++ b/tests/wpt/metadata/html/dom/idlharness.https.html.ini
@@ -1872,9 +1872,6 @@
[HTMLInputElement interface: createInput("time") must inherit property "useMap" with the proper type]
expected: FAIL
- [HTMLMenuElement interface: attribute compact]
- expected: FAIL
-
[HTMLInputElement interface: createInput("datetime-local") must inherit property "validity" with the proper type]
expected: FAIL
@@ -1950,9 +1947,6 @@
[HTMLIFrameElement interface: attribute marginHeight]
expected: FAIL
- [HTMLMenuElement interface: existence and properties of interface prototype object]
- expected: FAIL
-
[HTMLFormElement interface: document.createElement("form") must inherit property "reportValidity()" with the proper type]
expected: FAIL
@@ -2571,9 +2565,6 @@
[HTMLProgressElement interface: document.createElement("progress") must inherit property "value" with the proper type]
expected: FAIL
- [HTMLMenuElement interface: existence and properties of interface prototype object's @@unscopables property]
- expected: FAIL
-
[HTMLEmbedElement interface: attribute name]
expected: FAIL
@@ -2649,9 +2640,6 @@
[HTMLAnchorElement interface: attribute type]
expected: FAIL
- [Stringification of document.createElement("menu")]
- expected: FAIL
-
[HTMLCanvasElement interface: calling toBlob(BlobCallback, DOMString, any) on document.createElement("canvas") with too few arguments must throw TypeError]
expected: FAIL
@@ -2697,9 +2685,6 @@
[HTMLSlotElement interface: operation assignedElements(AssignedNodesOptions)]
expected: FAIL
- [HTMLMenuElement interface object length]
- expected: FAIL
-
[HTMLInputElement interface: attribute files]
expected: FAIL
@@ -2748,9 +2733,6 @@
[HTMLObjectElement interface: document.createElement("object") must inherit property "width" with the proper type]
expected: FAIL
- [HTMLMenuElement interface: existence and properties of interface object]
- expected: FAIL
-
[HTMLInputElement interface: createInput("file") must inherit property "checkValidity()" with the proper type]
expected: FAIL
@@ -3045,9 +3027,6 @@
[HTMLInputElement interface: createInput("time") must inherit property "willValidate" with the proper type]
expected: FAIL
- [HTMLMenuElement interface object name]
- expected: FAIL
-
[HTMLFrameElement interface: attribute frameBorder]
expected: FAIL
@@ -3144,9 +3123,6 @@
[HTMLMeterElement interface: attribute high]
expected: FAIL
- [HTMLMenuElement interface: document.createElement("menu") must inherit property "compact" with the proper type]
- expected: FAIL
-
[HTMLInputElement interface: createInput("reset") must inherit property "useMap" with the proper type]
expected: FAIL
@@ -3855,9 +3831,6 @@
[HTMLInputElement interface: createInput("color") must inherit property "align" with the proper type]
expected: FAIL
- [HTMLMenuElement interface: existence and properties of interface prototype object's "constructor" property]
- expected: FAIL
-
[HTMLModElement interface: document.createElement("ins") must inherit property "cite" with the proper type]
expected: FAIL
@@ -4242,9 +4215,6 @@
[HTMLTableElement interface: document.createElement("table") must inherit property "cellPadding" with the proper type]
expected: FAIL
- [HTMLMenuElement must be primary interface of document.createElement("menu")]
- expected: FAIL
-
[HTMLAreaElement interface: attribute username]
expected: FAIL
diff --git a/tests/wpt/metadata/html/dom/reflection-misc.html.ini b/tests/wpt/metadata/html/dom/reflection-misc.html.ini
index 9ff7bf5a98b..0551959aca8 100644
--- a/tests/wpt/metadata/html/dom/reflection-misc.html.ini
+++ b/tests/wpt/metadata/html/dom/reflection-misc.html.ini
@@ -6402,114 +6402,6 @@
[menu.label: IDL set to object "test-valueOf" followed by IDL get]
expected: FAIL
- [menu.compact: typeof IDL attribute]
- expected: FAIL
-
- [menu.compact: IDL get with DOM attribute unset]
- expected: FAIL
-
- [menu.compact: setAttribute() to "" followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to " foo " followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to undefined followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to null followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to 7 followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to 1.5 followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to true followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to false followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to object "[object Object\]" followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to NaN followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to Infinity followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to -Infinity followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to "\\0" followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to object "test-toString" followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to object "test-valueOf" followed by IDL get]
- expected: FAIL
-
- [menu.compact: setAttribute() to "compact" followed by IDL get]
- expected: FAIL
-
- [menu.compact: IDL set to "" followed by hasAttribute()]
- expected: FAIL
-
- [menu.compact: IDL set to "" followed by IDL get]
- expected: FAIL
-
- [menu.compact: IDL set to " foo " followed by IDL get]
- expected: FAIL
-
- [menu.compact: IDL set to undefined followed by hasAttribute()]
- expected: FAIL
-
- [menu.compact: IDL set to undefined followed by IDL get]
- expected: FAIL
-
- [menu.compact: IDL set to null followed by hasAttribute()]
- expected: FAIL
-
- [menu.compact: IDL set to null followed by IDL get]
- expected: FAIL
-
- [menu.compact: IDL set to 7 followed by IDL get]
- expected: FAIL
-
- [menu.compact: IDL set to 1.5 followed by IDL get]
- expected: FAIL
-
- [menu.compact: IDL set to false followed by hasAttribute()]
- expected: FAIL
-
- [menu.compact: IDL set to object "[object Object\]" followed by IDL get]
- expected: FAIL
-
- [menu.compact: IDL set to NaN followed by hasAttribute()]
- expected: FAIL
-
- [menu.compact: IDL set to NaN followed by IDL get]
- expected: FAIL
-
- [menu.compact: IDL set to Infinity followed by IDL get]
- expected: FAIL
-
- [menu.compact: IDL set to -Infinity followed by IDL get]
- expected: FAIL
-
- [menu.compact: IDL set to "\\0" followed by IDL get]
- expected: FAIL
-
- [menu.compact: IDL set to object "test-toString" followed by IDL get]
- expected: FAIL
-
- [menu.compact: IDL set to object "test-valueOf" followed by IDL get]
- expected: FAIL
-
[menu.itemScope: typeof IDL attribute]
expected: FAIL
@@ -15669,96 +15561,6 @@
[menu.label: IDL set to object "test-valueOf"]
expected: FAIL
- [menu.compact: setAttribute() to ""]
- expected: FAIL
-
- [menu.compact: setAttribute() to " foo "]
- expected: FAIL
-
- [menu.compact: setAttribute() to undefined]
- expected: FAIL
-
- [menu.compact: setAttribute() to null]
- expected: FAIL
-
- [menu.compact: setAttribute() to 7]
- expected: FAIL
-
- [menu.compact: setAttribute() to 1.5]
- expected: FAIL
-
- [menu.compact: setAttribute() to true]
- expected: FAIL
-
- [menu.compact: setAttribute() to false]
- expected: FAIL
-
- [menu.compact: setAttribute() to object "[object Object\]"]
- expected: FAIL
-
- [menu.compact: setAttribute() to NaN]
- expected: FAIL
-
- [menu.compact: setAttribute() to Infinity]
- expected: FAIL
-
- [menu.compact: setAttribute() to -Infinity]
- expected: FAIL
-
- [menu.compact: setAttribute() to "\\0"]
- expected: FAIL
-
- [menu.compact: setAttribute() to object "test-toString"]
- expected: FAIL
-
- [menu.compact: setAttribute() to object "test-valueOf"]
- expected: FAIL
-
- [menu.compact: setAttribute() to "compact"]
- expected: FAIL
-
- [menu.compact: IDL set to ""]
- expected: FAIL
-
- [menu.compact: IDL set to " foo "]
- expected: FAIL
-
- [menu.compact: IDL set to undefined]
- expected: FAIL
-
- [menu.compact: IDL set to null]
- expected: FAIL
-
- [menu.compact: IDL set to 7]
- expected: FAIL
-
- [menu.compact: IDL set to 1.5]
- expected: FAIL
-
- [menu.compact: IDL set to false]
- expected: FAIL
-
- [menu.compact: IDL set to object "[object Object\]"]
- expected: FAIL
-
- [menu.compact: IDL set to NaN]
- expected: FAIL
-
- [menu.compact: IDL set to Infinity]
- expected: FAIL
-
- [menu.compact: IDL set to -Infinity]
- expected: FAIL
-
- [menu.compact: IDL set to "\\0"]
- expected: FAIL
-
- [menu.compact: IDL set to object "test-toString"]
- expected: FAIL
-
- [menu.compact: IDL set to object "test-valueOf"]
- expected: FAIL
-
[menuitem.dir: setAttribute() to ""]
expected: FAIL
@@ -19131,12 +18933,6 @@
[template.dir: IDL set to "5%"]
expected: FAIL
- [menu.compact: setAttribute() to "5%"]
- expected: FAIL
-
- [menu.compact: IDL set to "5%"]
- expected: FAIL
-
[ins.cite: setAttribute() to "5%"]
expected: FAIL
@@ -19440,9 +19236,6 @@
[slot.name: setAttribute() to ".5"]
expected: FAIL
- [menu.compact: setAttribute() to "+100"]
- expected: FAIL
-
[script.accessKey: IDL set to ".5"]
expected: FAIL
@@ -19569,9 +19362,6 @@
[undefinedelement.enterKeyHint: setAttribute() to ".5"]
expected: FAIL
- [menu.compact: setAttribute() to ".5"]
- expected: FAIL
-
[del.dateTime: setAttribute() to "+100"]
expected: FAIL
@@ -19629,9 +19419,6 @@
[dialog.accessKey: setAttribute() to ".5"]
expected: FAIL
- [menu.compact: IDL set to ".5"]
- expected: FAIL
-
[del.cite: setAttribute() to ".5"]
expected: FAIL
@@ -19710,9 +19497,6 @@
[del.accessKey: IDL set to "+100"]
expected: FAIL
- [menu.compact: IDL set to "+100"]
- expected: FAIL
-
[summary.dir: setAttribute() to "+100"]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/interfaces.html.ini b/tests/wpt/metadata/html/semantics/interfaces.html.ini
index 094a21f1ea2..fa72acf7738 100644
--- a/tests/wpt/metadata/html/semantics/interfaces.html.ini
+++ b/tests/wpt/metadata/html/semantics/interfaces.html.ini
@@ -3,9 +3,6 @@
[Interfaces for marquee]
expected: FAIL
- [Interfaces for menu]
- expected: FAIL
-
[Interfaces for noembed]
expected: FAIL
@@ -15,9 +12,6 @@
[Interfaces for MARQUEE]
expected: FAIL
- [Interfaces for MENU]
- expected: FAIL
-
[Interfaces for NOEMBED]
expected: FAIL
diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json
index a683eeb8628..fb721fd2900 100644
--- a/tests/wpt/mozilla/meta/MANIFEST.json
+++ b/tests/wpt/mozilla/meta/MANIFEST.json
@@ -19032,7 +19032,7 @@
"testharness"
],
"mozilla/interfaces.html": [
- "945a8b33a109b0cc37db9351f94b9afd3eac798e",
+ "114ec29df620cc0526d39a41928f72d9359890a9",
"testharness"
],
"mozilla/interfaces.js": [
diff --git a/tests/wpt/mozilla/tests/mozilla/interfaces.html b/tests/wpt/mozilla/tests/mozilla/interfaces.html
index 945a8b33a10..114ec29df62 100644
--- a/tests/wpt/mozilla/tests/mozilla/interfaces.html
+++ b/tests/wpt/mozilla/tests/mozilla/interfaces.html
@@ -124,6 +124,7 @@ test_interfaces([
"HTMLLinkElement",
"HTMLMapElement",
"HTMLMediaElement",
+ "HTMLMenuElement",
"HTMLMetaElement",
"HTMLMeterElement",
"HTMLModElement",