commit | 5ca48280fecfc142464ecad875a7e78a34ff6094 | [log] [tgz] |
---|---|---|
author | Byungwoo Lee <blee@igalia.com> | Wed Jul 31 20:03:36 2024 |
committer | Chromium LUCI CQ <chromium-scoped@luci-project-accounts.iam.gserviceaccount.com> | Wed Jul 31 20:03:36 2024 |
tree | 564acbb0120ce194526dfe15a5d2a0b9da5cc7cb | |
parent | 2b8e2dec901996a6f66c1da1b62bfe16768cc5d8 [diff] |
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 <andruud@chromium.org> Commit-Queue: Byungwoo Lee <blee@igalia.com> Cr-Commit-Position: refs/heads/main@{#1335644}
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.
The project's web site is https://www.chromium.org.
To check out the source code locally, don't use git clone
! Instead, follow the instructions on how to get the code.
Documentation in the source is rooted in docs/README.md.
Learn how to Get Around the Chromium Source Code Directory Structure.
For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.
If you found a bug, please file it at https://crbug.com/new.