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