Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 09f3ff7a8562c28661311594574adceee38e2eb4
      
https://github.com/WebKit/WebKit/commit/09f3ff7a8562c28661311594574adceee38e2eb4
  Author: Tyler Wilcock <[email protected]>
  Date:   2026-03-11 (Wed, 11 Mar 2026)

  Changed paths:
    A 
LayoutTests/http/tests/site-isolation/accessibility/client/search-past-remote-frame-immediate-descendants-expected.txt
    A 
LayoutTests/http/tests/site-isolation/accessibility/client/search-past-remote-frame-immediate-descendants.html
    M Source/WebCore/accessibility/AXCoreObject.cpp
    M Source/WebCore/accessibility/AXCoreObject.h
    M Source/WebCore/accessibility/AXSearchManager.cpp
    M Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm
    M Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
    M Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h
    M Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl
    M 
Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementClientMac.h
    M 
Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementClientMac.mm
    M Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.h
    M Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm
    M Tools/WebKitTestRunner/TestController.cpp
    M Tools/WebKitTestRunner/TestController.h

  Log Message:
  -----------
  AX: VoiceOver-right navigation loops with site isolation when encountering a 
remote frame
https://bugs.webkit.org/show_bug.cgi?id=309401
rdar://171944277

Reviewed by Joshua Hoffman.

When VoiceOver navigates past a site-isolated iframe using 
immediateDescendantsOnly
search, it passes the iframe's FrameHost (an ignored AccessibilityScrollView) 
as the
start element. Since the FrameHost is ignored, it doesn't appear in the 
WebArea's
crossFrameUnignoredChildren() list, so appendChildrenToArray couldn't find it 
and
returned all children — causing the search to loop back to the first element.

Fix by adding a descendant-lookup fallback: when the start element isn't found 
in the
children list, check if any child is a direct child of the original start 
element.
This finds the RemoteFrame (the FrameHost's unignored child) and resumes the 
search
from the correct position.

Also fix the existing ignored-element sibling walk to use AXCoreObject methods
(nextSiblingUnignored / previousSiblingUnignored) instead of dynamicDowncast to
AccessibilityObject, which failed on the isolated tree where objects are
AXIsolatedObject.

The sibling methods filter out stitched-text children to avoid interfering with
text stitching.

* 
LayoutTests/http/tests/site-isolation/accessibility/search-past-remote-frame-immediate-descendants-expected.txt:
 Added.
* 
LayoutTests/http/tests/site-isolation/accessibility/search-past-remote-frame-immediate-descendants.html:
 Added.
* Source/WebCore/accessibility/AXCoreObject.cpp:
(WebCore::AXCoreObject::nextSiblingUnignored const):
(WebCore::AXCoreObject::previousSiblingUnignored const):
* Source/WebCore/accessibility/AXCoreObject.h:
* Source/WebCore/accessibility/AXSearchManager.cpp:
(WebCore::appendChildrenToArray):
* Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
(-[WebAccessibilityObjectWrapperBase attachIsolatedObject:]):
* Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(debugDescriptionFrom):
(attributeValueForTesting):
(-[WebAccessibilityObjectWrapper debugDescription]):
* Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
(WTR::AccessibilityUIElement::debugDescription):
(WTR::AccessibilityUIElement::rawRoleForTesting):
* Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
* Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementClientMac.h:
* Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementClientMac.mm:
(WTR::axCopyAttributeValueAsElementToken):
(WTR::AccessibilityUIElementClientMac::debugDescription):
(WTR::AccessibilityUIElementClientMac::rawRoleForTesting):
(WTR::AccessibilityUIElementClientMac::parentElement):
(WTR::AccessibilityUIElementClientMac::uiElementsForSearchPredicate):
* Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.h:
* Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
(WTR::AccessibilityUIElementMac::debugDescription):
(WTR::AccessibilityUIElementMac::rawRoleForTesting):
* Tools/WebKitTestRunner/TestController.cpp:
* Tools/WebKitTestRunner/TestController.h:

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to