Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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(<nesting parent>)'), and let the cache uses the replaced selector string as its cache key. 2. 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 <[email protected]> Commit-Queue: Byungwoo Lee <[email protected]> Cr-Commit-Position: refs/heads/main@{#1335644}
- Loading branch information