Don't let :not(<feature>) match host elements For featureless elements such as shadow hosts, matching selectors from the shadow tree scope, only a limited set of selectors are allowed to match. Also, :not() is not allowed to match if the selector inside :not() contains simple selectors for features which are not exposed from featureless elements. The latter did not work correctly in Blink. To support that, we need to keep track of such features inside :not(), :is(), etc. This CL introduces a separate code path for matching selectors on hosts, which uses kSelectorFailsCompletely to track features which should never match. style_perf numbers: Initial style (µs) Before After Perf 95% CI (BCa) =================== ========= ========= ======= ================= ECommerce 13753 13858 -0.8% [ -1.5%, -0.2%] Encyclopedia 125730 126230 -0.4% [ -1.0%, +0.3%] Extension 142066 143072 -0.7% [ -1.0%, -0.4%] News 52917 52937 -0.0% [ -0.7%, +0.6%] Search 17451 17525 -0.4% [ -1.0%, +0.0%] Social1 31689 31777 -0.3% [ -1.7%, +0.4%] Social2 20578 20630 -0.2% [ -0.6%, +0.2%] Sports 75059 74622 +0.6% [ -0.5%, +1.9%] Video 43845 43963 -0.3% [ -0.9%, +0.5%] Geometric mean -0.3% [ -0.6%, +0.0%] Parse (µs) Before After Perf 95% CI (BCa) =================== ========= ========= ======= ================= ECommerce 2270 2272 -0.1% [ -1.8%, +1.3%] Encyclopedia 13085 13073 +0.1% [ -0.4%, +0.6%] Extension 2288 2312 -1.0% [ -2.2%, +0.5%] News 13900 13905 -0.0% [ -0.5%, +0.4%] Search 8543 8612 -0.8% [ -2.5%, +0.1%] Social1 25312 25488 -0.7% [ -3.1%, +0.1%] Social2 1016 1032 -1.6% [ -3.4%, -0.0%] Sports 94789 95190 -0.4% [ -1.0%, -0.1%] Video 55723 56098 -0.7% [ -2.0%, +0.5%] Geometric mean -0.6% [ -1.0%, -0.2%] Recalc style (µs) Before After Perf 95% CI (BCa) =================== ========= ========= ======= ================= ECommerce 7481 7408 +1.0% [ -1.0%, +6.2%] Encyclopedia 104240 104587 -0.3% [ -0.8%, +0.0%] Extension 108181 109160 -0.9% [ -1.2%, -0.5%] News 28254 28184 +0.2% [ -0.8%, +3.4%] Search 7030 7095 -0.9% [ -1.9%, +0.1%] Social1 15966 15926 +0.3% [ -0.4%, +1.3%] Social2 10399 10440 -0.4% [ -0.8%, -0.0%] Sports 42798 42744 +0.1% [ -0.5%, +0.7%] Video 20571 20398 +0.9% [ -0.1%, +3.1%] Geometric mean -0.0% [ -0.4%, +0.5%] Bug: 378966977 Change-Id: Id7d29c4e72275149e541f49b98eb6b8c328e6461 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6624272 Reviewed-by: Steinar H Gunderson <sesse@chromium.org> Commit-Queue: Rune Lillesveen <futhark@chromium.org> Cr-Commit-Position: refs/heads/main@{#1470493}
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.