Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: c9fef076099c4c9696945247550c8e7405b0d446
https://github.com/WebKit/WebKit/commit/c9fef076099c4c9696945247550c8e7405b0d446
Author: Utku Uckun <[email protected]>
Date: 2026-07-22 (Wed, 22 Jul 2026)
Changed paths:
A LayoutTests/accessibility/mac/show-writing-tools-action-expected.txt
A LayoutTests/accessibility/mac/show-writing-tools-action.html
M Source/WebCore/accessibility/AXCoreObject.h
M Source/WebCore/accessibility/AXObjectCache.cpp
M Source/WebCore/accessibility/AXObjectCache.h
M Source/WebCore/accessibility/AccessibilityObject.cpp
M Source/WebCore/accessibility/AccessibilityObject.h
M Source/WebCore/accessibility/cocoa/CocoaAccessibilityConstants.h
M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
M Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
M Source/WebCore/page/ChromeClient.h
M Source/WebCore/platform/LocalizedStrings.cpp
M Source/WebCore/platform/LocalizedStrings.h
M Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm
M Source/WebKit/UIProcess/PageClient.h
M Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.h
M Source/WebKit/UIProcess/WebPageProxy.messages.in
M Source/WebKit/UIProcess/mac/PageClientImplMac.h
M Source/WebKit/UIProcess/mac/PageClientImplMac.mm
M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h
M Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm
M Source/WebKit/WebProcess/WebPage/WebPage.h
M Source/WebKit/WebProcess/WebPage/WebPage.messages.in
Log Message:
-----------
AX: Web text field should have accessibility custom action to bring up the
new Siri writing tools UI https://bugs.webkit.org/show_bug.cgi?id=319444
rdar://182257138
Reviewed by Tyler Wilcock.
Adds a new accessibility custom action, AXShowWritingTools, exposed on editable
text fields (textareas, editable web areas, elements with an editable ancestor)
whenever
Writing Tools is actually available for that content — e.g. announced to
VoiceOver/AX clients as an action a screen-reader user can invoke to bring up
the Writing
Tools affordance. It correctly disappears for non-editable content and for
fields where Writing Tools is disallowed (e.g. password fields).
The plumbing, layer by layer
1. Availability signal — ChromeClient (Source/WebCore/page/ChromeClient.h)
Two new virtual hooks: writingToolsAvailable() (query) and
showWritingToolsAffordance() (invoke). WebChromeClient (WebKit's ChromeClient
implementation, in
WebProcess/WebCoreSupport/WebChromeClient.cpp/.h) implements both by
forwarding to WebPage.
2. WebProcess side — WebPage (WebProcess/WebPage/WebPage.h, WebPageCocoa.mm)
- m_writingToolsAvailable — a bool cached in the WebProcess, exposed via
writingToolsAvailable().
- setWritingToolsAvailable(bool) — setter, driven by a new IPC message
SetWritingToolsAvailable from the UIProcess (declared in WebPage.messages.in).
- showWritingToolsAffordance() — sends a ShowWritingToolsAffordance message
up to the UIProcess (new entry in WebPageProxy.messages.in).
3. UIProcess side — WebPageProxy (UIProcess/WebPageProxy.cpp/.h)
- writingToolsBehavior() (pre-existing) computes whether Writing Tools should
be None/Limited/Complete for the current editor state (selection type,
password-field/plugin exclusions, page-wide editability, and the
WKWebViewConfiguration setting).
- New: updateWritingToolsAvailability() — sends
SetWritingToolsAvailable(writingToolsBehavior() != None) down to WebPage. This
is the piece I added during debugging
(explained below).
- showWritingToolsAffordance(IPC::Connection&) (WebPageProxyCocoa.mm) —
receives the WebProcess's request and forwards it to PageClient.
- PageClient/PageClientImplMac (UIProcess/PageClient.h,
UIProcess/mac/PageClientImplMac.h/.mm) — showWritingToolsAffordance() triggers
the actual native Writing Tools
UI via showWritingTools(WTRequestedToolIndex).
4. The accessibility action itself — WebAccessibilityObjectWrapperMac.mm
- accessibilityActionNames — appends AXShowWritingTools to the action list
when the object is a text area/editable-web-area/has-editable-ancestor and
chrome().client().writingToolsAvailable() is true.
- accessibilityPerformAction: — handles invoking AXShowWritingTools by
calling chrome().client().showWritingToolsAffordance() on the main thread.
- accessibilityActionDescription: — returns a human-readable label via the
new AXShowWritingToolsLabel() string (added to LocalizedStrings.cpp/.h) instead
of falling
through to the generic "no custom actions" default.
Test: accessibility/mac/show-writing-tools-action.html
* LayoutTests/accessibility/mac/show-writing-tools-action-expected.txt: Added.
* LayoutTests/accessibility/mac/show-writing-tools-action.html: Added.
* Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper accessibilityActionNames]):
(-[WebAccessibilityObjectWrapper accessibilityPerformAction:]):
(-[WebAccessibilityObjectWrapper accessibilityActionDescription:]):
* Source/WebCore/page/ChromeClient.h:
(WebCore::ChromeClient::showWritingToolsAffordance):
(WebCore::ChromeClient::writingToolsAvailable const):
* Source/WebCore/platform/LocalizedStrings.cpp:
(WebCore::AXShowWritingToolsLabel):
* Source/WebCore/platform/LocalizedStrings.h:
* Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::showWritingToolsAffordance):
* Source/WebKit/UIProcess/PageClient.h:
(WebKit::PageClient::showWritingToolsAffordance):
* Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
(WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::editorStateChanged):
(WebKit::WebPageProxy::updateWritingToolsAvailability):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/UIProcess/mac/PageClientImplMac.h:
* Source/WebKit/UIProcess/mac/PageClientImplMac.mm:
(WebKit::PageClientImpl::showWritingToolsAffordance):
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::showWritingToolsAffordance):
(WebKit::WebChromeClient::writingToolsAvailable const):
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h:
* Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
(WebKit::WebPage::showWritingToolsAffordance):
(WebKit::WebPage::setWritingToolsAvailable):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:
Canonical link: https://commits.webkit.org/317732@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications