Skip to content

AX: iOS VoiceOver can't swipe past the last element inside iframes or render a cursor for iframe content#69445

Open
twilco wants to merge 1 commit into
WebKit:mainfrom
twilco:eng/AX-iOS-VoiceOver-can-t-swipe-past-the-last-element-inside-iframes-or-render-a-cursor-for-iframe-content
Open

AX: iOS VoiceOver can't swipe past the last element inside iframes or render a cursor for iframe content#69445
twilco wants to merge 1 commit into
WebKit:mainfrom
twilco:eng/AX-iOS-VoiceOver-can-t-swipe-past-the-last-element-inside-iframes-or-render-a-cursor-for-iframe-content

Conversation

@twilco

@twilco twilco commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

1a96622

AX: iOS VoiceOver can't swipe past the last element inside iframes or render a cursor for iframe content
https://bugs.webkit.org/show_bug.cgi?id=319459
rdar://179279930

Reviewed by NOBODY (OOPS!).

With ENABLE(ACCESSIBILITY_LOCAL_FRAME), each frame gets its own AXObjectCache and
an iframe's root AccessibilityScrollView reports isRoot() == true, so its
parentObject() returns null. On iOS, -[WebAccessibilityObjectWrapper
accessibilityContainer] climbed the tree with the non-cross-frame
parentObjectUnignored(), which therefore dead-ended at the iframe root

This broken link means it can neither advance past the last iframe element
nor resolve the view/window needed to draw its focus cursor.

Fix accessibilityContainer to ascend with crossFrameParentObjectUnignored(),
matching macOS. It crosses the local frame boundary at the iframe root and
behaves identically to parentObjectUnignored() elsewhere and when the flag is
off.

* LayoutTests/accessibility/ios-simulator/iframe-exit-traversal-expected.txt: Added.
* LayoutTests/accessibility/ios-simulator/iframe-exit-traversal.html: Added.
* Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper accessibilityContainer]):

1a96622

Misc iOS, visionOS, tvOS & watchOS macOS Linux Windows Apple Internal
✅ 🧪 style ✅ 🛠 ios ✅ 🛠 mac ✅ 🛠 wpe ⏳ 🛠 win ⏳ 🛠 ios-apple
✅ 🧪 bindings ✅ 🛠 ios-sim ✅ 🛠 mac-AS-debug loading 🧪 wpe-wk2 ⏳ 🧪 win-tests ⏳ 🛠 mac-apple
✅ 🧪 webkitperl ✅ 🧪 ios-wk2 ⏳ 🧪 api-mac ✅ 🧪 api-wpe ⏳ 🛠 vision-apple
⏳ 🧪 ios-wk2-wpt ⏳ 🧪 api-mac-debug ✅ 🛠 gtk3-libwebrtc
loading 🧪 api-ios loading 🧪 mac-wk2 ✅ 🛠 gtk
⏳ 🛠 ios-safer-cpp ⏳ 🧪 mac-AS-debug-wk2 ✅ 🧪 gtk-wk2
✅ 🛠 vision ✅ 🧪 mac-wk2-stress ✅ 🧪 api-gtk
✅ 🛠 vision-sim ⏳ 🧪 mac-intel-wk2 ⏳ 🛠 playstation
✅ 🧪 vision-wk2 ⏳ 🛠 mac-safer-cpp
✅ 🛠 tv loading 🧪 mac-site-isolation
✅ 🛠 tv-sim
✅ 🛠 watch
✅ 🛠 watch-sim

… render a cursor for iframe content

https://bugs.webkit.org/show_bug.cgi?id=319459
rdar://179279930

Reviewed by NOBODY (OOPS!).

With ENABLE(ACCESSIBILITY_LOCAL_FRAME), each frame gets its own AXObjectCache and
an iframe's root AccessibilityScrollView reports isRoot() == true, so its
parentObject() returns null. On iOS, -[WebAccessibilityObjectWrapper
accessibilityContainer] climbed the tree with the non-cross-frame
parentObjectUnignored(), which therefore dead-ended at the iframe root

This broken link means it can neither advance past the last iframe element
nor resolve the view/window needed to draw its focus cursor.

Fix accessibilityContainer to ascend with crossFrameParentObjectUnignored(),
matching macOS. It crosses the local frame boundary at the iframe root and
behaves identically to parentObjectUnignored() elsewhere and when the flag is
off.

* LayoutTests/accessibility/ios-simulator/iframe-exit-traversal-expected.txt: Added.
* LayoutTests/accessibility/ios-simulator/iframe-exit-traversal.html: Added.
* Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper accessibilityContainer]):
@twilco twilco self-assigned this Jul 15, 2026
@twilco twilco added the Accessibility For bugs related to accessibility. label Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Accessibility For bugs related to accessibility.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants