Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 4b95b757c6ded0de221c5606c06d865843529c75
https://github.com/WebKit/WebKit/commit/4b95b757c6ded0de221c5606c06d865843529c75
Author: Dominic Mazzoni <[email protected]>
Date: 2026-08-16 (Sun, 16 Aug 2026)
Changed paths:
A
LayoutTests/accessibility/isolated-tree/aria-checkbox-sends-notification-expected.txt
A
LayoutTests/accessibility/isolated-tree/mac/textarea-line-range-after-dynamic-edit-expected.txt
A
LayoutTests/accessibility/isolated-tree/mac/textarea-line-range-after-dynamic-edit.html
M
LayoutTests/accessibility/isolated-tree/mac/textarea-line-range-with-trailing-newline-expected.txt
M
LayoutTests/accessibility/isolated-tree/mac/textarea-line-range-with-trailing-newline.html
A
LayoutTests/accessibility/isolated-tree/text-marker/textarea-character-count-with-trailing-newline-expected.txt
A
LayoutTests/accessibility/isolated-tree/text-marker/textarea-character-count-with-trailing-newline.html
A
LayoutTests/accessibility/mac/textarea-line-range-after-dynamic-edit-expected.txt
A LayoutTests/accessibility/mac/textarea-line-range-after-dynamic-edit.html
M
LayoutTests/accessibility/mac/textarea-line-range-with-trailing-newline-expected.txt
M
LayoutTests/accessibility/mac/textarea-line-range-with-trailing-newline.html
M
LayoutTests/accessibility/text-marker/textarea-character-count-with-trailing-newline-expected.txt
M
LayoutTests/accessibility/text-marker/textarea-character-count-with-trailing-newline.html
M Source/WebCore/accessibility/AXCoreObject.h
M Source/WebCore/accessibility/AXLogger.cpp
M Source/WebCore/accessibility/AXTextMarker.cpp
M Source/WebCore/accessibility/AXTextMarker.h
M Source/WebCore/accessibility/AccessibilityObject.cpp
M Source/WebCore/accessibility/AccessibilityObject.h
M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
M Source/WebCore/accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm
Log Message:
-----------
AX: isolated tree overcounts characters in a textarea after a dynamic edit
that leaves a trailing line break
https://bugs.webkit.org/show_bug.cgi?id=321801
rdar://184935497
Reviewed by Tyler Wilcock.
Builds on this commit, which turns out to be incomplete:
https://bugs.webkit.org/show_bug.cgi?id=321454 (AX: live and isolated tree
don't agree on
several attributes when a textarea ends in a line break)
The underlying issue is the same - when the contents of a native text control
end in
a newline, the field's internal representation contains an extra newline, which
was
being exposed in AXNumberOfCharacters but not in AXValue, causing problems in
VoiceOver
due to the inconsistency.
The previous fix only tested static content and didn't detect all of
the possible ways that the trailing newline could manifest.
When typing, the internal representation has a lone "\n" text node,
so now we handle that.
When using Editor::replaceSelectionWithText() (which can be triggered
by paste, or by AXReplaceRangeWithText), the whole value is in a
single text node whose text ends in the newline, which couldn't be
detected by isCollapsedTrailingLineBreak. Replaced with
offsetOfCollapsedTrailingNewline(), which asks the narrower question
the callers actually need: within this object's text runs, is there a
trailing newline that the control's value doesn't include?
Also updates the line APIs.
Tests:
accessibility/isolated-tree/mac/textarea-line-range-after-dynamic-edit.html:
Added.
accessibility/isolated-tree/mac/textarea-line-range-with-trailing-newline.html:
accessibility/isolated-tree/text-marker/textarea-character-count-with-trailing-newline.html:
Copied from
LayoutTests/accessibility/text-marker/textarea-character-count-with-trailing-newline.html.
accessibility/mac/textarea-line-range-after-dynamic-edit.html: Added.
accessibility/mac/textarea-line-range-with-trailing-newline.html:
accessibility/text-marker/textarea-character-count-with-trailing-newline.html:
*
LayoutTests/accessibility/isolated-tree/mac/textarea-line-range-after-dynamic-edit-expected.txt:
Added.
*
LayoutTests/accessibility/isolated-tree/mac/textarea-line-range-after-dynamic-edit.html:
Added.
*
LayoutTests/accessibility/isolated-tree/mac/textarea-line-range-with-trailing-newline-expected.txt:
*
LayoutTests/accessibility/isolated-tree/mac/textarea-line-range-with-trailing-newline.html:
*
LayoutTests/accessibility/isolated-tree/text-marker/textarea-character-count-with-trailing-newline-expected.txt:
Copied from
LayoutTests/accessibility/text-marker/textarea-character-count-with-trailing-newline-expected.txt.
*
LayoutTests/accessibility/isolated-tree/text-marker/textarea-character-count-with-trailing-newline.html:
Copied from
LayoutTests/accessibility/text-marker/textarea-character-count-with-trailing-newline.html.
*
LayoutTests/accessibility/mac/textarea-line-range-after-dynamic-edit-expected.txt:
Added.
* LayoutTests/accessibility/mac/textarea-line-range-after-dynamic-edit.html:
Added.
*
LayoutTests/accessibility/mac/textarea-line-range-with-trailing-newline-expected.txt:
* LayoutTests/accessibility/mac/textarea-line-range-with-trailing-newline.html:
*
LayoutTests/accessibility/text-marker/textarea-character-count-with-trailing-newline-expected.txt:
*
LayoutTests/accessibility/text-marker/textarea-character-count-with-trailing-newline.html:
* Source/WebCore/accessibility/AXCoreObject.h:
* Source/WebCore/accessibility/AXLogger.cpp:
(WebCore::operator<<):
* Source/WebCore/accessibility/AXTextMarker.cpp:
(WebCore::hasEmptyFinalLine):
(WebCore::lineRangeWithoutCollapsedTrailingNewline):
(WebCore::isOnTrailingPlaceholderBlankLine): Deleted.
(WebCore::AXTextMarker::characterRangeForLine const):
(WebCore::AXTextMarker::markerRangeForLineIndex const):
(WebCore::AXTextMarker::lineNumberForIndex const):
(WebCore::AXTextMarker::lineRange const):
(WebCore::AXTextMarker::atLineBoundaryForDirection const):
(WebCore::AXTextMarker::findLine const):
(WebCore::Accessibility::enclosingNativeTextControl):
(WebCore::Accessibility::offsetOfCollapsedTrailingNewline):
* Source/WebCore/accessibility/AXTextMarker.h:
* Source/WebCore/accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::isInsideNativeTextControl const):
(WebCore::AccessibilityObject::isCollapsedTrailingLineBreak const): Deleted.
* Source/WebCore/accessibility/AccessibilityObject.h:
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h:
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::createIsolatedObjectData):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h:
* Source/WebCore/accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm:
(WebCore::AXIsolatedObject::textMarkerRange const):
(WebCore::AXIsolatedObject::textLength const):
Canonical link: https://commits.webkit.org/319263@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications