tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit ababa10142dd378f78d57101dad3c6831af3e12a
parent a4fdae530429edd5c44cdd36e99499c5b39e384b
Author: David Shin <dshin@mozilla.com>
Date:   Mon,  3 Nov 2025 20:39:09 +0000

Bug 1997992: Hook up scope end dependency as next of its scope start dependency. r=diegociudadreale,firefox-style-system-reviewers,emilio

Differential Revision: https://phabricator.services.mozilla.com/D271120

Diffstat:
Mservo/components/style/stylist.rs | 86+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Dtesting/web-platform/meta/css/css-cascade/scope-invalidation.html.ini | 3---
2 files changed, 45 insertions(+), 44 deletions(-)

diff --git a/servo/components/style/stylist.rs b/servo/components/style/stylist.rs @@ -4481,7 +4481,7 @@ impl CascadeData { fn note_scope_selector_for_invalidation( quirks_mode: QuirksMode, - scope_dependencies: &Option<Arc<servo_arc::HeaderSlice<(), Dependency>>>, + scope_dependencies: &Arc<servo_arc::HeaderSlice<(), Dependency>>, dependency_vector: &mut Vec<Dependency>, invalidation_map: &mut InvalidationMap, relative_selector_invalidation_map: &mut InvalidationMap, @@ -4496,7 +4496,7 @@ fn note_scope_selector_for_invalidation( invalidation_map, relative_selector_invalidation_map, additional_relative_selector_invalidation_map, - scope_dependencies.as_ref(), + Some(&scope_dependencies), Some(scope_kind), )?; s.visit(visitor); @@ -4508,55 +4508,59 @@ fn note_scope_selector_for_invalidation( fn build_scope_dependencies( quirks_mode: QuirksMode, - cur_scope_inner_dependencies: Vec<Dependency>, + mut cur_scope_inner_dependencies: Vec<Dependency>, mut visitor: StylistSelectorVisitor<'_>, cond: &ScopeBoundsWithHashes, mut invalidation_map: &mut InvalidationMap, mut relative_selector_invalidation_map: &mut InvalidationMap, mut additional_relative_selector_invalidation_map: &mut AdditionalRelativeSelectorInvalidationMap, ) -> Result<Vec<Dependency>, AllocErr> { - let mut dependency_vector = Vec::new(); - let inner_scope_dependencies = Some(ThinArc::from_header_and_iter( - (), - cur_scope_inner_dependencies.into_iter(), - )); - - for s in cond.start_selectors() { - note_scope_selector_for_invalidation( - quirks_mode, - &inner_scope_dependencies, - &mut dependency_vector, - &mut invalidation_map, - &mut relative_selector_invalidation_map, - &mut additional_relative_selector_invalidation_map, - &mut visitor, - ScopeDependencyInvalidationKind::ExplicitScope, - s, - )?; - } - for s in cond.end_selectors() { - note_scope_selector_for_invalidation( - quirks_mode, - &inner_scope_dependencies, - &mut dependency_vector, - &mut invalidation_map, - &mut relative_selector_invalidation_map, - &mut additional_relative_selector_invalidation_map, - &mut visitor, - ScopeDependencyInvalidationKind::ScopeEnd, - s, - )?; + if cond.end.is_some() { + let deps = + ThinArc::from_header_and_iter((), cur_scope_inner_dependencies.clone().into_iter()); + let mut end_dependency_vector = Vec::new(); + for s in cond.end_selectors() { + note_scope_selector_for_invalidation( + quirks_mode, + &deps, + &mut end_dependency_vector, + &mut invalidation_map, + &mut relative_selector_invalidation_map, + &mut additional_relative_selector_invalidation_map, + &mut visitor, + ScopeDependencyInvalidationKind::ScopeEnd, + s, + )?; + } + cur_scope_inner_dependencies.append(&mut end_dependency_vector); } - if cond.start.is_none() { - dependency_vector.push(Dependency::new( + let inner_scope_dependencies = + ThinArc::from_header_and_iter((), cur_scope_inner_dependencies.into_iter()); + + Ok(if cond.start.is_some() { + let mut dependency_vector = Vec::new(); + for s in cond.start_selectors() { + note_scope_selector_for_invalidation( + quirks_mode, + &inner_scope_dependencies, + &mut dependency_vector, + &mut invalidation_map, + &mut relative_selector_invalidation_map, + &mut additional_relative_selector_invalidation_map, + &mut visitor, + ScopeDependencyInvalidationKind::ExplicitScope, + s, + )?; + } + dependency_vector + } else { + vec![Dependency::new( IMPLICIT_SCOPE.slice()[0].clone(), 0, - inner_scope_dependencies, + Some(inner_scope_dependencies), DependencyInvalidationKind::Scope(ScopeDependencyInvalidationKind::ImplicitScope), - )); - } - - Ok(dependency_vector) + )] + }) } impl CascadeDataCacheEntry for CascadeData { diff --git a/testing/web-platform/meta/css/css-cascade/scope-invalidation.html.ini b/testing/web-platform/meta/css/css-cascade/scope-invalidation.html.ini @@ -1,3 +0,0 @@ -[scope-invalidation.html] - [:not(scope) in limit ancestor] - expected: FAIL