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

Reply via email to