diff options
-rw-r--r-- | components/script/dom/htmlscriptelement.rs | 18 | ||||
-rw-r--r-- | components/script/dom/node.rs | 1 | ||||
-rw-r--r-- | components/script/dom/virtualmethods.rs | 12 |
3 files changed, 28 insertions, 3 deletions
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index 19731e3932f..d3130e95827 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -8,7 +8,7 @@ use dom::bindings::codegen::Bindings::AttrBinding::AttrMethods; use dom::bindings::codegen::Bindings::HTMLScriptElementBinding; use dom::bindings::codegen::Bindings::HTMLScriptElementBinding::HTMLScriptElementMethods; use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; -use dom::bindings::codegen::InheritTypes::HTMLScriptElementDerived; +use dom::bindings::codegen::InheritTypes::{HTMLScriptElementDerived, HTMLScriptElementCast}; use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast}; use dom::bindings::js::{JSRef, Temporary, OptionalRootable}; use dom::bindings::utils::{Reflectable, Reflector}; @@ -16,7 +16,7 @@ use dom::document::Document; use dom::element::{HTMLScriptElementTypeId, Element, AttributeHandlers}; use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; -use dom::node::{Node, NodeHelpers, ElementNodeTypeId, window_from_node}; +use dom::node::{Node, NodeHelpers, ElementNodeTypeId, window_from_node, CloneChildrenFlag}; use dom::virtualmethods::VirtualMethods; use dom::window::WindowHelpers; @@ -283,6 +283,20 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLScriptElement> { self.prepare(); } } + + fn cloning_steps(&self, copy: JSRef<Node>, maybe_doc: Option<JSRef<Document>>, + clone_children: CloneChildrenFlag) { + match self.super_type() { + Some(ref s) => s.cloning_steps(copy, maybe_doc, clone_children), + _ => (), + } + + // https://whatwg.org/html/#already-started + if self.already_started.get() { + let copy_elem: JSRef<HTMLScriptElement> = HTMLScriptElementCast::to_ref(copy).unwrap(); + copy_elem.mark_already_started(); + } + } } impl<'a> HTMLScriptElementMethods for JSRef<'a, HTMLScriptElement> { diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 38884630e3b..4b4a574a07a 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -1572,6 +1572,7 @@ impl Node { } // Step 5: cloning steps. + vtable_for(&node).cloning_steps(*copy, maybe_doc, clone_children); // Step 6. if clone_children == CloneChildren { diff --git a/components/script/dom/virtualmethods.rs b/components/script/dom/virtualmethods.rs index e5f20f99f06..0b23ffc37ea 100644 --- a/components/script/dom/virtualmethods.rs +++ b/components/script/dom/virtualmethods.rs @@ -24,6 +24,7 @@ use dom::bindings::codegen::InheritTypes::HTMLStyleElementCast; use dom::bindings::codegen::InheritTypes::HTMLTableCellElementCast; use dom::bindings::codegen::InheritTypes::HTMLTextAreaElementCast; use dom::bindings::js::JSRef; +use dom::document::Document; use dom::element::Element; use dom::element::ElementTypeId_; use dom::element::HTMLAnchorElementTypeId; @@ -63,7 +64,7 @@ use dom::htmlselectelement::HTMLSelectElement; use dom::htmlstyleelement::HTMLStyleElement; use dom::htmltablecellelement::HTMLTableCellElement; use dom::htmltextareaelement::HTMLTextAreaElement; -use dom::node::{Node, NodeHelpers, ElementNodeTypeId}; +use dom::node::{Node, NodeHelpers, ElementNodeTypeId, CloneChildrenFlag}; use servo_util::str::DOMString; @@ -136,6 +137,15 @@ pub trait VirtualMethods { _ => (), } } + + /// https://dom.spec.whatwg.org/#concept-node-clone (step 5) + fn cloning_steps(&self, copy: JSRef<Node>, maybe_doc: Option<JSRef<Document>>, + clone_children: CloneChildrenFlag) { + match self.super_type() { + Some(ref s) => s.cloning_steps(copy, maybe_doc, clone_children), + _ => (), + } + } } /// Obtain a VirtualMethods instance for a given Node-derived object. Any |