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

Reply via email to