github web-platform-tests/wpt merge_pr_47359

latest releases: merge_pr_49470, epochs/three_hourly/2024-12-03_06H, epochs/six_hourly/2024-12-03_06H...
13 months ago

Fix ':has()' matching and invalidation error with nesting parent

  1. Fix incorrect cache hit for ':has()' selector matching:

In case of having multiple style rules with same ':has()' selector
expression but different nesting parent, the ':has()' selector
matching cache (CheckPseudoCacheScope) returned incorrect cache hit
result because it used ':has()' argument selector text as the cache
key for the ':has()' match result.
To fix this bug, this CL added a 'CSSSelector' method that returns
selector text with replacing pseudo parent expressions ('&') with
equivalent pseudo ':is' expression (':is()'), and let
the cache uses the replaced selector string as its cache key.

  1. Fix ':has()' invalidation error with complex nesting parent:

To build invalidation set for a ':has()' that contains a logical
combinations containing a complex selector, 'RuleFeatureSet' checks
a flag in the ':has()' selector:

  • ContainsComplexLogicalCombinationsInsideHasPseudoClass
    'CSSSelectorParser' need to set the flag while parsing ':has()'
    argument selector, but the flag was not set in case that the ':has()'
    contains complex nesting parent.
    This CL sets the flag when a ':has()' contains nesting parent selector
    so that 'RuleFeatureSet' successfully build invalidation sets for the
    complex nesting parent inside ':has()'.

Low-Coverage-Reason: COVERAGE_UNDERREPORTED - The unit tests and wpt tests in this CL cover the changes, and most of the lines detected in css_selector.cc are existing code that are not directly related to this change and should have been tested previously.

Bug: 350946979
Change-Id: Ie3b457df2ac66e0e5884beb0e29f3877b436e2a3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5680906
Reviewed-by: Anders Hartvoll Ruud andruud@chromium.org
Commit-Queue: Byungwoo Lee blee@igalia.com
Cr-Commit-Position: refs/heads/main@{#1335644}

Don't miss a new wpt release

NewReleases is sending notifications on new releases.