Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 41557f449ef5b3805fdabf6f24939083ba273db3
https://github.com/WebKit/WebKit/commit/41557f449ef5b3805fdabf6f24939083ba273db3
Author: Tyler Wilcock <[email protected]>
Date: 2026-09-05 (Sat, 05 Sep 2026)
Changed paths:
M Source/WebCore/accessibility/AXObjectCache.cpp
M Source/WebCore/accessibility/AXObjectCache.h
M Source/WebCore/accessibility/AXObjectTypes.h
M Source/WebCore/accessibility/mac/AXObjectCacheMac.mm
M Source/WebCore/page/Page.cpp
M Source/WebKit/UIProcess/API/C/WKContext.cpp
M Source/WebKit/UIProcess/API/C/WKContextPrivate.h
M Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h
M Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.h
M Source/WebKit/UIProcess/WebPageProxy.messages.in
M Source/WebKit/UIProcess/WebProcessProxy.cpp
M Source/WebKit/UIProcess/WebProcessProxy.h
M Source/WebKit/UIProcess/WebProcessProxy.messages.in
M Source/WebKit/UIProcess/mac/WebViewImpl.h
M Source/WebKit/UIProcess/mac/WebViewImpl.mm
M Source/WebKit/WebProcess/WebPage/WebPage.cpp
M Source/WebKit/WebProcess/WebPage/WebPage.h
M Source/WebKit/WebProcess/WebPage/WebPage.messages.in
M Source/WebKit/WebProcess/WebProcess.cpp
M Source/WebKit/WebProcess/WebProcess.h
M Source/WebKit/WebProcess/WebProcess.messages.in
M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
M Tools/TestWebKitAPI/Tests/WebKit/WKPage/cocoa/EnableAccessibility.mm
A
Tools/TestWebKitAPI/Tests/WebKit/WKPage/cocoa/EnableAccessibilityInWebProcess_Bundle.mm
M Tools/WebKitTestRunner/TestController.cpp
Log Message:
-----------
AX: When multiple web views share a web process, only one reports correct
accessibility bounds
https://bugs.webkit.org/show_bug.cgi?id=322433
rdar://184250968
Reviewed by Andres Gonzalez and Dominic Mazzoni.
An app hosting several WKWebViews in one window reported every element inside
web content at an incorrect screen position anchored near {0, 0}.
This happened because AXObjectCache::setSyncModeToOtherProcessesCallback stores
a single process-global Function, and WebPage's constructor was its only
caller, so
every new WebPage overwrote the previous page's callback. This meant only one
of the webpages in the process was able to transition to accessibility-enabled
mode (via resolveAccessibilityModeTransition), leaving the others in
AccessibilityMode::Off.
This causes a host of issues, including AXFrameGeometry being permanently
uninitialized,
causing all bounding boxes to be wrong.
This commit fixes it in two ways:
1. By making the mode global for the UI process.
2. Moving the mode-sync callback from the WebPage constructor to the
WebProcess', since it is process-wide state, and a web process with
no pages still needs to transition (so future pages start in the
right state).
With one process-wide value, there is nothing left to keep in sync per page, so
the relatedPage
sync, WebPageProxy::SetAccessibilityMode, InheritAccessibilityMode, and
WebPage::inheritAccessibilityMode
all are removed.
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm:
(-[WKWebView _isAccessibilityEnabledInPageProxyForTesting]):
(+[WKWebView _isAccessibilityEnabledForTesting]):
(+[WKWebView _resetAccessibilityModeForTesting]):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::m_allowsImmersiveEnvironments):
(WebKit::WebPage::inheritAccessibilityMode): Deleted.
* Source/WebKit/WebProcess/WebProcess.cpp:
(WebKit::m_nonVisibleProcessMemoryCleanupTimer):
(WebKit::WebProcess::syncAccessibilityModeToAllPages):
(WebKit::WebProcess::initializeWebProcess):
(WebKit::WebProcess::setAccessibilityMode):
(WebKit::WebProcess::createWebPage):
* Source/WebKit/WebProcess/WebProcess.h:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKit/WKPage/cocoa/EnableAccessibility.mm:
(didReceiveMessageFromInjectedBundle):
(TEST(WebKit, AccessibilityModeSyncsToAllPagesSharingAWebProcess)):
*
Tools/TestWebKitAPI/Tests/WebKit/WKPage/cocoa/EnableAccessibilityInWebProcess_Bundle.mm:
Added.
(TestWebKitAPI::EnableAccessibilityInWebProcessTest::EnableAccessibilityInWebProcessTest):
(TestWebKitAPI::EnableAccessibilityInWebProcessTest::didReceiveMessage):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::m_pageForTesting):
(WebKit::WebPageProxy::requestFrameScreenPosition):
(WebKit::WebPageProxy::scheduleAccessibilityFrameGeometryUpdate):
(WebKit::WebPageProxy::creationParameters):
(WebKit::WebPageProxy::setAccessibilityMode): Deleted.
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::globalAccessibilityMode):
(WebKit::WebProcessProxy::setAccessibilityMode):
(WebKit::WebProcessProxy::accessibilityMode):
(WebKit::WebProcessProxy::setAccessibilityModeGlobally):
(WebKit::WebProcessProxy::resetAccessibilityModeForTesting):
(WebKit::webContentAccessibilityModeStorage):
(WebKit::WebProcessProxy::accessibilityModeDidChange):
(WebKit::WebProcessProxy::accessibilityModeForWebContent):
(WebKit::WebProcessProxy::setAccessibilityModeForWebContent):
* Source/WebKit/UIProcess/WebProcessProxy.h:
* Source/WebKit/UIProcess/WebProcessProxy.messages.in:
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:
* Source/WebKit/WebProcess/WebProcess.messages.in:
* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::transitionToAXThreadModeIfNeeded):
* Source/WebCore/accessibility/AXObjectCache.h:
(WebCore::AXObjectCache::enableAccessibility):
* Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:
(WebCore::AXObjectCache::platformAXThreadSupport):
(WebCore::AXObjectCache::platformStartSecondaryThread):
* Source/WebKit/UIProcess/mac/WebViewImpl.h:
* Source/WebKit/UIProcess/mac/WebViewImpl.mm:
(WebKit::WebViewImpl::updateWindowAndViewFrames):
(WebKit::WebViewImpl::enableAccessibilityIfNecessary):
* Source/WebCore/accessibility/AXObjectTypes.h:
(WebCore::accessibilityModeRank):
* Source/WebCore/page/Page.cpp:
(WebCore::Page::shouldUpdateAccessibilityRegions const):
* Source/WebKit/UIProcess/API/C/WKContext.cpp:
(WKContextResetAccessibilityModeForTesting):
* Source/WebKit/UIProcess/API/C/WKContextPrivate.h:
* Tools/WebKitTestRunner/TestController.cpp:
(WTR::TestController::resetStateToConsistentValues):
Canonical link: https://commits.webkit.org/320566@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications