Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: e4deb1dd40c5010b6b0e986ae0a2de1876947e9a
      
https://github.com/WebKit/WebKit/commit/e4deb1dd40c5010b6b0e986ae0a2de1876947e9a
  Author: Tyler Wilcock <[email protected]>
  Date:   2025-04-15 (Tue, 15 Apr 2025)

  Changed paths:
    M LayoutTests/accessibility-isolated-tree/TestExpectations
    A 
LayoutTests/accessibility/mac/editable-single-letter-soft-linebreak-lines-expected.txt
    A 
LayoutTests/accessibility/mac/editable-single-letter-soft-linebreak-lines.html
    A LayoutTests/accessibility/mac/line-range-in-contenteditable-expected.txt
    A LayoutTests/accessibility/mac/line-range-in-contenteditable.html
    M LayoutTests/platform/mac-wk1/TestExpectations
    M Source/WebCore/accessibility/AXObjectCache.cpp
    M Source/WebCore/accessibility/AXTextMarker.cpp
    M Source/WebCore/accessibility/AXTextMarker.h
    M Source/WebCore/accessibility/AXTextRun.cpp
    M Source/WebCore/accessibility/AXTextRun.h

  Log Message:
  -----------
  AX: After ENABLE(AX_THREAD_TEXT_APIS), VoiceOver speech becomes out of sync 
with the cursor position when navigating by line when starting at the start or 
end of soft line break positions
https://bugs.webkit.org/show_bug.cgi?id=291437
rdar://149081361

Reviewed by Joshua Hoffman.

This happened because we were not properly considering affinity, which is 
important at soft line break boundaries.
Fix the issue by making sure we keep affinity given to us when created text 
markers from VisiblePositions, and setting
affinity ourselves when appropriate in AXTextMarker::findLine.

Then we take affinity into account in AXTextRuns::indexForOffset, as what text 
run (and thus what line) a marker belongs
to is a function of both offset *and* affinity.

New tests perfectly simulate the issue, and one can reproduce the bug in the 
browser by issuing the same keystrokes
laid out in the test.

This also happened to fix existing tests 
mac/attributed-string-with-listitem-multiple-lines.html and 
mac/line-index-for-textmarker.html.

* LayoutTests/accessibility-isolated-tree/TestExpectations:
* 
LayoutTests/accessibility/mac/editable-single-letter-soft-linebreak-lines-expected.txt:
 Added.
* 
LayoutTests/accessibility/mac/editable-single-letter-soft-linebreak-lines.html: 
Added.
* LayoutTests/accessibility/mac/line-range-in-contenteditable-expected.txt: 
Added.
* LayoutTests/accessibility/mac/line-range-in-contenteditable.html: Added.
* LayoutTests/platform/mac-wk1/TestExpectations:
* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::textMarkerDataForVisiblePosition):
* Source/WebCore/accessibility/AXTextMarker.cpp:
(WebCore::AXTextMarker::clampOffsetToLengthIfNeeded const):
(WebCore::AXTextMarker::markerRangeForLineIndex const):
(WebCore::AXTextMarker::lineNumberForIndex const):
(WebCore::AXTextMarker::findMarker const):
(WebCore::AXTextMarker::findLine const):
* Source/WebCore/accessibility/AXTextMarker.h:
(WebCore::AXTextMarker::affinity const): Added.
(WebCore::AXTextMarker::isDownstream const): Added.
(WebCore::AXTextMarker::setAffinity):
* Source/WebCore/accessibility/AXTextRun.cpp:
(WebCore::AXTextRuns::indexForOffset const):
(WebCore::AXTextRuns::localRect const):
(WebCore::AXTextRuns::lineIDForOffset const):
Remove unused function.
* Source/WebCore/accessibility/AXTextRun.h:
(WebCore::AXTextRuns::lastRunIndex const):

Canonical link: https://commits.webkit.org/293733@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