From dfa715a8d8b89f4e5768f30f2de892d320cb1bbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Mon, 10 Aug 2020 18:00:29 +0000 Subject: [PATCH] style: Fix a silly mistake in which we'd prefer a local name / tag invalidation to an id invalidation. ID invalidations should always win. This also prefers invalidations deeper in the subtree to higher up. Differential Revision: https://phabricator.services.mozilla.com/D85615 --- components/style/invalidation/stylesheets.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/components/style/invalidation/stylesheets.rs b/components/style/invalidation/stylesheets.rs index 4b37133a282..18d24a28a78 100644 --- a/components/style/invalidation/stylesheets.rs +++ b/components/style/invalidation/stylesheets.rs @@ -340,6 +340,8 @@ impl StylesheetInvalidationSet { data.hint.contains(RestyleHint::RESTYLE_SELF) || any_children_invalid } + /// TODO(emilio): Reuse the bucket stuff from selectormap? That handles + /// :is() / :where() etc. fn scan_component( component: &Component, invalidation: &mut Option, @@ -349,7 +351,7 @@ impl StylesheetInvalidationSet { ref name, ref lower_name, }) => { - if invalidation.as_ref().map_or(true, |s| !s.is_id_or_class()) { + if invalidation.is_none() { *invalidation = Some(Invalidation::LocalName { name: name.clone(), lower_name: lower_name.clone(), @@ -357,12 +359,12 @@ impl StylesheetInvalidationSet { } }, Component::Class(ref class) => { - if invalidation.as_ref().map_or(true, |s| !s.is_id()) { + if invalidation.as_ref().map_or(true, |s| !s.is_id_or_class()) { *invalidation = Some(Invalidation::Class(class.clone())); } }, Component::ID(ref id) => { - if invalidation.is_none() { + if invalidation.as_ref().map_or(true, |s| !s.is_id()) { *invalidation = Some(Invalidation::ID(id.clone())); } },