Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: b6353876dac02d9eca484847c6990996244f103a
      
https://github.com/WebKit/WebKit/commit/b6353876dac02d9eca484847c6990996244f103a
  Author: Alex Christensen <achristen...@apple.com>
  Date:   2022-12-13 (Tue, 13 Dec 2022)

  Changed paths:
    M Source/WebCore/Headers.cmake
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/html/HTMLFrameElementBase.cpp
    M Source/WebCore/html/HTMLFrameOwnerElement.cpp
    M Source/WebCore/html/HTMLFrameOwnerElement.h
    M Source/WebCore/html/PDFDocument.cpp
    M Source/WebCore/inspector/InspectorFrontendHost.cpp
    M Source/WebCore/loader/FrameLoader.cpp
    M Source/WebCore/loader/SubframeLoader.cpp
    M Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp
    M Source/WebCore/page/AbstractFrame.cpp
    M Source/WebCore/page/AbstractFrame.h
    M Source/WebCore/page/EventHandler.cpp
    M Source/WebCore/page/FocusController.cpp
    M Source/WebCore/page/Frame.cpp
    M Source/WebCore/page/Frame.h
    M Source/WebCore/page/FrameTree.h
    M Source/WebCore/page/ModalContainerObserver.cpp
    M Source/WebCore/page/PageSerializer.cpp
    M Source/WebCore/page/RemoteDOMWindow.cpp
    M Source/WebCore/page/RemoteDOMWindow.h
    M Source/WebCore/page/RemoteFrame.cpp
    M Source/WebCore/page/RemoteFrame.h
    A Source/WebCore/page/RemoteFrameClient.h
    M Source/WebKit/Sources.txt
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp
    M Source/WebKit/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp
    A Source/WebKit/WebProcess/WebCoreSupport/WebRemoteFrameClient.cpp
    A Source/WebKit/WebProcess/WebCoreSupport/WebRemoteFrameClient.h
    M Source/WebKit/WebProcess/WebPage/WebFrame.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp
    M Source/WebKitLegacy/win/DOMHTMLClasses.cpp
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm

  Log Message:
  -----------
  Instantiate a RemoteFrame upon cross-origin iframe navigation when site 
isolation is enabled
https://bugs.webkit.org/show_bug.cgi?id=249261

Reviewed by Tim Horton and Chris Dumez.

This introduces RemoteFrameClient which is kind of like the RemoteFrame 
equivalent of FrameLoaderClient
for when a RemoteFrame needs to tell the layer above it to do things.  Right 
now it doesn't have any actions,
but it will.  It's also needed for the non-local implementation of 
WebFrame::fromCoreFrame.

HTMLFrameOwnerElement needs to be able to own a RemoteFrame, so it now owns an 
AbstractFrame.
Like elsewhere where we do dynamicDowncast<LocalFrame>, there is work yet to 
do, but that will be done later.

A RemoteFrame needs to own a RemoteDOMWindow like a Frame owns a Document which 
owns a DOMWindow.
To make this ownership work, I changed the RefPtr<RemoteFrame> to a 
WeakPtr<RemoteFrame> in RemoteDOMWindow
to prevent reference cycles.

In WebFrame::didCommitLoadInAnotherProcess, I disconnect the Frame and replace 
it with a RemoteFrame that
is hooked up well enough to pass the existing tests.  More tests need to be 
written and work needs to be done
there still.

In order to have most of the data available for the tests that use 
WKWebView._frames to verify things about
site isolation and processes, I had to make frameTreeNodeData take an 
AbstractFrame so it can return some
meaningful data.  Like almost everything in this PR, there's still room to fix 
things there, too!

I wrote an API test that doesn't really add coverage to this new work that 
wasn't already there, but it
sets up for the work I was trying to do when I found I needed to do this first.

* Source/WebCore/Headers.cmake:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/html/HTMLFrameElementBase.cpp:
(WebCore::HTMLFrameElementBase::didAttachRenderers):
(WebCore::HTMLFrameElementBase::setFocus):
* Source/WebCore/html/HTMLFrameOwnerElement.cpp:
(WebCore::HTMLFrameOwnerElement::setContentFrame):
(WebCore::HTMLFrameOwnerElement::disconnectContentFrame):
(WebCore::HTMLFrameOwnerElement::contentDocument const):
* Source/WebCore/html/HTMLFrameOwnerElement.h:
(WebCore::HTMLFrameOwnerElement::contentFrame const):
* Source/WebCore/inspector/InspectorFrontendHost.cpp:
(WebCore::InspectorFrontendHost::evaluateScriptInExtensionTab):
* Source/WebCore/loader/FrameLoader.cpp:
(WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
* Source/WebCore/loader/SubframeLoader.cpp:
(WebCore::FrameLoader::SubframeLoader::loadOrRedirectSubframe):
* Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp:
(WebCore::LegacyWebArchive::create):
* Source/WebCore/page/AbstractFrame.cpp:
(WebCore::parentFrame):
(WebCore::AbstractFrame::AbstractFrame):
(WebCore::AbstractFrame::ownerElement const):
(WebCore::AbstractFrame::disconnectOwnerElement):
* Source/WebCore/page/AbstractFrame.h:
* Source/WebCore/page/EventHandler.cpp:
(WebCore::contentFrameForNode):
* Source/WebCore/page/FocusController.cpp:
(WebCore::FocusNavigationScope::scopeOwnedByIFrame):
(WebCore::FocusController::findFocusableElementDescendingIntoSubframes):
(WebCore::FocusController::advanceFocusInDocumentOrder):
(WebCore::FocusController::advanceFocusDirectionallyInContainer):
* Source/WebCore/page/Frame.cpp:
(WebCore::Frame::Frame):
(WebCore::Frame::invalidateContentEventRegionsIfNeeded):
(WebCore::Frame::ownerRenderer const):
(WebCore::Frame::contentFrameFromWindowOrFrameElement):
(WebCore::Frame::ownerElement const): Deleted.
(WebCore::Frame::disconnectOwnerElement): Deleted.
(WebCore::Frame::didFinishLoadInAnotherProcess): Deleted.
* Source/WebCore/page/Frame.h:
* Source/WebCore/page/FrameTree.h:
* Source/WebCore/page/ModalContainerObserver.cpp:
(WebCore::ModalContainerObserver::updateModalContainerIfNeeded):
* Source/WebCore/page/PageSerializer.cpp:
(WebCore::PageSerializer::SerializerMarkupAccumulator::appendCustomAttributes):
* Source/WebCore/page/RemoteDOMWindow.cpp:
(WebCore::RemoteDOMWindow::RemoteDOMWindow):
(WebCore::RemoteDOMWindow::~RemoteDOMWindow): Deleted.
* Source/WebCore/page/RemoteDOMWindow.h:
* Source/WebCore/page/RemoteFrame.cpp:
(WebCore::RemoteFrame::RemoteFrame):
(WebCore::m_client):
(WebCore::RemoteFrame::virtualWindow const):
(WebCore::RemoteFrame::window const):
(WebCore::RemoteFrame::didFinishLoadInAnotherProcess):
(WebCore::RemoteFrame::setWindow): Deleted.
* Source/WebCore/page/RemoteFrame.h:
* Source/WebCore/page/RemoteFrameClient.h: Copied from 
Source/WebCore/page/RemoteFrame.cpp.
(WebCore::RemoteFrameClient::~RemoteFrameClient):
* Source/WebKit/Sources.txt:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp:
(WebKit::WebAutomationSessionProxy::resolveChildFrameWithNodeHandle):
* Source/WebKit/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
(WebKit::InjectedBundleNodeHandle::htmlFrameElementContentFrame):
(WebKit::InjectedBundleNodeHandle::htmlIFrameElementContentFrame):
* Source/WebKit/WebProcess/WebCoreSupport/WebRemoteFrameClient.cpp: Copied from 
Source/WebCore/page/RemoteFrame.cpp.
(WebKit::WebRemoteFrameClient::WebRemoteFrameClient):
* Source/WebKit/WebProcess/WebCoreSupport/WebRemoteFrameClient.h: Copied from 
Source/WebCore/page/RemoteFrame.cpp.
(WebKit::WebRemoteFrameClient::webFrame const):
* Source/WebKit/WebProcess/WebPage/WebFrame.cpp:
(WebKit::WebFrame::fromCoreFrame):
(WebKit::WebFrame::didCommitLoadInAnotherProcess):
(WebKit::WebFrame::didFinishLoadInAnotherProcess):
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::frameTreeNodeData):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm:
(TestWebKitAPI::enableSiteIsolation):
(TestWebKitAPI::TEST):

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


_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to