From f5dbf4184117b03451a8dd0fce08dd0e3ff227ac Mon Sep 17 00:00:00 2001 From: Alexandrov Sergey Date: Tue, 30 Aug 2016 17:25:35 +0300 Subject: [PATCH 1/3] add HTMLOptionElement form attribute support --- components/script/dom/htmloptionelement.rs | 16 ++++++++++++++++ .../script/dom/webidls/HTMLOptionElement.webidl | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/components/script/dom/htmloptionelement.rs b/components/script/dom/htmloptionelement.rs index 737bc67bd4c..9183a78de0c 100644 --- a/components/script/dom/htmloptionelement.rs +++ b/components/script/dom/htmloptionelement.rs @@ -6,6 +6,7 @@ use dom::attr::Attr; use dom::bindings::codegen::Bindings::CharacterDataBinding::CharacterDataMethods; use dom::bindings::codegen::Bindings::HTMLOptionElementBinding; use dom::bindings::codegen::Bindings::HTMLOptionElementBinding::HTMLOptionElementMethods; +use dom::bindings::codegen::Bindings::HTMLSelectElementBinding::HTMLSelectElementBinding::HTMLSelectElementMethods; use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use dom::bindings::inheritance::Castable; use dom::bindings::js::Root; @@ -14,6 +15,8 @@ use dom::characterdata::CharacterData; use dom::document::Document; use dom::element::{AttributeMutation, Element}; use dom::htmlelement::HTMLElement; +use dom::htmlformelement::HTMLFormElement; +use dom::htmloptgroupelement::HTMLOptGroupElement; use dom::htmlscriptelement::HTMLScriptElement; use dom::htmlselectelement::HTMLSelectElement; use dom::node::{Node, UnbindContext}; @@ -110,6 +113,19 @@ impl HTMLOptionElementMethods for HTMLOptionElement { self.upcast::().SetTextContent(Some(value)) } + // https://html.spec.whatwg.org/multipage/#dom-option-form + fn GetForm(&self) -> Option> { + let parent = self.upcast::().GetParentNode().and_then(|p| + if p.is::() { + p.upcast::().GetParentNode() + } else { + Some(p) + } + ); + + parent.and_then(|p| p.downcast::().and_then(|s| s.GetForm())) + } + // https://html.spec.whatwg.org/multipage/#attr-option-value fn Value(&self) -> DOMString { let element = self.upcast::(); diff --git a/components/script/dom/webidls/HTMLOptionElement.webidl b/components/script/dom/webidls/HTMLOptionElement.webidl index a5c7c3295da..d4bc5bcdc83 100644 --- a/components/script/dom/webidls/HTMLOptionElement.webidl +++ b/components/script/dom/webidls/HTMLOptionElement.webidl @@ -9,7 +9,7 @@ [Exposed=(Window,Worker)] interface HTMLOptionElement : HTMLElement { attribute boolean disabled; - //readonly attribute HTMLFormElement? form; + readonly attribute HTMLFormElement? form; attribute DOMString label; attribute boolean defaultSelected; attribute boolean selected; From e4006fa9dd1a2d2b33f662bc15aae5079d97a581 Mon Sep 17 00:00:00 2001 From: Alexandrov Sergey Date: Tue, 30 Aug 2016 17:25:58 +0300 Subject: [PATCH 2/3] add HTMLOptionElement form attribute test --- tests/wpt/metadata/MANIFEST.json | 6 ++++ .../forms/the-option-element/option-form.html | 32 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-option-element/option-form.html diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 6c9c977a95b..7bbdda39bc3 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -37215,6 +37215,12 @@ "deleted_reftests": {}, "items": { "testharness": { + "html/semantics/forms/the-option-element/option-form.html": [ + { + "path": "html/semantics/forms/the-option-element/option-form.html", + "url": "/html/semantics/forms/the-option-element/option-form.html" + } + ], "html/semantics/interactive-elements/the-dialog-element/dialog-open.html": [ { "path": "html/semantics/interactive-elements/the-dialog-element/dialog-open.html", diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-option-element/option-form.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-option-element/option-form.html new file mode 100644 index 00000000000..1a68b5c1ca8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-option-element/option-form.html @@ -0,0 +1,32 @@ + + +HTMLOptionElement.form + + + + +
+ +
+
+ + From 3b3b8711467822f1cb5a344175225980096c5076 Mon Sep 17 00:00:00 2001 From: Alexandrov Sergey Date: Tue, 30 Aug 2016 20:28:10 +0300 Subject: [PATCH 3/3] update fixed tests expectations --- tests/wpt/metadata/html/dom/interfaces.html.ini | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index f4b4a274fd0..0898618fa9f 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -3855,15 +3855,9 @@ [HTMLOptGroupElement interface: document.createElement("optgroup") must inherit property "label" with the proper type (1)] expected: FAIL - [HTMLOptionElement interface: attribute form] - 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 "index" with the proper type (7)] expected: FAIL