Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: ae4576e425cf4eee9960dcd6de57b5ec693cab91
https://github.com/WebKit/WebKit/commit/ae4576e425cf4eee9960dcd6de57b5ec693cab91
Author: Alan Baradlay <[email protected]>
Date: 2026-04-14 (Tue, 14 Apr 2026)
Changed paths:
A LayoutTests/fast/css/first-letter-text-transform-change-expected.txt
A LayoutTests/fast/css/first-letter-text-transform-change.html
M Source/WebCore/rendering/RenderText.cpp
M Source/WebCore/rendering/RenderText.h
Log Message:
-----------
[First-Letter] Fix ::first-letter disappearing after style change.
https://bugs.webkit.org/show_bug.cgi?id=297570
<rdar://145550507>
Reviewed by Antti Koivisto.
When text-transform changes (e.g. uppercase to lowercase), each text
renderer re-applies the transform to its content. The old code called
RenderText::setText(originalText()) which treats it as a content change.
For a ::first-letter remaining fragment, this is wrong because:
1. originalText() returns the fragment's portion ("B"), not the full
DOM text ("ab").
2. setText triggers setTextInternal on the fragment, which resets it
to just "b" and destroys the first-letter renderer.
3. The first character "a" is lost.
The fix introduces updateRenderedText() which re-applies the transform
without going through setText/setTextInternal. This avoids destroying
the first-letter split -- each fragment just re-renders its text with
the new transform.
* LayoutTests/fast/css/first-letter-text-transform-change-expected.txt: Added.
* LayoutTests/fast/css/first-letter-text-transform-change.html: Added.
* Source/WebCore/rendering/RenderText.cpp:
(WebCore::RenderText::styleDidChange):
(WebCore::RenderText::setTextInternal):
(WebCore::RenderText::updateRenderedText):
* Source/WebCore/rendering/RenderText.h:
Canonical link: https://commits.webkit.org/311201@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications