Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 213223523e3bcac6c8dc109ebd00e74993dee8ad
      
https://github.com/WebKit/WebKit/commit/213223523e3bcac6c8dc109ebd00e74993dee8ad
  Author: Sihui Liu <[email protected]>
  Date:   2026-01-23 (Fri, 23 Jan 2026)

  Changed paths:
    M Source/WebCore/Headers.cmake
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/dom/Document.cpp
    A Source/WebCore/dom/DocumentSecurityPolicy.h
    M Source/WebCore/page/Frame.cpp
    M Source/WebCore/page/Frame.h
    M Source/WebCore/page/FrameTreeSyncData.in
    M Source/WebCore/page/LocalFrame.cpp
    M Source/WebCore/page/LocalFrame.h
    M Source/WebCore/page/RemoteFrame.cpp
    M Source/WebCore/page/RemoteFrame.h
    M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
    M Source/WebKit/UIProcess/ProvisionalPageProxy.cpp
    M Source/WebKit/UIProcess/ProvisionalPageProxy.h
    M Source/WebKit/UIProcess/WebFrameProxy.cpp
    M Source/WebKit/UIProcess/WebFrameProxy.h
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/WebPageProxy.messages.in
    M Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp
    M Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm

  Log Message:
  -----------
  [Site Isolation] Fix ProcessSwap.NavigatingCrossOriginFromCOOPSameOrigin
rdar://168343832
https://bugs.webkit.org/show_bug.cgi?id=305686

Reviewed by Alex Christensen.

In current implementation, the initial load in new window will use opener 
frame's cross-origin opener policy. This
is implemented by initializing document cross-origin opener policy with opener 
frame's cross-origin opener policy (see
`Document::initSecurityContext`), and setting source cross-origin opener policy 
for main frame navigation in load
parameters (see `WebLoaderStrategy::scheduleLoadFromNetworkProcess`). Under 
Site Isolation, this does not work as
`Document::initSecurityContext` returns early when parent frame is null and 
opener frame is in a different process --
`Document::initSecurityContext` needs to access parent / opener document for 
full initialization, so it just returns if
it has no access.

To fix this, a solution would be sending parent / opener document properties 
needed by `Document::initSecurityContext`
to the new window process. However, some of them are not safe to share, like 
`cookieURL`. So the patch takes a
different approach to just sync document COOP and COEP of frame to all frame 
processes, and get source COOP from frame
directly in `scheduleLoadFromNetworkProcess`.

This patch also makes some changes to process swap API tests to make sure they 
have the right expectations under Site
Isolation. Without Site Isolation, swapping process means swapping browsing 
context group (opener relationship is
servered); with Site Isolation, swapping process does not mean swapping 
browsing context group.

The patch fixes 9 ProcessSwap.NavigatingCrossOrigin* tests under Site Isolation.
New tests: SiteIsolation.CrossOriginPopupWithCOOPValueSameOrigin
           SiteIsolation.CrossOriginPopupWithOpenerCOOPValueSameOrigin

* Source/WebCore/Headers.cmake:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::topOrigin const):
* Source/WebCore/dom/DocumentSecurityPolicy.h: Added.
* Source/WebCore/page/Frame.cpp:
(WebCore::Frame::topOrigin const):
(WebCore::Frame::protectedTopOrigin const):
* Source/WebCore/page/Frame.h:
* Source/WebCore/page/FrameTreeSyncData.in:
* Source/WebCore/page/LocalFrame.cpp:
(WebCore::LocalFrame::frameDocumentSecurityPolicy const):
* Source/WebCore/page/LocalFrame.h:
* Source/WebCore/page/RemoteFrame.cpp:
(WebCore::RemoteFrame::frameDocumentSecurityPolicy const):
* Source/WebCore/page/RemoteFrame.h:
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/UIProcess/ProvisionalPageProxy.cpp:
(WebKit::ProvisionalPageProxy::didCommitLoadForFrame):
* Source/WebKit/UIProcess/ProvisionalPageProxy.h:
* Source/WebKit/UIProcess/WebFrameProxy.cpp:
(WebKit::WebFrameProxy::didCommitLoad):
(WebKit::WebFrameProxy::commitProvisionalFrame):
(WebKit::WebFrameProxy::calculateFrameTreeSyncData const):
* Source/WebKit/UIProcess/WebFrameProxy.h:
(WebKit::WebFrameProxy::documentSecurityPolicy const):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::commitProvisionalPage):
(WebKit::WebPageProxy::didCommitLoadForFrame):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp:
(WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
* Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp:
(WebKit::WebLocalFrameLoaderClient::dispatchDidCommitLoad):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm:
(TestWebKitAPI::TEST(SiteIsolation, CrossOriginPopupWithCOOPValueSameOrigin)):
(TestWebKitAPI::TEST(SiteIsolation, 
CrossOriginPopupWithOpenerCOOPValueSameOrigin)):

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



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

Reply via email to