Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: ffe69f5458b13f0741406f8425b0fe4f2da15203
https://github.com/WebKit/WebKit/commit/ffe69f5458b13f0741406f8425b0fe4f2da15203
Author: Tyler Wilcock <[email protected]>
Date: 2026-05-15 (Fri, 15 May 2026)
Changed paths:
M Source/WebKit/WebProcess/WebPage/WebPage.cpp
Log Message:
-----------
AX: VoiceOver bounding boxes are wrong on cross-origin frames when isolated
tree mode is off
https://bugs.webkit.org/show_bug.cgi?id=314895
rdar://177171633
Reviewed by Dominic Mazzoni.
When a WebPage is initialized in a WebProcess where accessibility was already
enabled process-wide (e.g. via WebProcess::setEnhancedAccessibility before the
WebPage existed), AXObjectCache::gAccessibilityMode has already transitioned
to non-Off. Because that transition fired before WebPage::initialize ran, the
sync callback registered by setSyncModeToOtherProcessesCallback wasn't
installed yet, so the SetAccessibilityMode IPC was never sent to the
UIProcess. The new WebPageProxy's m_accessibilityMode stays at Off, and every
WebPageProxy::requestFrameScreenPosition for that frame early-returns. The
AccessibilityScrollView's frame geometry never gets populated, and
AccessibilityObject::convertFrameToSpace falls back to a default-constructed
AXFrameGeometry with screenPosition=(0,0), producing incorrect screen-relative
positions for every element in the frame.
Fix it by syncing the current process-wide accessibility mode to the
UIProcess WebPageProxy at the end of WebPage::initialize, immediately after
registering the sync callback, when the mode is already non-Off.
This is difficult to capture in a layout test, so no new test is added.
Fix was confirmed manually.
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
Canonical link: https://commits.webkit.org/313329@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications