aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/htmlfieldsetelement.rs14
-rw-r--r--components/script/dom/htmllabelelement.rs18
-rw-r--r--components/script/dom/htmlobjectelement.rs14
-rw-r--r--components/script/dom/htmloutputelement.rs15
-rw-r--r--components/script/dom/htmlselectelement.rs16
-rw-r--r--components/script/dom/htmltextareaelement.rs7
-rw-r--r--components/script/dom/webidls/HTMLFieldSetElement.webidl2
-rw-r--r--components/script/dom/webidls/HTMLLabelElement.webidl2
-rw-r--r--components/script/dom/webidls/HTMLObjectElement.webidl2
-rw-r--r--components/script/dom/webidls/HTMLOutputElement.webidl2
-rw-r--r--components/script/dom/webidls/HTMLSelectElement.webidl2
-rw-r--r--components/script/dom/webidls/HTMLTextAreaElement.webidl2
-rw-r--r--tests/wpt/metadata/html/dom/interfaces.html.ini30
-rw-r--r--tests/wpt/metadata/html/semantics/forms/form-control-infrastructure/form.html.ini18
14 files changed, 83 insertions, 61 deletions
diff --git a/components/script/dom/htmlfieldsetelement.rs b/components/script/dom/htmlfieldsetelement.rs
index deea3fa75d2..a38c6e9a7b2 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<Root<HTMLFormElement>> {
+ 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 5e7da7dfbff..ec3f1fa7865 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<Root<HTMLFormElement>> {
+ 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 ac063d12f00..e197f1d60c4 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<Root<HTMLFormElement>> {
+ 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 0b69f99ce0a..781ba2f9e83 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<Root<HTMLFormElement>> {
+ 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 6245b25daa3..48aea7422ee 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<Root<HTMLFormElement>> {
+ 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 f6739975402..9c20b4ad2b2 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<Root<HTMLFormElement>> {
+ 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 eb5f4fcc840..1c65475a889 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 6794b4673af..049ee7524fd 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 13f4a5ee285..2b4e24e61f3 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 8fd7acb2d22..d618f92e0a9 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 276674316df..f2dd84fed84 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 af73dde6a48..fac589a2e29 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 22905a21630..5e25f8e9129 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 3a4b9321f4c..fc4b144051e 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
-