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

Reply via email to