layout: Add initial support for the ::marker pseudo-element (#36317)

This change adds support for the `::marker` pseudo-element and ensure
that
markers are cached into the box tree. This is only initial support,
there are a few
things missing such as animations, transitions, and support the
`content` CSS
property.

Testing: There are WPT tests for this change.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
Martin Robinson 2025-04-07 19:49:05 +02:00 committed by GitHub
parent a5c547259f
commit 2b63e60e8f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
27 changed files with 282 additions and 276 deletions

View file

@ -0,0 +1,2 @@
[marker-animate-002.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[marker-color.html]
expected: FAIL

View file

@ -1,30 +0,0 @@
[marker-computed-content.html]
[Computed 'content' for list-item ::marker, variant string]
expected: FAIL
[Computed 'content' for list-item ::marker, variant image]
expected: FAIL
[Computed 'content' for list-item ::marker, variant none]
expected: FAIL
[Computed 'content' for non-list-item ::marker, variant string]
expected: FAIL
[Computed 'content' for non-list-item ::marker, variant image]
expected: FAIL
[Computed 'content' for non-list-item ::marker, variant none]
expected: FAIL
[Computed 'content' for list-item ::marker, variant default]
expected: FAIL
[Computed 'content' for list-item ::marker, variant normal]
expected: FAIL
[Computed 'content' for non-list-item ::marker, variant default]
expected: FAIL
[Computed 'content' for non-list-item ::marker, variant normal]
expected: FAIL

View file

@ -8,9 +8,6 @@
[String ::marker]
expected: FAIL
[::marker with no box due to 'list-style']
expected: FAIL
[::marker with custom string contents]
expected: FAIL
@ -19,6 +16,3 @@
[::marker with custom string and image contents]
expected: FAIL
[::marker with no box due to 'content']
expected: FAIL

View file

@ -2,95 +2,47 @@
[Computed value of 'font-variant-numeric' for outside symbol]
expected: FAIL
[Computed value of 'text-transform' for outside symbol]
expected: FAIL
[Computed value of 'text-indent' for outside symbol]
expected: FAIL
[Computed value of 'font-variant-numeric' for outside decimal]
expected: FAIL
[Computed value of 'text-transform' for outside decimal]
expected: FAIL
[Computed value of 'text-indent' for outside decimal]
expected: FAIL
[Computed value of 'font-variant-numeric' for outside string]
expected: FAIL
[Computed value of 'text-transform' for outside string]
expected: FAIL
[Computed value of 'text-indent' for outside string]
expected: FAIL
[Computed value of 'font-variant-numeric' for outside marker]
expected: FAIL
[Computed value of 'text-transform' for outside marker]
expected: FAIL
[Computed value of 'text-indent' for outside marker]
expected: FAIL
[Computed value of 'font-variant-numeric' for inside symbol]
expected: FAIL
[Computed value of 'text-transform' for inside symbol]
expected: FAIL
[Computed value of 'text-indent' for inside symbol]
expected: FAIL
[Computed value of 'font-variant-numeric' for inside decimal]
expected: FAIL
[Computed value of 'text-transform' for inside decimal]
expected: FAIL
[Computed value of 'text-indent' for inside decimal]
expected: FAIL
[Computed value of 'font-variant-numeric' for inside string]
expected: FAIL
[Computed value of 'text-transform' for inside string]
expected: FAIL
[Computed value of 'text-indent' for inside string]
expected: FAIL
[Computed value of 'font-variant-numeric' for inside marker]
expected: FAIL
[Computed value of 'text-transform' for inside marker]
expected: FAIL
[Computed value of 'text-indent' for inside marker]
expected: FAIL
[Computed value of 'unicode-bidi' for outside symbol]
expected: FAIL
[Computed value of 'unicode-bidi' for outside decimal]
expected: FAIL
[Computed value of 'unicode-bidi' for outside string]
expected: FAIL
[Computed value of 'unicode-bidi' for outside marker]
expected: FAIL
[Computed value of 'unicode-bidi' for inside symbol]
expected: FAIL
[Computed value of 'unicode-bidi' for inside decimal]
expected: FAIL
[Computed value of 'unicode-bidi' for inside string]
expected: FAIL
[Computed value of 'unicode-bidi' for inside marker]
expected: FAIL

View file

@ -1,16 +1,4 @@
[marker-display-computed.html]
[Computed 'display' for inside ::marker, variant default]
expected: FAIL
[Computed 'display' for inside ::marker, variant color]
expected: FAIL
[Computed 'display' for inside ::marker, variant string]
expected: FAIL
[Computed 'display' for inside ::marker, variant content]
expected: FAIL
[Computed 'display' for outside ::marker, variant default]
expected: FAIL

View file

@ -0,0 +1,2 @@
[marker-letter-spacing.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[marker-line-height.html]
expected: FAIL

View file

@ -1,6 +0,0 @@
[marker-variable-computed-style.html]
[getComputedStyle() for opacity defined by variable in ::marker]
expected: FAIL
[getComputedStyle() for color defined by variable in ::marker]
expected: FAIL

View file

@ -0,0 +1,2 @@
[marker-word-spacing.html]
expected: FAIL

View file

@ -1,2 +1,237 @@
[marker-supported-properties-in-animation.html]
expected: ERROR
[Animation of font in ::marker]
expected: FAIL
[Animation of font-family in ::marker]
expected: FAIL
[Animation of font-feature-settings in ::marker]
expected: FAIL
[Animation of font-kerning in ::marker]
expected: FAIL
[Animation of font-size in ::marker]
expected: FAIL
[Animation of font-size-adjust in ::marker]
expected: FAIL
[Animation of font-stretch in ::marker]
expected: FAIL
[Animation of font-style in ::marker]
expected: FAIL
[Animation of font-synthesis in ::marker]
expected: FAIL
[Animation of font-synthesis-small-caps in ::marker]
expected: FAIL
[Animation of font-synthesis-style in ::marker]
expected: FAIL
[Animation of font-synthesis-weight in ::marker]
expected: FAIL
[Animation of font-variant in ::marker]
expected: FAIL
[Animation of font-variant-caps in ::marker]
expected: FAIL
[Animation of font-variant-east-asian in ::marker]
expected: FAIL
[Animation of font-variant-ligatures in ::marker]
expected: FAIL
[Animation of font-variant-numeric in ::marker]
expected: FAIL
[Animation of font-variant-position in ::marker]
expected: FAIL
[Animation of font-weight in ::marker]
expected: FAIL
[Animation of line-height in ::marker]
expected: FAIL
[Animation of white-space in ::marker]
expected: FAIL
[Animation of color in ::marker]
expected: FAIL
[Animation of text-combine-upright in ::marker]
expected: FAIL
[Animation of content in ::marker]
expected: FAIL
[Animation of hyphens in ::marker]
expected: FAIL
[Animation of letter-spacing in ::marker]
expected: FAIL
[Animation of line-break in ::marker]
expected: FAIL
[Animation of overflow-wrap in ::marker]
expected: FAIL
[Animation of tab-size in ::marker]
expected: FAIL
[Animation of text-transform in ::marker]
expected: FAIL
[Animation of word-break in ::marker]
expected: FAIL
[Animation of word-spacing in ::marker]
expected: FAIL
[Animation of text-decoration-skip-ink in ::marker]
expected: FAIL
[Animation of text-emphasis in ::marker]
expected: FAIL
[Animation of text-emphasis-color in ::marker]
expected: FAIL
[Animation of text-emphasis-position in ::marker]
expected: FAIL
[Animation of text-emphasis-style in ::marker]
expected: FAIL
[Animation of text-shadow in ::marker]
expected: FAIL
[Animation of cursor in ::marker]
expected: FAIL
[Animation of list-style in ::marker]
expected: FAIL
[Transition of font in ::marker]
expected: FAIL
[Transition of font-feature-settings in ::marker]
expected: FAIL
[Transition of font-kerning in ::marker]
expected: FAIL
[Transition of font-size in ::marker]
expected: FAIL
[Transition of font-size-adjust in ::marker]
expected: FAIL
[Transition of font-stretch in ::marker]
expected: FAIL
[Transition of font-synthesis in ::marker]
expected: FAIL
[Transition of font-synthesis-small-caps in ::marker]
expected: FAIL
[Transition of font-synthesis-style in ::marker]
expected: FAIL
[Transition of font-synthesis-weight in ::marker]
expected: FAIL
[Transition of font-variant in ::marker]
expected: FAIL
[Transition of font-variant-caps in ::marker]
expected: FAIL
[Transition of font-variant-east-asian in ::marker]
expected: FAIL
[Transition of font-variant-ligatures in ::marker]
expected: FAIL
[Transition of font-variant-numeric in ::marker]
expected: FAIL
[Transition of font-variant-position in ::marker]
expected: FAIL
[Transition of font-weight in ::marker]
expected: FAIL
[Transition of line-height in ::marker]
expected: FAIL
[Transition of color in ::marker]
expected: FAIL
[Transition of text-combine-upright in ::marker]
expected: FAIL
[Transition of hyphens in ::marker]
expected: FAIL
[Transition of letter-spacing in ::marker]
expected: FAIL
[Transition of line-break in ::marker]
expected: FAIL
[Transition of tab-size in ::marker]
expected: FAIL
[Transition of word-break in ::marker]
expected: FAIL
[Transition of word-spacing in ::marker]
expected: FAIL
[Transition of text-decoration-skip-ink in ::marker]
expected: FAIL
[Transition of text-emphasis in ::marker]
expected: FAIL
[Transition of text-emphasis-color in ::marker]
expected: FAIL
[Transition of text-emphasis-position in ::marker]
expected: FAIL
[Transition of text-emphasis-style in ::marker]
expected: FAIL
[Transition of text-shadow in ::marker]
expected: FAIL
[Transition of display in ::marker]
expected: FAIL
[Transition of position in ::marker]
expected: FAIL
[Transition of float in ::marker]
expected: FAIL
[Transition of list-style in ::marker]
expected: FAIL
[Transition of list-style-image in ::marker]
expected: FAIL
[Transition of list-style-position in ::marker]
expected: FAIL
[Transition of list-style-type in ::marker]
expected: FAIL

View file

@ -1,28 +1,13 @@
[marker-supported-properties.html]
[Property font value 'italic small-caps 900 expanded 25px / 50px Ahem' in ::marker]
expected: FAIL
[Property font-family value 'Ahem' in ::marker]
expected: FAIL
[Property font-feature-settings value '"smcp"' in ::marker]
expected: FAIL
[Property font-kerning value 'none' in ::marker]
expected: FAIL
[Property font-size value '25px' in ::marker]
expected: FAIL
[Property font-size-adjust value '1' in ::marker]
expected: FAIL
[Property font-stretch value 'expanded' in ::marker]
expected: FAIL
[Property font-style value 'italic' in ::marker]
expected: FAIL
[Property font-synthesis value 'none' in ::marker]
expected: FAIL
@ -35,12 +20,6 @@
[Property font-synthesis-weight value 'none' in ::marker]
expected: FAIL
[Property font-variant value 'small-caps' in ::marker]
expected: FAIL
[Property font-variant-caps value 'small-caps' in ::marker]
expected: FAIL
[Property font-variant-east-asian value 'full-width' in ::marker]
expected: FAIL
@ -53,99 +32,24 @@
[Property font-variant-position value 'sub' in ::marker]
expected: FAIL
[Property font-weight value '900' in ::marker]
expected: FAIL
[Property line-height value '50px' in ::marker]
expected: FAIL
[Property white-space value 'nowrap' in ::marker]
expected: FAIL
[Property color value 'rgb(0, 100, 200)' in ::marker]
expected: FAIL
[Property text-combine-upright value 'all' in ::marker]
expected: FAIL
[Property unicode-bidi value 'plaintext' in ::marker]
expected: FAIL
[Property direction value 'rtl' in ::marker]
expected: FAIL
[Property content value '"foo"' in ::marker]
expected: FAIL
[Property animation value '1s linear 2s infinite alternate forwards paused anim' in ::marker]
expected: FAIL
[Property animation-delay value '1s' in ::marker]
expected: FAIL
[Property animation-direction value 'alternate' in ::marker]
expected: FAIL
[Property animation-duration value '2s' in ::marker]
expected: FAIL
[Property animation-fill-mode value 'forwards' in ::marker]
expected: FAIL
[Property animation-iteration-count value 'infinite' in ::marker]
expected: FAIL
[Property animation-name value 'anim' in ::marker]
expected: FAIL
[Property animation-play-state value 'paused' in ::marker]
expected: FAIL
[Property animation-timing-function value 'linear' in ::marker]
expected: FAIL
[Property animation-composition value 'add' in ::marker]
expected: FAIL
[Property transition value 'display 1s linear 2s' in ::marker]
expected: FAIL
[Property transition-delay value '1s' in ::marker]
expected: FAIL
[Property transition-duration value '2s' in ::marker]
expected: FAIL
[Property transition-property value 'display' in ::marker]
expected: FAIL
[Property transition-timing-function value 'linear' in ::marker]
expected: FAIL
[Property hyphens value 'none' in ::marker]
expected: FAIL
[Property letter-spacing value '10px' in ::marker]
expected: FAIL
[Property line-break value 'anywhere' in ::marker]
expected: FAIL
[Property overflow-wrap value 'anywhere' in ::marker]
expected: FAIL
[Property tab-size value '10px' in ::marker]
expected: FAIL
[Property text-transform value 'uppercase' in ::marker]
expected: FAIL
[Property word-break value 'break-word' in ::marker]
expected: FAIL
[Property word-spacing value '10px' in ::marker]
expected: FAIL
[Property text-decoration-skip-ink value 'none' in ::marker]
expected: FAIL
@ -161,9 +65,6 @@
[Property text-emphasis-style value 'dot' in ::marker]
expected: FAIL
[Property text-shadow value 'rgb(0, 255, 0) 1px 2px 3px' in ::marker]
expected: FAIL
[Property display value 'none' in ::marker]
expected: FAIL
@ -184,6 +85,3 @@
[Property list-style-type value 'decimal' in ::marker]
expected: FAIL
[Property cursor value 'move' in ::marker]
expected: FAIL

View file

@ -1,13 +1,4 @@
[tree-abiding-pseudo-elements.html]
["::marker" should be a valid selector]
expected: FAIL
["*::marker" should be a valid selector]
expected: FAIL
["foo.bar[baz\]::marker" should be a valid selector]
expected: FAIL
["::placeholder" should be a valid selector]
expected: FAIL