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

Reply via email to