From 8d67914c7f33364435171c400698db998875595f Mon Sep 17 00:00:00 2001 From: Philipp Hartwig Date: Sun, 27 Sep 2015 19:08:53 +0200 Subject: [PATCH] Add form getters for additional elements; update test expectations This adds form getters for fieldset, label, object, output, select and textarea elements. --- components/script/dom/htmlfieldsetelement.rs | 14 ++++++++- components/script/dom/htmllabelelement.rs | 18 ++++++++++- components/script/dom/htmlobjectelement.rs | 14 ++++++++- components/script/dom/htmloutputelement.rs | 15 +++++++++- components/script/dom/htmlselectelement.rs | 16 ++++++++-- components/script/dom/htmltextareaelement.rs | 7 ++++- .../dom/webidls/HTMLFieldSetElement.webidl | 2 +- .../dom/webidls/HTMLLabelElement.webidl | 2 +- .../dom/webidls/HTMLObjectElement.webidl | 2 +- .../dom/webidls/HTMLOutputElement.webidl | 2 +- .../dom/webidls/HTMLSelectElement.webidl | 2 +- .../dom/webidls/HTMLTextAreaElement.webidl | 2 +- .../wpt/metadata/html/dom/interfaces.html.ini | 30 ------------------- .../form-control-infrastructure/form.html.ini | 18 ----------- 14 files changed, 83 insertions(+), 61 deletions(-) diff --git a/components/script/dom/htmlfieldsetelement.rs b/components/script/dom/htmlfieldsetelement.rs index deea3fa75d2c..a38c6e9a7b21 100644 --- a/components/script/dom/htmlfieldsetelement.rs +++ b/components/script/dom/htmlfieldsetelement.rs @@ -5,7 +5,7 @@ use dom::attr::Attr; use dom::bindings::codegen::Bindings::HTMLFieldSetElementBinding; use dom::bindings::codegen::Bindings::HTMLFieldSetElementBinding::HTMLFieldSetElementMethods; -use dom::bindings::codegen::InheritTypes::{HTMLElementCast, HTMLLegendElementDerived}; +use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, HTMLLegendElementDerived}; use dom::bindings::codegen::InheritTypes::{HTMLFieldSetElementDerived, NodeCast}; use dom::bindings::js::{Root, RootedReference}; use dom::document::Document; @@ -13,6 +13,7 @@ use dom::element::{AttributeMutation, Element, ElementTypeId}; use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::htmlcollection::{CollectionFilter, HTMLCollection}; use dom::htmlelement::{HTMLElement, HTMLElementTypeId}; +use dom::htmlformelement::{FormControl, HTMLFormElement}; use dom::node::{Node, NodeTypeId, window_from_node}; use dom::validitystate::ValidityState; use dom::virtualmethods::VirtualMethods; @@ -79,6 +80,11 @@ impl HTMLFieldSetElementMethods for HTMLFieldSetElement { // https://www.whatwg.org/html/#dom-fieldset-disabled make_bool_setter!(SetDisabled, "disabled"); + + // https://html.spec.whatwg.org/multipage#dom-fae-form + fn GetForm(&self) -> Option> { + self.form_owner() + } } impl VirtualMethods for HTMLFieldSetElement { @@ -150,3 +156,9 @@ impl VirtualMethods for HTMLFieldSetElement { } } } + +impl<'a> FormControl<'a> for &'a HTMLFieldSetElement { + fn to_element(self) -> &'a Element { + ElementCast::from_ref(self) + } +} diff --git a/components/script/dom/htmllabelelement.rs b/components/script/dom/htmllabelelement.rs index 5e7da7dfbffa..ec3f1fa78652 100644 --- a/components/script/dom/htmllabelelement.rs +++ b/components/script/dom/htmllabelelement.rs @@ -3,12 +3,15 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::codegen::Bindings::HTMLLabelElementBinding; +use dom::bindings::codegen::Bindings::HTMLLabelElementBinding::HTMLLabelElementMethods; +use dom::bindings::codegen::InheritTypes::ElementCast; use dom::bindings::codegen::InheritTypes::HTMLLabelElementDerived; use dom::bindings::js::Root; use dom::document::Document; -use dom::element::ElementTypeId; +use dom::element::{Element, ElementTypeId}; use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::htmlelement::{HTMLElement, HTMLElementTypeId}; +use dom::htmlformelement::{FormControl, HTMLFormElement}; use dom::node::{Node, NodeTypeId}; use util::str::DOMString; @@ -43,3 +46,16 @@ impl HTMLLabelElement { Node::reflect_node(box element, document, HTMLLabelElementBinding::Wrap) } } + +impl HTMLLabelElementMethods for HTMLLabelElement { + // https://html.spec.whatwg.org/multipage#dom-fae-form + fn GetForm(&self) -> Option> { + self.form_owner() + } +} + +impl<'a> FormControl<'a> for &'a HTMLLabelElement { + fn to_element(self) -> &'a Element { + ElementCast::from_ref(self) + } +} diff --git a/components/script/dom/htmlobjectelement.rs b/components/script/dom/htmlobjectelement.rs index ac063d12f005..e197f1d60c4d 100644 --- a/components/script/dom/htmlobjectelement.rs +++ b/components/script/dom/htmlobjectelement.rs @@ -10,9 +10,10 @@ use dom::bindings::codegen::InheritTypes::HTMLObjectElementDerived; use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast}; use dom::bindings::js::Root; use dom::document::Document; -use dom::element::{AttributeMutation, ElementTypeId}; +use dom::element::{AttributeMutation, Element, ElementTypeId}; use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::htmlelement::{HTMLElement, HTMLElementTypeId}; +use dom::htmlformelement::{FormControl, HTMLFormElement}; use dom::node::{Node, NodeTypeId, window_from_node}; use dom::validitystate::ValidityState; use dom::virtualmethods::VirtualMethods; @@ -92,6 +93,11 @@ impl HTMLObjectElementMethods for HTMLObjectElement { // https://html.spec.whatwg.org/multipage/#dom-object-type make_setter!(SetType, "type"); + + // https://html.spec.whatwg.org/multipage#dom-fae-form + fn GetForm(&self) -> Option> { + self.form_owner() + } } impl VirtualMethods for HTMLObjectElement { @@ -112,3 +118,9 @@ impl VirtualMethods for HTMLObjectElement { } } } + +impl<'a> FormControl<'a> for &'a HTMLObjectElement { + fn to_element(self) -> &'a Element { + ElementCast::from_ref(self) + } +} diff --git a/components/script/dom/htmloutputelement.rs b/components/script/dom/htmloutputelement.rs index 0b69f99ce0a3..781ba2f9e83d 100644 --- a/components/script/dom/htmloutputelement.rs +++ b/components/script/dom/htmloutputelement.rs @@ -4,12 +4,14 @@ use dom::bindings::codegen::Bindings::HTMLOutputElementBinding; use dom::bindings::codegen::Bindings::HTMLOutputElementBinding::HTMLOutputElementMethods; +use dom::bindings::codegen::InheritTypes::ElementCast; use dom::bindings::codegen::InheritTypes::HTMLOutputElementDerived; use dom::bindings::js::Root; use dom::document::Document; -use dom::element::ElementTypeId; +use dom::element::{Element, ElementTypeId}; use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::htmlelement::{HTMLElement, HTMLElementTypeId}; +use dom::htmlformelement::{FormControl, HTMLFormElement}; use dom::node::{Node, NodeTypeId, window_from_node}; use dom::validitystate::ValidityState; use util::str::DOMString; @@ -52,4 +54,15 @@ impl HTMLOutputElementMethods for HTMLOutputElement { let window = window_from_node(self); ValidityState::new(window.r()) } + + // https://html.spec.whatwg.org/multipage#dom-fae-form + fn GetForm(&self) -> Option> { + self.form_owner() + } +} + +impl<'a> FormControl<'a> for &'a HTMLOutputElement { + fn to_element(self) -> &'a Element { + ElementCast::from_ref(self) + } } diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs index 6245b25daa3e..48aea7422ee6 100644 --- a/components/script/dom/htmlselectelement.rs +++ b/components/script/dom/htmlselectelement.rs @@ -5,15 +5,16 @@ use dom::attr::{Attr, AttrValue}; use dom::bindings::codegen::Bindings::HTMLSelectElementBinding; use dom::bindings::codegen::Bindings::HTMLSelectElementBinding::HTMLSelectElementMethods; -use dom::bindings::codegen::InheritTypes::{HTMLElementCast, NodeCast}; +use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast}; use dom::bindings::codegen::InheritTypes::{HTMLFieldSetElementDerived, HTMLSelectElementDerived}; use dom::bindings::codegen::UnionTypes::HTMLElementOrLong; use dom::bindings::codegen::UnionTypes::HTMLOptionElementOrHTMLOptGroupElement; use dom::bindings::js::Root; use dom::document::Document; -use dom::element::{AttributeMutation, ElementTypeId}; +use dom::element::{AttributeMutation, Element, ElementTypeId}; use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::htmlelement::{HTMLElement, HTMLElementTypeId}; +use dom::htmlformelement::{FormControl, HTMLFormElement}; use dom::node::{Node, NodeTypeId, window_from_node}; use dom::validitystate::ValidityState; use dom::virtualmethods::VirtualMethods; @@ -73,6 +74,11 @@ impl HTMLSelectElementMethods for HTMLSelectElement { // https://www.whatwg.org/html/#dom-fe-disabled make_bool_setter!(SetDisabled, "disabled"); + // https://html.spec.whatwg.org/multipage#dom-fae-form + fn GetForm(&self) -> Option> { + self.form_owner() + } + // https://html.spec.whatwg.org/multipage/#dom-select-multiple make_bool_getter!(Multiple); @@ -154,3 +160,9 @@ impl VirtualMethods for HTMLSelectElement { } } } + +impl<'a> FormControl<'a> for &'a HTMLSelectElement { + fn to_element(self) -> &'a Element { + ElementCast::from_ref(self) + } +} diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs index f67399754027..9c20b4ad2b23 100644 --- a/components/script/dom/htmltextareaelement.rs +++ b/components/script/dom/htmltextareaelement.rs @@ -19,7 +19,7 @@ use dom::element::{AttributeMutation, Element, ElementTypeId}; use dom::event::{Event, EventBubbles, EventCancelable}; use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::htmlelement::{HTMLElement, HTMLElementTypeId}; -use dom::htmlformelement::FormControl; +use dom::htmlformelement::{FormControl, HTMLFormElement}; use dom::keyboardevent::KeyboardEvent; use dom::node::{ChildrenMutation, Node, NodeDamage}; use dom::node::{NodeTypeId, document_from_node, window_from_node}; @@ -129,6 +129,11 @@ impl HTMLTextAreaElementMethods for HTMLTextAreaElement { // https://www.whatwg.org/html/#dom-fe-disabled make_bool_setter!(SetDisabled, "disabled"); + // https://html.spec.whatwg.org/multipage#dom-fae-form + fn GetForm(&self) -> Option> { + self.form_owner() + } + // https://html.spec.whatwg.org/multipage/#attr-fe-name make_getter!(Name); diff --git a/components/script/dom/webidls/HTMLFieldSetElement.webidl b/components/script/dom/webidls/HTMLFieldSetElement.webidl index eb5f4fcc8407..1c65475a8892 100644 --- a/components/script/dom/webidls/HTMLFieldSetElement.webidl +++ b/components/script/dom/webidls/HTMLFieldSetElement.webidl @@ -6,7 +6,7 @@ // https://www.whatwg.org/html/#htmlfieldsetelement interface HTMLFieldSetElement : HTMLElement { attribute boolean disabled; - //readonly attribute HTMLFormElement? form; + readonly attribute HTMLFormElement? form; // attribute DOMString name; //readonly attribute DOMString type; diff --git a/components/script/dom/webidls/HTMLLabelElement.webidl b/components/script/dom/webidls/HTMLLabelElement.webidl index 6794b4673af3..049ee7524fd3 100644 --- a/components/script/dom/webidls/HTMLLabelElement.webidl +++ b/components/script/dom/webidls/HTMLLabelElement.webidl @@ -5,7 +5,7 @@ // https://www.whatwg.org/html/#htmllabelelement interface HTMLLabelElement : HTMLElement { - //readonly attribute HTMLFormElement? form; + readonly attribute HTMLFormElement? form; // attribute DOMString htmlFor; //readonly attribute HTMLElement? control; }; diff --git a/components/script/dom/webidls/HTMLObjectElement.webidl b/components/script/dom/webidls/HTMLObjectElement.webidl index 13f4a5ee285b..2b4e24e61f3b 100644 --- a/components/script/dom/webidls/HTMLObjectElement.webidl +++ b/components/script/dom/webidls/HTMLObjectElement.webidl @@ -10,7 +10,7 @@ interface HTMLObjectElement : HTMLElement { // attribute boolean typeMustMatch; // attribute DOMString name; // attribute DOMString useMap; - //readonly attribute HTMLFormElement? form; + readonly attribute HTMLFormElement? form; // attribute DOMString width; // attribute DOMString height; //readonly attribute Document? contentDocument; diff --git a/components/script/dom/webidls/HTMLOutputElement.webidl b/components/script/dom/webidls/HTMLOutputElement.webidl index 8fd7acb2d229..d618f92e0a97 100644 --- a/components/script/dom/webidls/HTMLOutputElement.webidl +++ b/components/script/dom/webidls/HTMLOutputElement.webidl @@ -6,7 +6,7 @@ // https://www.whatwg.org/html/#htmloutputelement interface HTMLOutputElement : HTMLElement { //[PutForwards=value] readonly attribute DOMSettableTokenList htmlFor; - //readonly attribute HTMLFormElement? form; + readonly attribute HTMLFormElement? form; // attribute DOMString name; //readonly attribute DOMString type; diff --git a/components/script/dom/webidls/HTMLSelectElement.webidl b/components/script/dom/webidls/HTMLSelectElement.webidl index 276674316df4..f2dd84fed84a 100644 --- a/components/script/dom/webidls/HTMLSelectElement.webidl +++ b/components/script/dom/webidls/HTMLSelectElement.webidl @@ -7,7 +7,7 @@ interface HTMLSelectElement : HTMLElement { // attribute boolean autofocus; attribute boolean disabled; - //readonly attribute HTMLFormElement? form; + readonly attribute HTMLFormElement? form; attribute boolean multiple; attribute DOMString name; // attribute boolean required; diff --git a/components/script/dom/webidls/HTMLTextAreaElement.webidl b/components/script/dom/webidls/HTMLTextAreaElement.webidl index af73dde6a48b..fac589a2e295 100644 --- a/components/script/dom/webidls/HTMLTextAreaElement.webidl +++ b/components/script/dom/webidls/HTMLTextAreaElement.webidl @@ -11,7 +11,7 @@ interface HTMLTextAreaElement : HTMLElement { attribute unsigned long cols; // attribute DOMString dirName; attribute boolean disabled; - //readonly attribute HTMLFormElement? form; + readonly attribute HTMLFormElement? form; // attribute DOMString inputMode; // attribute long maxLength; // attribute long minLength; diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index 22905a216304..5e25f8e91290 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -2730,9 +2730,6 @@ [HTMLObjectElement interface: attribute useMap] expected: FAIL - [HTMLObjectElement interface: attribute form] - expected: FAIL - [HTMLObjectElement interface: attribute width] expected: FAIL @@ -5031,18 +5028,12 @@ [HTMLLabelElement interface: existence and properties of interface object] expected: FAIL - [HTMLLabelElement interface: attribute form] - expected: FAIL - [HTMLLabelElement interface: attribute htmlFor] expected: FAIL [HTMLLabelElement interface: attribute control] expected: FAIL - [HTMLLabelElement interface: document.createElement("label") must inherit property "form" with the proper type (0)] - expected: FAIL - [HTMLLabelElement interface: document.createElement("label") must inherit property "htmlFor" with the proper type (1)] expected: FAIL @@ -5391,9 +5382,6 @@ [HTMLSelectElement interface: attribute autofocus] expected: FAIL - [HTMLSelectElement interface: attribute form] - expected: FAIL - [HTMLSelectElement interface: attribute required] expected: FAIL @@ -5448,9 +5436,6 @@ [HTMLSelectElement interface: document.createElement("select") must inherit property "autofocus" with the proper type (1)] expected: FAIL - [HTMLSelectElement interface: document.createElement("select") must inherit property "form" with the proper type (3)] - expected: FAIL - [HTMLSelectElement interface: document.createElement("select") must inherit property "required" with the proper type (6)] expected: FAIL @@ -5553,9 +5538,6 @@ [HTMLTextAreaElement interface: attribute dirName] expected: FAIL - [HTMLTextAreaElement interface: attribute form] - expected: FAIL - [HTMLTextAreaElement interface: attribute inputMode] expected: FAIL @@ -5619,9 +5601,6 @@ [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "dirName" with the proper type (3)] expected: FAIL - [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "form" with the proper type (5)] - expected: FAIL - [HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "inputMode" with the proper type (6)] expected: FAIL @@ -5799,9 +5778,6 @@ [HTMLOutputElement interface: attribute htmlFor] expected: FAIL - [HTMLOutputElement interface: attribute form] - expected: FAIL - [HTMLOutputElement interface: attribute name] expected: FAIL @@ -5835,9 +5811,6 @@ [HTMLOutputElement interface: document.createElement("output") must inherit property "htmlFor" with the proper type (0)] expected: FAIL - [HTMLOutputElement interface: document.createElement("output") must inherit property "form" with the proper type (1)] - expected: FAIL - [HTMLOutputElement interface: document.createElement("output") must inherit property "name" with the proper type (2)] expected: FAIL @@ -5946,9 +5919,6 @@ [HTMLFieldSetElement interface: existence and properties of interface object] expected: FAIL - [HTMLFieldSetElement interface: attribute form] - expected: FAIL - [HTMLFieldSetElement interface: attribute name] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/form-control-infrastructure/form.html.ini b/tests/wpt/metadata/html/semantics/forms/form-control-infrastructure/form.html.ini index 3a4b9321f4ca..fc4b144051ed 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-control-infrastructure/form.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-control-infrastructure/form.html.ini @@ -1,23 +1,5 @@ [form.html] type: testharness - [fieldset.form] - expected: FAIL - [keygen.form] expected: FAIL - [label.form] - expected: FAIL - - [object.form] - expected: FAIL - - [output.form] - expected: FAIL - - [select.form] - expected: FAIL - - [textarea.form] - expected: FAIL -