Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 14aba6bf9d8dfded080493bedf39653f2ddb54ac
https://github.com/WebKit/WebKit/commit/14aba6bf9d8dfded080493bedf39653f2ddb54ac
Author: Alan Baradlay <[email protected]>
Date: 2026-04-08 (Wed, 08 Apr 2026)
Changed paths:
M LayoutTests/fast/css/first-letter-removed-added-expected.txt
A
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-multi-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-multi-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-multi.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-on-block-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-on-block-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-on-block.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-punctuation-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-punctuation-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-punctuation.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic.html
M Source/WebCore/rendering/updating/RenderTreeBuilderFirstLetter.cpp
Log Message:
-----------
first-letter not updated when ::before pseudo-element is dynamically added
https://bugs.webkit.org/show_bug.cgi?id=47815
<rdar://problem/96908042>
Reviewed by Antti Koivisto.
When you have a block with ::first-letter styling and then dynamically add
a ::before pseudo-element to an element inside it, the ::before content
should become the new first letter.
In the render tree, the ::before renderer gets placed after the existing
first-letter wrapper (which already occupies the first-child slot):
first-letter wrapper -> "1"
::before -> "A"
remaining text -> "23"
After detecting staleness, the existing rebuild logic handles the rest:
it resets the remaining text (which tears down the old wrapper), re-walks
the tree to find the new first letter ("A" from ::before), and creates
the split.
Note that when the first letter were already from ::before
content, the wrapper would be inside the ::before renderer (as its
descendant), not beside it as a sibling.
* LayoutTests/fast/css/first-letter-removed-added-expected.txt: Rebaselined.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-multi-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-multi-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-multi.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-on-block-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-on-block-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-on-block.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-punctuation-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-punctuation-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-punctuation.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-before-dynamic.html:
Added.
* Source/WebCore/rendering/updating/RenderTreeBuilderFirstLetter.cpp:
(WebCore::RenderTreeBuilder::FirstLetter::updateAfterDescendants):
Canonical link: https://commits.webkit.org/310774@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications