aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/node.rs23
-rw-r--r--components/script/dom/virtualmethods.rs9
2 files changed, 17 insertions, 15 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index f46cbc0be11..b0c8d79228e 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -1415,24 +1415,19 @@ impl Node {
// https://dom.spec.whatwg.org/#concept-node-adopt
pub fn adopt(node: &Node, document: &Document) {
// Step 1.
- let parent_node = node.GetParentNode();
- match parent_node {
- Some(ref parent) => {
- Node::remove(node, parent, SuppressObserver::Unsuppressed);
- }
- None => (),
- }
-
+ let old_doc = node.owner_doc();
// Step 2.
- let node_doc = document_from_node(node);
- if node_doc.r() != document {
+ node.remove_self();
+ if &*old_doc != document {
+ // Step 3.
for descendant in node.traverse_preorder() {
- descendant.r().set_owner_doc(document);
+ descendant.set_owner_doc(document);
+ }
+ // Step 4.
+ for descendant in node.traverse_preorder() {
+ vtable_for(&descendant).adopting_steps(&old_doc);
}
}
-
- // Step 3.
- // If node is an element, it is _affected by a base URL change_.
}
// https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity
diff --git a/components/script/dom/virtualmethods.rs b/components/script/dom/virtualmethods.rs
index 6812703ffe6..7afb3be4624 100644
--- a/components/script/dom/virtualmethods.rs
+++ b/components/script/dom/virtualmethods.rs
@@ -98,7 +98,14 @@ pub trait VirtualMethods {
}
}
- /// https://dom.spec.whatwg.org/#concept-node-clone (step 5)
+ /// https://dom.spec.whatwg.org/#concept-node-adopt-ext
+ fn adopting_steps(&self, old_doc: &Document) {
+ if let Some(ref s) = self.super_type() {
+ s.adopting_steps(old_doc);
+ }
+ }
+
+ /// https://dom.spec.whatwg.org/#concept-node-clone-ext
fn cloning_steps(&self, copy: &Node, maybe_doc: Option<&Document>,
clone_children: CloneChildrenFlag) {
if let Some(ref s) = self.super_type() {