commit | 717ec880aa07359ab3c0dde2ca5e1493ea7ec796 | [log] [tgz] |
---|---|---|
author | Daniil Sakhapov <sakhapov@chromium.org> | Fri Oct 25 13:54:00 2024 |
committer | Chromium LUCI CQ <chromium-scoped@luci-project-accounts.iam.gserviceaccount.com> | Fri Oct 25 13:54:00 2024 |
tree | b935544f115d13bee160dd90d531b31a1f5731a4 | |
parent | b8c4aaafef7f1a5b94cbd5b498288c64cf3e0597 [diff] |
Support nested pseudo elements styling Currently, styling for pseudo elements is done in a way that we have an originating element as a "base for matching" and pseudo id to tell which pseudo element we want to collect rules for. But for nested pseudo elements we can't do it in such way, since we need to have originating pseudo element as a "base for matching". So, this CL adds functionality for pseudo elements to be a "base for matching", by introducing a vector of ancestor pseudo elements to match nested pseudo elements against. Example: The rule is div::column::scroll-marker and we match: a) for div, then we won't match this rule as we can't reach the end of the selector; b) for column, the vector would be just [column], so we start with matching div against originating element (which is div), then move to ::column part and match against column (from vector), then we see ::scroll-marker, so we set ::scroll-marker pseudo style on column. c) for scroll marker, the vector would be [column, scroll marker], so we go div -> column -> scroll marker. d) note, that for div::before::scroll-marker we would fail matching at column (from vector) against ::before (from the selector), and the same would happen if we have scroll marker inside before inside div, but the rule would be div::column::scroll-marker. Also, it changes other places that were only expecting regular element before this CL to correctly work with a new resolve schema. The non-existent pseudo elements are still matched with originating element + pseudo id way, as there is no PseudoElement to match against. This CL also allows to create infinite ::before::before... on the style resolver part, but it's currently blocked on the parsing site. The test is removed from selector_checker_test as now it's fully covered by WPT tests. Also note that after this CL authors can now style nested markers. Change-Id: If21a2a4158ebb7a63cebab8a33e5c63f0cd38323 Bug: 373478544 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5891553 Reviewed-by: Rune Lillesveen <futhark@chromium.org> Commit-Queue: Daniil Sakhapov <sakhapov@chromium.org> Cr-Commit-Position: refs/heads/main@{#1373874}
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.