aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/htmlscriptelement.rs18
-rw-r--r--components/script/dom/node.rs1
-rw-r--r--components/script/dom/virtualmethods.rs12
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