From 5fa9a5624798139f789b88cefeb5c4b0f7afb7d9 Mon Sep 17 00:00:00 2001 From: Cameron McCormack Date: Tue, 4 Apr 2017 19:22:42 +0800 Subject: [PATCH] style: Don't traverse children if the root of the restyle is display:none. If we append a child to a display:none element, and we use StyleNewChildren on that parent, we should skip restyling the children. --- components/style/traversal.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/components/style/traversal.rs b/components/style/traversal.rs index 37e52eafb8f..16505e71b2e 100644 --- a/components/style/traversal.rs +++ b/components/style/traversal.rs @@ -149,6 +149,12 @@ pub trait DomTraversal : Sync { -> PreTraverseToken { if traversal_flags.for_unstyled_children_only() { + if root.borrow_data().map_or(true, |d| d.has_styles() && d.styles().is_display_none()) { + return PreTraverseToken { + traverse: false, + unstyled_children_only: false, + }; + } return PreTraverseToken { traverse: true, unstyled_children_only: true,