Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 5523209676791efe2f6d5b5ad4aa926063d6fc20
      
https://github.com/WebKit/WebKit/commit/5523209676791efe2f6d5b5ad4aa926063d6fc20
  Author: Wenson Hsieh <[email protected]>
  Date:   2026-03-19 (Thu, 19 Mar 2026)

  Changed paths:
    M Source/WebCore/editing/cocoa/EditingHTMLConverter.h
    M Source/WebCore/editing/cocoa/EditingHTMLConverter.mm
    M Source/WebCore/page/Page.cpp
    M Source/WebCore/page/Page.h
    M Source/WebCore/page/writing-tools/WritingToolsController.h
    M Source/WebCore/page/writing-tools/WritingToolsController.mm
    M Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
    M Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h
    M Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h
    M Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm
    M Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/ios/PageClientImplIOS.mm
    M Source/WebKit/UIProcess/mac/PageClientImplMac.mm
    M Source/WebKit/UIProcess/mac/WebViewImpl.mm
    M Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm
    M Source/WebKit/WebProcess/WebPage/WebPage.h
    M Source/WebKit/WebProcess/WebPage/WebPage.messages.in
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WritingTools.mm

  Log Message:
  -----------
  [Writing Tools] Add a way for clients to preserve specific DOM nodes when 
invoking writing tools
https://bugs.webkit.org/show_bug.cgi?id=310232
rdar://166250361

Reviewed by Abrar Rahman Protyasha and Aditya Keerthi.

Add a way for clients to add nodes that should be preserved when invoking 
Writing Tools, by
specifying a list of UI-side `_WKJSHandle`s. This list is plumbed through the 
UI process into
WebCore, where it's mapped to a set of `Node`s and then consulted in
`elementQualifiesForWritingToolsPreservation`.

Test: WritingTools.WritingToolsPreservedNodesFromClient

Test: Tools/TestWebKitAPI/Tests/WebKitCocoa/WritingTools.mm
* Source/WebCore/editing/cocoa/EditingHTMLConverter.h:
* Source/WebCore/editing/cocoa/EditingHTMLConverter.mm:
(WebCore::elementQualifiesForWritingToolsPreservation):
(WebCore::hasAncestorQualifyingForWritingToolsPreservation):
(WebCore::updateAttributes):
(WebCore::editingAttributedStringInternal):
(WebCore::editingAttributedString):

Add a workaround to fix the actual bug for now without any client adoption (by 
checking for a node
with `id='AppleMailSignature'`, only when the web view is made `_editable`), 
with a FIXME to undo
this hack once Mail adopts `-_addWritingToolsPreservedNodes:`.

* Source/WebCore/page/Page.cpp:
(WebCore::Page::willBeginWritingToolsSession):
* Source/WebCore/page/Page.h:
* Source/WebCore/page/writing-tools/WritingToolsController.h:
* Source/WebCore/page/writing-tools/WritingToolsController.mm:
(WebCore::WritingToolsController::willBeginWritingToolsSession):
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _clearWritingToolsPreservedNodes]):
(jsHandleIdentifierInFrame):
(-[WKWebView 
willBeginWritingToolsSession:forProofreadingReview:requestContexts:]):
(-[WKWebView _addWritingToolsPreservedNodes:]):
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h:
* Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm:
(-[WKWebView _processWillSwapOrDidExit]):
* Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::willBeginWritingToolsSession):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/ios/PageClientImplIOS.mm:
(WebKit::PageClientImpl::didCommitLoadForMainFrame):
* Source/WebKit/UIProcess/mac/PageClientImplMac.mm:
(WebKit::PageClientImpl::didCommitLoadForMainFrame):
* Source/WebKit/UIProcess/mac/WebViewImpl.mm:
(WebKit::WebViewImpl::handleProcessSwapOrExit):
* Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
(WebKit::WebPage::willBeginWritingToolsSession):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WritingTools.mm:
((WritingTools, WritingToolsPreservedNodesFromClient)):

Add an API test to exercise the new method.

Canonical link: https://commits.webkit.org/309595@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to