Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 6f0c6edf0a342a1341a938ca943dca52ea645f22
https://github.com/WebKit/WebKit/commit/6f0c6edf0a342a1341a938ca943dca52ea645f22
Author: Dominic Mazzoni <[email protected]>
Date: 2026-08-10 (Mon, 10 Aug 2026)
Changed paths:
A
LayoutTests/accessibility/mac/text-marker-range-and-attributed-string-emission-expected.txt
A
LayoutTests/accessibility/mac/text-marker-range-and-attributed-string-emission.html
A
LayoutTests/accessibility/text-marker/text-marker-range-string-emission-matches-text-iterator-expected.txt
A
LayoutTests/accessibility/text-marker/text-marker-range-string-emission-matches-text-iterator.html
A
LayoutTests/accessibility/text-marker/text-marker-range-string-emits-tabs-and-replaced-elements-expected.txt
A
LayoutTests/accessibility/text-marker/text-marker-range-string-emits-tabs-and-replaced-elements.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/cocoa/AXTextMarkerCocoa.mm
M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
Log Message:
-----------
AX: Text marker range strings diverge from the main thread for table cells
and form controls)
https://bugs.webkit.org/show_bug.cgi?id=320998
rdar://184036986
Reviewed by Andres Gonzalez and Tyler Wilcock.
The AX-thread implementation of AXStringForTextMarkerRange
(AXTextMarkerRange::toString) doesn't emit the characters the
main-thread, TextIterator-based implementation emits for non-text
nodes, so the same range yields different strings depending on whether
the accessibility isolated tree is enabled.
To fix this, cache two new properties on isolated objects:
IsReplacedElementForTextEmission (the unignored half of
AccessibilityObject::replacedNodeNeedsCharacter, i.e. whether
TextIterator considers the node replaced) and
IsInUserAgentShadowTree. Teach findObjectWithRuns to tell its visitor
which of TextIterator's two emission points it is at —
ReachedInPreOrder (handleReplacedElement / handleNonTextNode) or
AscendedOutOf (exitNode) — and to optionally stop at a user-agent
shadow boundary, matching TextIterator's light-DOM walk. Emission
itself now lives in one function,
Accessibility::auxiliaryTextForObject, shared by toString,
toAttributedString and the index walk so they can't drift apart.
Tests: accessibility/mac/text-marker-range-and-attributed-string-emission.html
accessibility/text-marker/text-marker-range-string-emission-matches-text-iterator.html
accessibility/text-marker/text-marker-range-string-emits-tabs-and-replaced-elements.html
*
LayoutTests/accessibility/mac/text-marker-range-and-attributed-string-emission-expected.txt:
Added.
*
LayoutTests/accessibility/mac/text-marker-range-and-attributed-string-emission.html:
Added.
*
LayoutTests/accessibility/text-marker/text-marker-range-string-emission-matches-text-iterator-expected.txt:
Added.
*
LayoutTests/accessibility/text-marker/text-marker-range-string-emission-matches-text-iterator.html:
Added.
*
LayoutTests/accessibility/text-marker/text-marker-range-string-emits-tabs-and-replaced-elements-expected.txt:
Added.
*
LayoutTests/accessibility/text-marker/text-marker-range-string-emits-tabs-and-replaced-elements.html:
Added.
* Source/WebCore/accessibility/AXCoreObject.h:
* Source/WebCore/accessibility/AXLogger.cpp:
(WebCore::operator<<):
* Source/WebCore/accessibility/AXTextMarker.cpp:
(WebCore::AXTextMarkerRange::toString const):
(WebCore::forEachRunObjectForward):
(WebCore::AXTextMarker::offsetFromRoot const):
(WebCore::AXTextMarker::nextMarkerFromOffset const):
(WebCore::Accessibility::auxiliaryTextForObject):
(WebCore::Accessibility::findObjectWithRuns):
(WebCore::emittedNewlineLength): Deleted.
* Source/WebCore/accessibility/AXTextMarker.h:
(WebCore::EmittedAuxiliaryText::lastCharacter const):
(WebCore::Accessibility::findObjectWithRuns):
* Source/WebCore/accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::isReplacedElementForTextEmission const):
(WebCore::AccessibilityObject::isInUserAgentShadowTree const):
* Source/WebCore/accessibility/AccessibilityObject.h:
* Source/WebCore/accessibility/cocoa/AXTextMarkerCocoa.mm:
(WebCore::AXTextMarkerRange::toAttributedString const):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h:
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::createIsolatedObjectData):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h:
Canonical link: https://commits.webkit.org/318910@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications