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