aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/node.rs
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2020-06-09 11:39:43 +0200
committerMartin Robinson <mrobinson@igalia.com>2020-06-17 16:35:06 +0200
commite901fa2c39bc930201f5e251bb65e276a846634c (patch)
tree541e31dd3616ba4cc65c8a903fb1f2aade4550d0 /components/script/dom/node.rs
parent6d9b2eef296fe3281fc098a5ea238c8053c3f893 (diff)
downloadservo-e901fa2c39bc930201f5e251bb65e276a846634c.tar.gz
servo-e901fa2c39bc930201f5e251bb65e276a846634c.zip
Cancel animations for nodes which are removed from the DOM
This includes nodes which are being reparented.
Diffstat (limited to 'components/script/dom/node.rs')
-rw-r--r--components/script/dom/node.rs7
1 files changed, 7 insertions, 0 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index f17c22163d0..9bfe91e3470 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -281,6 +281,11 @@ impl Node {
}
}
+ pub fn clean_up_layout_data(&self) {
+ self.owner_doc().cancel_animations_for_node(self);
+ self.style_and_layout_data.borrow_mut().take();
+ }
+
/// Clean up flags and unbind from tree.
pub fn complete_remove_subtree(root: &Node, context: &UnbindContext) {
for node in root.traverse_preorder(ShadowIncluding::Yes) {
@@ -295,6 +300,8 @@ impl Node {
);
}
for node in root.traverse_preorder(ShadowIncluding::Yes) {
+ node.clean_up_layout_data();
+
// This needs to be in its own loop, because unbind_from_tree may
// rely on the state of IS_IN_DOC of the context node's descendants,
// e.g. when removing a <form>.