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