Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 2b157dbbd4053751d8fcf196f2056a7e66e71697
      
https://github.com/WebKit/WebKit/commit/2b157dbbd4053751d8fcf196f2056a7e66e71697
  Author: Wenson Hsieh <[email protected]>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M Source/WebCore/editing/cocoa/EditorCocoa.mm
    M Source/WebCore/editing/cocoa/NodeHTMLConverter.h
    M Source/WebCore/editing/cocoa/NodeHTMLConverter.mm
    M Source/WebCore/loader/EmptyClients.cpp
    M Source/WebCore/page/EditorClient.h
    M Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/WebPageProxy.messages.in
    M Source/WebKit/WebProcess/WebCoreSupport/WebEditorClient.cpp
    M Source/WebKit/WebProcess/WebCoreSupport/WebEditorClient.h
    M Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm
    M Source/WebKit/WebProcess/WebPage/WebPage.h
    M Source/WebKit/WebProcess/WebPage/WebPage.messages.in
    M Source/WebKitLegacy/mac/WebCoreSupport/WebEditorClient.h
    M Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation.mm

  Log Message:
  -----------
  [Site Isolation] Content in cross-origin subframes is missing when copying 
and pasting
https://bugs.webkit.org/show_bug.cgi?id=319423
rdar://176590191

Reviewed by Abrar Rahman Protyasha.

When copying content that includes cross-origin subframes, content in those 
subframes is missing
upon pasting into native apps like TextEdit or Notes, which attempt to read 
`NSAttributedString`s
from the pasteboard.

While there's an existing solution added in 
https://commits.webkit.org/300189@main to ensure that
web archives capture cross-origin content under site isolation, there's 
currently no similar
architecture in place for attributed strings, which means we currently just 
skip over content in
cross-origin subframes.

To fix this, we apply the same approach taken in 300189@main to attributed 
string conversion; see
comments below for more details.

Test: 
SiteIsolation.ReadAttributedStringFromPasteboardAfterCopyWithCrossSiteIframe

* Source/WebCore/editing/cocoa/EditorCocoa.mm:
(WebCore::selectionAsAttributedString):

Add a `remoteFrameContent` argument here, that represents `AttributedString`s 
collected from remote
frames.

(WebCore::populateRichTextDataIfNeeded):

When serializing attributed strings, collect all remote frame IDs that 
represent frames where we
need to recursively convert into attributed strings.

(WebCore::Editor::writeSelectionToPasteboard):
* Source/WebCore/editing/cocoa/NodeHTMLConverter.h:
(WebCore::attributedString):
* Source/WebCore/editing/cocoa/NodeHTMLConverter.mm:
(HTMLConverter::HTMLConverter):
(HTMLConverter::_processElement):

Slot in attributed strings collected from remote subframes.

(WebCore::attributedString):
* Source/WebCore/page/EditorClient.h:
* Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::getAttributedStringsForRemoteFrames):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/WebProcess/WebCoreSupport/WebEditorClient.cpp:
(WebKit::WebEditorClient::collectAttributedStringsForRemoteFrames):

Add a new client hook that takes a list of remote frame IDs, and calls into the 
UI process to fan
out to all remote frames and convert their content into attributed strings.

* Source/WebKit/WebProcess/WebCoreSupport/WebEditorClient.h:
* Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
(WebKit::WebPage::getAttributedStringsForRemoteFrames):
(WebKit::WebPage::getContentsAsAttributedStringForFrames):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation.mm:
(TestWebKitAPI::(SiteIsolation, 
ReadAttributedStringFromPasteboardAfterCopyWithCrossSiteIframe)):

Add an API test to exercise the fix.

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



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

Reply via email to