diff --git a/components/style/invalidation/stylesheets.rs b/components/style/invalidation/stylesheets.rs index c1014d0383b..4ac69f8fa02 100644 --- a/components/style/invalidation/stylesheets.rs +++ b/components/style/invalidation/stylesheets.rs @@ -116,12 +116,37 @@ impl StylesheetInvalidationSet { where E: TElement, { if let Some(e) = document_element { - self.process_invalidations_in_subtree(e); + self.process_invalidations(e); } self.invalid_scopes.clear(); self.fully_invalid = false; } + fn process_invalidations(&self, element: E) -> bool + where E: TElement, + { + { + let mut data = match element.mutate_data() { + Some(data) => data, + None => return false, + }; + + if self.fully_invalid { + debug!("process_invalidations: fully_invalid({:?})", + element); + data.ensure_restyle().hint.insert(StoredRestyleHint::subtree()); + return true; + } + } + + if self.invalid_scopes.is_empty() { + debug!("process_invalidations: empty invalidation set"); + return false; + } + + self.process_invalidations_in_subtree(element) + } + /// Process style invalidations in a given subtree, that is, look for all /// the relevant scopes in the subtree, and mark as dirty only the relevant /// ones. @@ -148,18 +173,6 @@ impl StylesheetInvalidationSet { } } - if self.fully_invalid { - debug!("process_invalidations_in_subtree: fully_invalid({:?})", - element); - data.ensure_restyle().hint.insert(StoredRestyleHint::subtree()); - return true; - } - - if self.invalid_scopes.is_empty() { - debug!("process_invalidations_in_subtree: empty invalidation set"); - return false; - } - for scope in &self.invalid_scopes { if scope.matches(element) { debug!("process_invalidations_in_subtree: {:?} matched {:?}",