Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 87a311bda9faad38307d5decfae9e18cfa386752
      
https://github.com/WebKit/WebKit/commit/87a311bda9faad38307d5decfae9e18cfa386752
  Author: Tyler Wilcock <[email protected]>
  Date:   2025-06-17 (Tue, 17 Jun 2025)

  Changed paths:
    M LayoutTests/accessibility/image-link-expected.txt
    M LayoutTests/accessibility/image-map2-expected.txt
    M LayoutTests/accessibility/internal-link-anchors2-expected.txt
    M LayoutTests/accessibility/mac/document-attributes-expected.txt
    M LayoutTests/accessibility/mac/document-links-expected.txt
    A 
LayoutTests/accessibility/mac/visible-character-range-width-changes-expected.txt
    A LayoutTests/accessibility/mac/visible-character-range-width-changes.html
    M 
LayoutTests/accessibility/mixed-contenteditable-double-br-visible-character-range-hang-expected.txt
    M 
LayoutTests/accessibility/mixed-contenteditable-double-br-visible-character-range-hang.html
    M 
LayoutTests/accessibility/mixed-contenteditable-visible-character-range-hang-expected.txt
    M 
LayoutTests/accessibility/mixed-contenteditable-visible-character-range-hang.html
    M LayoutTests/accessibility/table-attributes-expected.txt
    M LayoutTests/accessibility/table-multiple-tbodies-expected.txt
    M LayoutTests/accessibility/table-one-cell-expected.txt
    M LayoutTests/accessibility/table-thead-tfoot-expected.txt
    M LayoutTests/accessibility/table-with-rules-expected.txt
    M LayoutTests/accessibility/transformed-element-expected.txt
    A LayoutTests/accessibility/visible-character-range-basic-expected.txt
    M LayoutTests/accessibility/visible-character-range-basic.html
    A 
LayoutTests/accessibility/visible-character-range-height-changes-expected.txt
    M LayoutTests/accessibility/visible-character-range-height-changes.html
    M LayoutTests/accessibility/visible-character-range-scrolling.html
    M LayoutTests/accessibility/visible-character-range-vertical-rl-expected.txt
    M LayoutTests/accessibility/visible-character-range-vertical-rl.html
    R LayoutTests/accessibility/visible-character-range-width-changes.html
    M LayoutTests/platform/glib/TestExpectations
    M LayoutTests/platform/ios/TestExpectations
    R 
LayoutTests/platform/ios/accessibility/mixed-contenteditable-double-br-visible-character-range-hang-expected.txt
    R 
LayoutTests/platform/ios/accessibility/mixed-contenteditable-visible-character-range-hang-expected.txt
    R 
LayoutTests/platform/ios/accessibility/visible-character-range-basic-expected.txt
    R 
LayoutTests/platform/ios/accessibility/visible-character-range-height-changes-expected.txt
    R 
LayoutTests/platform/ios/accessibility/visible-character-range-width-changes-expected.txt
    M LayoutTests/platform/mac-wk1/TestExpectations
    M LayoutTests/platform/mac/accessibility/lists-expected.txt
    M 
LayoutTests/platform/mac/accessibility/math-multiscript-attributes-expected.txt
    R 
LayoutTests/platform/mac/accessibility/visible-character-range-basic-expected.txt
    R 
LayoutTests/platform/mac/accessibility/visible-character-range-height-changes-expected.txt
    M 
LayoutTests/platform/mac/accessibility/visible-character-range-scrolling-expected.txt
    R 
LayoutTests/platform/mac/accessibility/visible-character-range-width-changes-expected.txt
    M LayoutTests/resources/accessibility-helper.js
    M Source/WebCore/accessibility/AXCoreObject.h
    M Source/WebCore/accessibility/AXObjectCache.cpp
    M Source/WebCore/accessibility/AXObjectCache.h
    M Source/WebCore/accessibility/AXTextRun.h
    M Source/WebCore/accessibility/AccessibilityObject.cpp
    M Source/WebCore/accessibility/AccessibilityObject.h
    M Source/WebCore/accessibility/AccessibilityRenderObject.cpp
    M Source/WebCore/accessibility/cocoa/AccessibilityObjectCocoa.mm
    M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
    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
    M Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm
    M Source/WebCore/dom/BoundaryPoint.cpp
    M Source/WebCore/dom/BoundaryPoint.h
    M Source/WebCore/dom/SimpleRange.cpp
    M Source/WebCore/dom/SimpleRange.h
    M Source/WebCore/page/Page.cpp
    M Source/WebCore/rendering/AccessibilityRegionContext.cpp
    M Source/WebCore/rendering/AccessibilityRegionContext.h
    M Source/WebCore/rendering/TextBoxPainter.cpp
    M Tools/DumpRenderTree/mac/AccessibilityUIElementMac.mm
    M Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm

  Log Message:
  -----------
  AX: Implement support for serving AXVisibleCharacterRange off the main-thread
https://bugs.webkit.org/show_bug.cgi?id=294619
rdar://153652827

Reviewed by Joshua Hoffman.

With this commit, we implement support for serving AXVisibleCharacterRange off 
the main-thread. The high level approach is:

  1. Accessibility paints already paint all InlineIterator::TextBoxes that are 
visible. When this happens, keep track
     of the line indices of the painted text boxes, and associate that with a 
RenderText, which in turn is associated
     with an accessibility object.

  2. Cache the first painted line and last painted line index for each 
RenderText in a HashMap (m_mostRecentlyPaintedText),
     and sync this HashMap to the accessibility thread.

  3. Implement AXIsolatedObject::visibleCharacterRange using this HashMap. This 
is trivial for leaf nodes. For non-leaf
     nodes, we iterate over the descendants until we find the first painted 
one. The `location` of the visible NSRange
     is the text of all descendants (which are unpainted) up to the first 
painted one. The `length` of the visible range
     is then the length from the first painted line, to the last painted line 
of the last painted descendant.

This algorithm produces very different results from the main-thread visible 
character range implementation, which is
based on VisiblePosition line-by-line iteration to fit an objects element rect 
into the viewport rect. In general, the
new algorithm seems much more accurate, and this can be seen in the layout 
tests modified in this patch (I left code
comments in each test).

This patch also stops outputting AXVisibleCharacterRange in tests that dump 
every attribute for every element. Because
the algorithms produce slightly different results in ways that are not clearly 
relevant to any user-facing behavior,
not outputting AXVisibleCharacterRange in these tests allows us to keep the 
tests running in both configurations. Some
tests have also been re-written to include better test corpus text — logging 
"1: Lineone lineone", "2: Linetwo linetwo"
rather than the word "test" thousands of times, which is harder to debug with 
the --show-window test runner flag.

* LayoutTests/accessibility/image-link-expected.txt:
* LayoutTests/accessibility/image-map2-expected.txt:
* LayoutTests/accessibility/internal-link-anchors2-expected.txt:
* LayoutTests/accessibility/mac/document-attributes-expected.txt:
* LayoutTests/accessibility/mac/document-links-expected.txt:
* 
LayoutTests/accessibility/mac/visible-character-range-width-changes-expected.txt:
 Added.
* LayoutTests/accessibility/mac/visible-character-range-width-changes.html: 
Added.
* 
LayoutTests/accessibility/mixed-contenteditable-double-br-visible-character-range-hang-expected.txt:
* 
LayoutTests/accessibility/mixed-contenteditable-double-br-visible-character-range-hang.html:
* 
LayoutTests/accessibility/mixed-contenteditable-visible-character-range-hang-expected.txt:
* 
LayoutTests/accessibility/mixed-contenteditable-visible-character-range-hang.html:
* LayoutTests/accessibility/table-attributes-expected.txt:
* LayoutTests/accessibility/table-multiple-tbodies-expected.txt:
* LayoutTests/accessibility/table-one-cell-expected.txt:
* LayoutTests/accessibility/table-thead-tfoot-expected.txt:
* LayoutTests/accessibility/table-with-rules-expected.txt:
* LayoutTests/accessibility/transformed-element-expected.txt:
* LayoutTests/accessibility/visible-character-range-basic-expected.txt: Added.
* LayoutTests/accessibility/visible-character-range-basic.html:
* 
LayoutTests/accessibility/visible-character-range-height-changes-expected.txt: 
Added.
* LayoutTests/accessibility/visible-character-range-height-changes.html:
* LayoutTests/accessibility/visible-character-range-scrolling.html:
* LayoutTests/accessibility/visible-character-range-vertical-rl-expected.txt:
* LayoutTests/accessibility/visible-character-range-vertical-rl.html:
* LayoutTests/accessibility/visible-character-range-width-changes.html: Removed.
* LayoutTests/platform/ios/TestExpectations:
* 
LayoutTests/platform/ios/accessibility/mixed-contenteditable-double-br-visible-character-range-hang-expected.txt:
 Removed.
* 
LayoutTests/platform/ios/accessibility/mixed-contenteditable-visible-character-range-hang-expected.txt:
 Removed.
* 
LayoutTests/platform/ios/accessibility/visible-character-range-basic-expected.txt:
 Removed.
* 
LayoutTests/platform/ios/accessibility/visible-character-range-height-changes-expected.txt:
 Removed.
* 
LayoutTests/platform/ios/accessibility/visible-character-range-width-changes-expected.txt:
 Removed.
* LayoutTests/platform/mac/accessibility/lists-expected.txt:
* 
LayoutTests/platform/mac/accessibility/math-multiscript-attributes-expected.txt:
* 
LayoutTests/platform/mac/accessibility/visible-character-range-basic-expected.txt:
 Removed.
* 
LayoutTests/platform/mac/accessibility/visible-character-range-height-changes-expected.txt:
 Removed.
* 
LayoutTests/platform/mac/accessibility/visible-character-range-scrolling-expected.txt:
* 
LayoutTests/platform/mac/accessibility/visible-character-range-width-changes-expected.txt:
 Removed.
* LayoutTests/resources/accessibility-helper.js:
* Source/WebCore/accessibility/AXCoreObject.h:
(WebCore::LineRange::LineRange):
(WebCore::LineRange::debugDescription const):
* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::mostRecentlyPaintedText):
(WebCore::AXObjectCache::onAccessibilityPaintStarted):
(WebCore::AXObjectCache::onAccessibilityPaintFinished):
(WebCore::AXObjectCache::onPaint):
* Source/WebCore/accessibility/AXObjectCache.h:
* Source/WebCore/accessibility/AXTextRun.h:
(WebCore::AXTextRun::characterAt const):
(WebCore::AXTextRun::textLength const):
* Source/WebCore/accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::previousLineStartBoundaryPoints const): Deleted.
(WebCore::AccessibilityObject::lastBoundaryPointContainedInRect const): Deleted.
(WebCore::textStartPoint): Deleted.
(WebCore::textEndPoint): Deleted.
(WebCore::AccessibilityObject::boundaryPointsContainedInRect const): Deleted.
(WebCore::AccessibilityObject::visibleCharacterRange const): Deleted.
(WebCore::AccessibilityObject::visibleCharacterRangeInternal const): Deleted.
* Source/WebCore/accessibility/AccessibilityObject.h:
* Source/WebCore/accessibility/cocoa/AccessibilityObjectCocoa.mm:
(WebCore::textStartPoint):
(WebCore::textEndPoint):
(WebCore::AccessibilityObject::previousLineStartBoundaryPoints const):
(WebCore::AccessibilityObject::lastBoundaryPointContainedInRect const):
(WebCore::AccessibilityObject::boundaryPointsContainedInRect const):
(WebCore::AccessibilityObject::visibleCharacterRange const):
(WebCore::AccessibilityObject::visibleCharacterRangeInternal const):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::visibleCharacterRange const): Deleted.
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h:
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::relatedObjectIDsFor):
(WebCore::AXIsolatedTree::applyPendingChanges):
(WebCore::AXIsolatedTree::sortedNonRootWebAreasDidChange):
(WebCore::AXIsolatedTree::processQueuedNodeUpdates):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h:
(WebCore::AXIsolatedTree::markMostRecentlyPaintedTextDirty):
(WebCore::AXIsolatedTree::mostRecentlyPaintedText const):
* Source/WebCore/accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm:
(WebCore::AXIsolatedObject::visibleCharacterRange const):
* Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
(-[WebAccessibilityObjectWrapperBase accessibilityVisibleCharacterRange]):
* Source/WebCore/dom/BoundaryPoint.cpp:
(WebCore::BoundaryPoint::debugDescription const):
* Source/WebCore/dom/BoundaryPoint.h:
* Source/WebCore/dom/SimpleRange.cpp:
(WebCore::SimpleRange::debugDescription const):
* Source/WebCore/dom/SimpleRange.h:
* Source/WebCore/page/Page.cpp:
(WebCore::Page::doAfterUpdateRendering):
* Source/WebCore/rendering/AccessibilityRegionContext.cpp:
(WebCore::AccessibilityRegionContext::~AccessibilityRegionContext):
(WebCore::AccessibilityRegionContext::takeBounds):
* Source/WebCore/rendering/AccessibilityRegionContext.h:
* Source/WebCore/rendering/TextBoxPainter.cpp:
(WebCore::TextBoxPainter::paint):
* Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
(WTR::AccessibilityUIElement::allAttributes):

Canonical link: https://commits.webkit.org/296359@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to