diff --git a/components/script/dom/htmloptionelement.rs b/components/script/dom/htmloptionelement.rs index b9df3cc83d0..eabda88f4f8 100644 --- a/components/script/dom/htmloptionelement.rs +++ b/components/script/dom/htmloptionelement.rs @@ -91,6 +91,35 @@ impl<'a> HTMLOptionElementMethods for JSRef<'a, HTMLOptionElement> { let node: JSRef = NodeCast::from_ref(self); node.SetTextContent(Some(value)) } + + // https://html.spec.whatwg.org/multipage/forms.html#attr-option-value + fn Value(self) -> DOMString { + let element: JSRef = ElementCast::from_ref(self); + let attr = &atom!("value"); + if element.has_attribute(attr) { + element.get_string_attribute(attr) + } else { + self.Text() + } + } + + // https://html.spec.whatwg.org/multipage/forms.html#attr-option-value + make_setter!(SetValue, "value") + + // https://html.spec.whatwg.org/multipage/forms.html#attr-option-label + fn Label(self) -> DOMString { + let element: JSRef = ElementCast::from_ref(self); + let attr = &atom!("label"); + if element.has_attribute(attr) { + element.get_string_attribute(attr) + } else { + self.Text() + } + } + + // https://html.spec.whatwg.org/multipage/forms.html#attr-option-label + make_setter!(SetLabel, "label") + } impl<'a> VirtualMethods for JSRef<'a, HTMLOptionElement> { @@ -110,7 +139,7 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLOptionElement> { let node: JSRef = NodeCast::from_ref(*self); node.set_disabled_state(true); node.set_enabled_state(false); - }, + } _ => () } } diff --git a/components/script/dom/webidls/HTMLOptionElement.webidl b/components/script/dom/webidls/HTMLOptionElement.webidl index 5c3f4b37f6a..9126e24d790 100644 --- a/components/script/dom/webidls/HTMLOptionElement.webidl +++ b/components/script/dom/webidls/HTMLOptionElement.webidl @@ -6,12 +6,12 @@ // http://www.whatwg.org/html/#htmloptionelement //[NamedConstructor=Option(optional DOMString text = "", optional DOMString value, optional boolean defaultSelected = false, optional boolean selected = false)] interface HTMLOptionElement : HTMLElement { - attribute boolean disabled; + attribute boolean disabled; //readonly attribute HTMLFormElement? form; - // attribute DOMString label; + attribute DOMString label; // attribute boolean defaultSelected; // attribute boolean selected; - // attribute DOMString value; + attribute DOMString value; attribute DOMString text; //readonly attribute long index; diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index ab044ab945f..1b10c3fd820 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -6135,36 +6135,24 @@ [HTMLOptionElement interface: attribute form] expected: FAIL - [HTMLOptionElement interface: attribute label] - expected: FAIL - [HTMLOptionElement interface: attribute defaultSelected] expected: FAIL [HTMLOptionElement interface: attribute selected] expected: FAIL - [HTMLOptionElement interface: attribute value] - expected: FAIL - [HTMLOptionElement interface: attribute index] expected: FAIL [HTMLOptionElement interface: document.createElement("option") must inherit property "form" with the proper type (1)] expected: FAIL - [HTMLOptionElement interface: document.createElement("option") must inherit property "label" with the proper type (2)] - expected: FAIL - [HTMLOptionElement interface: document.createElement("option") must inherit property "defaultSelected" with the proper type (3)] expected: FAIL [HTMLOptionElement interface: document.createElement("option") must inherit property "selected" with the proper type (4)] expected: FAIL - [HTMLOptionElement interface: document.createElement("option") must inherit property "value" with the proper type (5)] - expected: FAIL - [HTMLOptionElement interface: document.createElement("option") must inherit property "index" with the proper type (7)] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/reflection-forms.html.ini b/tests/wpt/metadata/html/dom/reflection-forms.html.ini index 49ed4d13f2c..0eca5cd8754 100644 --- a/tests/wpt/metadata/html/dom/reflection-forms.html.ini +++ b/tests/wpt/metadata/html/dom/reflection-forms.html.ini @@ -13527,93 +13527,6 @@ [option.tabIndex: IDL set to -2147483648 followed by getAttribute()] expected: FAIL - [option.label: typeof IDL attribute] - expected: FAIL - - [option.label: IDL get with DOM attribute unset] - expected: FAIL - - [option.label: IDL set to "" followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo " followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to undefined followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to undefined followed by IDL get] - expected: FAIL - - [option.label: IDL set to 7 followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to 7 followed by IDL get] - expected: FAIL - - [option.label: IDL set to 1.5 followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to 1.5 followed by IDL get] - expected: FAIL - - [option.label: IDL set to true followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to true followed by IDL get] - expected: FAIL - - [option.label: IDL set to false followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to false followed by IDL get] - expected: FAIL - - [option.label: IDL set to object "[object Object\]" followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to object "[object Object\]" followed by IDL get] - expected: FAIL - - [option.label: IDL set to NaN followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to NaN followed by IDL get] - expected: FAIL - - [option.label: IDL set to Infinity followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to Infinity followed by IDL get] - expected: FAIL - - [option.label: IDL set to -Infinity followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to -Infinity followed by IDL get] - expected: FAIL - - [option.label: IDL set to "\\0" followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to null followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to null followed by IDL get] - expected: FAIL - - [option.label: IDL set to object "test-toString" followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to object "test-toString" followed by IDL get] - expected: FAIL - - [option.label: IDL set to object "test-valueOf" followed by getAttribute()] - expected: FAIL - - [option.label: IDL set to object "test-valueOf" followed by IDL get] - expected: FAIL - [option.defaultSelected (