diff options
author | Patrick Shaughnessy <pshaughn@comcast.net> | 2020-01-22 20:15:42 -0500 |
---|---|---|
committer | Patrick Shaughnessy <pshaughn@comcast.net> | 2020-01-23 18:04:48 -0500 |
commit | c1a23a85b2a4f0e53d2d58de64adfee4be7fb30b (patch) | |
tree | 90c027c89619e72cca717f1808c10a32e5cf9b27 | |
parent | 2b77a992dba0547180b9bfd89a015556f8a51ba5 (diff) | |
download | servo-c1a23a85b2a4f0e53d2d58de64adfee4be7fb30b.tar.gz servo-c1a23a85b2a4f0e53d2d58de64adfee4be7fb30b.zip |
Implement HTMLMenuElement
-rw-r--r-- | components/script/dom/bindings/htmlconstructor.rs | 2 | ||||
-rw-r--r-- | components/script/dom/create.rs | 2 | ||||
-rw-r--r-- | components/script/dom/customelementregistry.rs | 1 | ||||
-rw-r--r-- | components/script/dom/htmlmenuelement.rs | 54 | ||||
-rw-r--r-- | components/script/dom/mod.rs | 1 | ||||
-rw-r--r-- | components/script/dom/webidls/HTMLMenuElement.webidl | 17 | ||||
-rw-r--r-- | tests/wpt/metadata/custom-elements/builtin-coverage.html.ini | 2 | ||||
-rw-r--r-- | tests/wpt/metadata/html/dom/idlharness.https.html.ini | 30 | ||||
-rw-r--r-- | tests/wpt/metadata/html/dom/reflection-misc.html.ini | 216 | ||||
-rw-r--r-- | tests/wpt/metadata/html/semantics/interfaces.html.ini | 6 | ||||
-rw-r--r-- | tests/wpt/mozilla/meta/MANIFEST.json | 2 | ||||
-rw-r--r-- | tests/wpt/mozilla/tests/mozilla/interfaces.html | 1 |
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", |