Cancel animations for nodes which are removed from the DOM

This includes nodes which are being reparented.
This commit is contained in:
Martin Robinson 2020-06-09 11:39:43 +02:00
parent 6d9b2eef29
commit e901fa2c39
8 changed files with 32 additions and 31 deletions

View file

@ -3855,6 +3855,10 @@ impl Document {
.borrow()
.do_post_reflow_update(&self.window, self.current_animation_timeline_value());
}
pub(crate) fn cancel_animations_for_node(&self, node: &Node) {
self.animations.borrow().cancel_animations_for_node(node);
}
}
impl Element {

View file

@ -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>.