diff options
author | teapotd <teapot404@gmail.com> | 2019-12-26 17:53:18 +0100 |
---|---|---|
committer | teapotd <teapot404@gmail.com> | 2019-12-26 17:53:18 +0100 |
commit | 386dc9fd75688b4e660e4b22ba0d1ee957533451 (patch) | |
tree | bfd11e69399400e14e63e90706b6e6cc6742a0ed | |
parent | 8002c6bc53041c55dc1148fed008b9a229df0e9b (diff) | |
download | servo-386dc9fd75688b4e660e4b22ba0d1ee957533451.tar.gz servo-386dc9fd75688b4e660e4b22ba0d1ee957533451.zip |
Implement HTMLInputElement cloning steps
3 files changed, 21 insertions, 71 deletions
diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs index 9018f05813a..e08bf813e91 100755 --- a/components/script/dom/htmlinputelement.rs +++ b/components/script/dom/htmlinputelement.rs @@ -35,7 +35,7 @@ use crate::dom::htmlformelement::{ResetFrom, SubmittedFrom}; use crate::dom::keyboardevent::KeyboardEvent; use crate::dom::mouseevent::MouseEvent; use crate::dom::node::{document_from_node, window_from_node}; -use crate::dom::node::{BindContext, Node, NodeDamage, UnbindContext}; +use crate::dom::node::{BindContext, CloneChildrenFlag, Node, NodeDamage, UnbindContext}; use crate::dom::nodelist::NodeList; use crate::dom::textcontrol::{TextControlElement, TextControlSelection}; use crate::dom::validation::Validatable; @@ -1659,6 +1659,26 @@ impl VirtualMethods for HTMLInputElement { } } } + + // https://html.spec.whatwg.org/multipage/#the-input-element%3Aconcept-node-clone-ext + fn cloning_steps( + &self, + copy: &Node, + maybe_doc: Option<&Document>, + clone_children: CloneChildrenFlag, + ) { + if let Some(ref s) = self.super_type() { + s.cloning_steps(copy, maybe_doc, clone_children); + } + let elem = copy.downcast::<HTMLInputElement>().unwrap(); + elem.value_dirty.set(self.value_dirty.get()); + elem.checked_changed.set(self.checked_changed.get()); + elem.upcast::<Element>() + .set_state(ElementState::IN_CHECKED_STATE, self.Checked()); + elem.textinput + .borrow_mut() + .set_content(self.textinput.borrow().get_content()); + } } impl FormControl for HTMLInputElement { diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/clone.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/clone.html.ini deleted file mode 100644 index 04df058a43f..00000000000 --- a/tests/wpt/metadata/html/semantics/forms/the-input-element/clone.html.ini +++ /dev/null @@ -1,56 +0,0 @@ -[clone.html] - type: testharness - [Checkbox must retain checked state.] - expected: FAIL - - [Checkbox must retain unchecked state.] - expected: FAIL - - [Radiobutton must retain checked state.] - expected: FAIL - - [Radiobutton must retain unchecked state.] - expected: FAIL - - [Text field must retain changed value.] - expected: FAIL - - [Search field must retain changed value.] - expected: FAIL - - [Phone number field must retain changed value.] - expected: FAIL - - [URL field must retain changed value.] - expected: FAIL - - [Email field must retain changed value.] - expected: FAIL - - [Password field must retain changed value.] - expected: FAIL - - [Date field must retain changed value.] - expected: FAIL - - [Month field must retain changed value.] - expected: FAIL - - [Week field must retain changed value.] - expected: FAIL - - [Time field must retain changed value.] - expected: FAIL - - [Datetime (local) field must retain changed value.] - expected: FAIL - - [Number field must retain changed value.] - expected: FAIL - - [Range control must retain changed value.] - expected: FAIL - - [Color picker must retain changed value.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/cloning-steps.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/cloning-steps.html.ini deleted file mode 100644 index c3cb6115f85..00000000000 --- a/tests/wpt/metadata/html/semantics/forms/the-input-element/cloning-steps.html.ini +++ /dev/null @@ -1,14 +0,0 @@ -[cloning-steps.html] - type: testharness - [input element's value should be cloned] - expected: FAIL - - [input element's dirty value flag should be cloned, so setAttribute doesn't affect the cloned input's value] - expected: FAIL - - [input element's checkedness should be cloned] - expected: FAIL - - [input element's dirty checkedness should be cloned, so setAttribute doesn't affect the cloned input's checkedness] - expected: FAIL - |