Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: ee004596ca4fe4d507bb4bb9051725d8c8592655
https://github.com/WebKit/WebKit/commit/ee004596ca4fe4d507bb4bb9051725d8c8592655
Author: Alex Christensen <[email protected]>
Date: 2023-11-14 (Tue, 14 Nov 2023)
Changed paths:
M
LayoutTests/http/tests/site-isolation/frame-access-after-window-open-expected.txt
M LayoutTests/http/tests/site-isolation/frame-access-after-window-open.html
A
LayoutTests/http/tests/site-isolation/resources/post-message-to-opener-2.html
A LayoutTests/http/tests/site-isolation/window-open-with-name-expected.txt
A LayoutTests/http/tests/site-isolation/window-open-with-name.html
M Source/WebCore/loader/FrameLoader.cpp
M Source/WebCore/page/Frame.h
M Source/WebCore/page/FrameTree.cpp
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/FrameTreeCreationParameters.h
M Source/WebKit/Shared/FrameTreeCreationParameters.serialization.in
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/WebPage/WebFrame.cpp
M Source/WebKit/WebProcess/WebPage/WebFrame.h
M Source/WebKit/WebProcess/WebPage/WebPage.cpp
M Source/WebKit/WebProcess/WebPage/WebPage.h
M Source/WebKit/WebProcess/WebPage/WebPage.messages.in
Log Message:
-----------
Begin implementing frame name handling for site isolation
https://bugs.webkit.org/show_bug.cgi?id=264781
rdar://117092110
Reviewed by Pascoe.
In order for the second parameter of window.open to be able to be used, the
string name
must be found on the correct frame. Most of this can be implemented simply by
passing a
string around, but in order for WebFrameProxy::frameTreeCreationParameters to
be able to
be used with multiple frames after instantiation, we need to store the name in
the UI
process on the WebFrameProxy object.
In the web content process, a few fixes were needed. First, when switch from
RemoteFrame
to LocalFrame or the other way, the frame name should persist so we need to
copy it from
the old to the new Frame subclass object. In order for the correct frame to be
found and
used when RemoteFrames are in the tree, I needed to make a few places in
FrameTree and
FrameLoader work with both types of Frames.
I also had to move some RemotePageProxy cleanup from the WebPageProxy
destructor to
WebPageProxy::close to get WebKitTestRunner to successfully clean up between
running tests.
This seemed like a good stopping point to make a PR because something that
didn't work
before works now. I filed another bug for future work to make two more cases
work:
if the named frame is a RemoteFrame and if the named frame is the main frame.
*
LayoutTests/http/tests/site-isolation/frame-access-after-window-open-expected.txt:
* LayoutTests/http/tests/site-isolation/frame-access-after-window-open.html:
*
LayoutTests/http/tests/site-isolation/resources/post-message-to-opener-2.html:
Added.
* LayoutTests/http/tests/site-isolation/window-open-with-name-expected.txt:
Added.
* LayoutTests/http/tests/site-isolation/window-open-with-name.html: Added.
* Source/WebCore/loader/FrameLoader.cpp:
(WebCore::FrameLoader::findFrameForNavigation):
* Source/WebCore/page/Frame.h:
* Source/WebCore/page/FrameTree.cpp:
(WebCore::FrameTree::~FrameTree):
(WebCore::isFrameFamiliarWith):
(WebCore::FrameTree::find const):
(WebCore::FrameTree::firstRenderedChild const):
(WebCore::FrameTree::nextRenderedSibling const):
(WebCore::FrameTree::traverseNext const):
(WebCore::FrameTree::traverseNextInPostOrder const):
(printFrames):
* Source/WebCore/page/LocalFrame.cpp:
(WebCore::LocalFrame::disconnectView):
(WebCore::LocalFrame::opener const):
(WebCore::LocalFrame::opener):
* Source/WebCore/page/LocalFrame.h:
* Source/WebCore/page/RemoteFrame.cpp:
(WebCore::RemoteFrame::disconnectView):
* Source/WebCore/page/RemoteFrame.h:
* Source/WebKit/Shared/FrameTreeCreationParameters.h:
* Source/WebKit/Shared/FrameTreeCreationParameters.serialization.in:
* Source/WebKit/UIProcess/WebFrameProxy.cpp:
(WebKit::WebFrameProxy::didCreateSubframe):
(WebKit::WebFrameProxy::frameTreeCreationParameters const):
* Source/WebKit/UIProcess/WebFrameProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didCreateSubframe):
(WebKit::WebPageProxy::createRemoteSubframesInOtherProcesses):
(WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/WebProcess/WebPage/WebFrame.cpp:
(WebKit::WebFrame::createSubframe):
(WebKit::WebFrame::createRemoteSubframe):
(WebKit::WebFrame::didCommitLoadInAnotherProcess):
(WebKit::WebFrame::transitionToLocal):
* Source/WebKit/WebProcess/WebPage/WebFrame.h:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::constructFrameTree):
(WebKit::WebPage::createRemoteSubframe):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:
Canonical link: https://commits.webkit.org/270729@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes