Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: c6601f0444874fc0b153140edf1cc88dd9bf14d0
https://github.com/WebKit/WebKit/commit/c6601f0444874fc0b153140edf1cc88dd9bf14d0
Author: Dominic Mazzoni <[email protected]>
Date: 2026-02-03 (Tue, 03 Feb 2026)
Changed paths:
A LayoutTests/accessibility/mac/client/README.md
A LayoutTests/accessibility/mac/client/button-expected.txt
A LayoutTests/accessibility/mac/client/button.html
M LayoutTests/platform/mac/TestExpectations
M Source/WebCore/testing/js/WebCoreTestSupport.cpp
M Source/WebCore/testing/js/WebCoreTestSupport.h
M Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
M Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h
M Source/WebKit/UIProcess/mac/WebViewImpl.h
M Source/WebKit/UIProcess/mac/WebViewImpl.mm
M
Tools/WebKitTestRunner/Configurations/WebKitTestRunner-internal.entitlements
M Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.cpp
M Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.h
M Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp
M Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl
M Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm
A
Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementClientMac.h
A
Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementClientMac.mm
M Tools/WebKitTestRunner/TestController.cpp
M Tools/WebKitTestRunner/TestController.h
M Tools/WebKitTestRunner/TestInvocation.cpp
M Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj
M Tools/WebKitTestRunner/mac/TestControllerMac.mm
Log Message:
-----------
AX: Add client-side accessibility testing support for site isolation tests
https://bugs.webkit.org/show_bug.cgi?id=306382
rdar://169048334
Reviewed by Tyler Wilcock.
Enables using Mac client-side accessibility APIs
(e.g. AXUIElementCopyAttributeValue, used by clients like VoiceOver),
in accessibility layout tests, which will allow us to test that
accessibility APIs work correctly across site isolation boundaries.
This adds a new subclass of AccessibilityUIElement, used to represent
each element in an accessibility layout test. When this class is
chosen, the client-side accessibility API is used to explore the
accessibility tree, rather than calling accessibility APIs in WebCore
directly.
This can't be done from the web content process due to sandboxing,
so instead we send an IPC to the main WebKitTestRunner process and
have it call the APIs there. Each AXUIElement is stored in a map and
represented by an opaque token.
Because the JavaScript API is blocked on an IPC to the main process,
and the main process's accessibility call blocks on an IPC to the
web content process, this only works if isolated tree mode is enabled,
because that uses a secondary accessibility thread.
This initial patch just starts with a very simple layout test to
demonstrate usage, and we will follow up with site isolation tests.
Test: accessibility/mac/client/button.html
* LayoutTests/accessibility/mac/client/README.md: Added.
* LayoutTests/accessibility/mac/client/button-expected.txt: Added.
* LayoutTests/accessibility/mac/client/button.html: Added.
* LayoutTests/platform/mac/TestExpectations:
* Source/WebCore/testing/js/WebCoreTestSupport.cpp:
(WebCoreTestSupport::setAccessibilityIsolatedTreeEnabled):
* Source/WebCore/testing/js/WebCoreTestSupport.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _remoteAccessibilityChildToken]):
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h:
* Source/WebKit/UIProcess/mac/WebViewImpl.h:
* Source/WebKit/UIProcess/mac/WebViewImpl.mm:
(WebKit::WebViewImpl::remoteAccessibilityChildToken):
* Tools/WebKitTestRunner/Configurations/WebKitTestRunner-internal.entitlements:
* Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
(WTR::AccessibilityController::setClientAccessibilityMode):
(WTR::AccessibilityController::rootElement):
(WTR::AccessibilityController::platformInitializeClientAccessibility):
* Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.h:
(WTR::AccessibilityController::clientAccessibilityModeEnabled const):
* Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
* Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
* Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
(WTR::AccessibilityController::updateIsolatedTreeMode):
(WTR::AccessibilityController::platformInitializeClientAccessibility):
* Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementClientMac.h:
Added.
* Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementClientMac.mm:
Added.
(WTR::axGetRoot):
(WTR::axCopyAttributeValueAsString):
(WTR::axCopyAttributeValueAsElementArray):
(WTR::AccessibilityUIElementClientMac::create):
(WTR::AccessibilityUIElementClientMac::createForUIProcess):
(WTR::AccessibilityUIElementClientMac::AccessibilityUIElementClientMac):
(WTR::AccessibilityUIElementClientMac::~AccessibilityUIElementClientMac):
(WTR::AccessibilityUIElementClientMac::platformUIElement):
(WTR::AccessibilityUIElementClientMac::isValid const):
(WTR::AccessibilityUIElementClientMac::getStringAttribute const):
(WTR::AccessibilityUIElementClientMac::role):
(WTR::AccessibilityUIElementClientMac::title):
(WTR::AccessibilityUIElementClientMac::description):
(WTR::AccessibilityUIElementClientMac::stringValue):
(WTR::AccessibilityUIElementClientMac::getChildren const):
(WTR::AccessibilityUIElementClientMac::getChildrenInRange const):
(WTR::AccessibilityUIElementClientMac::childrenCount):
(WTR::AccessibilityUIElementClientMac::childAtIndex):
* Tools/WebKitTestRunner/TestController.cpp:
* Tools/WebKitTestRunner/TestController.h:
* Tools/WebKitTestRunner/TestInvocation.cpp:
(WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
* Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
* Tools/WebKitTestRunner/mac/TestControllerMac.mm:
(WTR::TestController::getRemoteAccessibilityToken):
(WTR::TestController::initializeWebProcessAccessibility):
Canonical link: https://commits.webkit.org/306715@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications