Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 65e5a936b4813455e875e5e7a53e77678ce6182b https://github.com/WebKit/WebKit/commit/65e5a936b4813455e875e5e7a53e77678ce6182b Author: Alex Christensen <achristen...@apple.com> Date: 2023-05-11 (Thu, 11 May 2023)
Changed paths: M Source/WebCore/inspector/InspectorInstrumentation.cpp M Source/WebCore/inspector/InspectorInstrumentation.h M Source/WebCore/inspector/agents/InspectorPageAgent.cpp M Source/WebCore/inspector/agents/InspectorPageAgent.h M Source/WebCore/loader/FrameLoader.cpp M Source/WebCore/loader/FrameLoader.h M Source/WebCore/loader/NavigationDisabler.h M Source/WebCore/loader/NavigationScheduler.cpp M Source/WebCore/loader/NavigationScheduler.h M Source/WebCore/loader/SubframeLoader.cpp M Source/WebCore/page/Frame.cpp M Source/WebCore/page/Frame.h M Source/WebCore/page/LocalFrame.cpp M Source/WebCore/page/LocalFrame.h M Source/WebKit/UIProcess/WebPageProxy.cpp M Source/WebKit/WebProcess/WebPage/WebFrame.cpp M Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm Log Message: ----------- Prepare to allow parent frames to navigate site isolated iframes https://bugs.webkit.org/show_bug.cgi?id=256678 rdar://109235337 Reviewed by Brady Eidson. This PR does a few things, all of which will not change behavior with site isolation off. First, it moves NavigationScheduler from LocalFrame to Frame. This is needed because if a parent frame sets iframe.src=newURL then the parent's process needs to schedule the navigation of the iframe. This is the first of several large steps to get the navigation to happen. The next steps are to make a FrameLoader able to be owned by either a LocalFrame or a RemoteFrame and able to be moved between the two as the navigation causes processes to change. I got the NavigationScheduler to the point where it doesn't assert in the API test ParentNavigatingCrossOriginIframeToSameOrigin when site isolation is enabled, though the navigation doesn't proceed yet because there is no FrameLoader on the RemoteFrame. In order to make that compile, I needed to make some InspectorInstrumentation parameters be Frame instead of LocalFrame. I also made the source process in WebPageProxy::decidePolicyForNavigationAction be the WebFrameProxy's current process instead of the process from which the decidePolicyForNavigationAction message came. In all tests that are running for site isolation so far, they are the same. I add some assertions in the WebFrame constructor and invalidator that helped me figure out what was going wrong when debugging this. We had some code that was making 2 WebFrames with the same FrameIdentifier. This will help future developers catch problems earlier. I also change the alert in the API test ParentNavigatingCrossOriginIframeToSameOrigin to be called in the onload handler. This will allow my frame tree validation code to have deterministic state once I implement the frame teardown in the previoiusly-used process. If it weren't in the onload handler, then there was a race condition in the test because the alert could come before the didCommitLoadForFrame was processed. I also move the boolean values initialized in the FrameLoader constructor to use initializers in the header. * Source/WebCore/inspector/InspectorInstrumentation.cpp: (WebCore::InspectorInstrumentation::frameScheduledNavigationImpl): (WebCore::InspectorInstrumentation::frameClearedScheduledNavigationImpl): * Source/WebCore/inspector/InspectorInstrumentation.h: (WebCore::InspectorInstrumentation::frameScheduledNavigation): (WebCore::InspectorInstrumentation::frameClearedScheduledNavigation): (WebCore::InspectorInstrumentation::instrumentingAgents): * Source/WebCore/inspector/agents/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::frameDetached): (WebCore::InspectorPageAgent::frameForId): (WebCore::InspectorPageAgent::frameId): (WebCore::InspectorPageAgent::assertFrame): (WebCore::InspectorPageAgent::frameScheduledNavigation): (WebCore::InspectorPageAgent::frameClearedScheduledNavigation): * Source/WebCore/inspector/agents/InspectorPageAgent.h: * Source/WebCore/loader/NavigationDisabler.h: (WebCore::NavigationDisabler::isNavigationAllowed): * Source/WebCore/loader/NavigationScheduler.cpp: (WebCore::NavigationScheduler::NavigationScheduler): (WebCore::NavigationScheduler::scheduleRedirect): (WebCore::NavigationScheduler::mustLockBackForwardList): (WebCore::NavigationScheduler::scheduleLocationChange): (WebCore::NavigationScheduler::scheduleFormSubmission): (WebCore::NavigationScheduler::scheduleRefresh): (WebCore::NavigationScheduler::timerFired): (WebCore::NavigationScheduler::schedule): (WebCore::NavigationScheduler::startTimer): (WebCore::NavigationScheduler::cancel): * Source/WebCore/loader/NavigationScheduler.h: * Source/WebCore/loader/SubframeLoader.cpp: (WebCore::FrameLoader::SubframeLoader::loadOrRedirectSubframe): * Source/WebCore/page/Frame.cpp: (WebCore::Frame::Frame): (WebCore::Frame::~Frame): * Source/WebCore/page/Frame.h: (WebCore::Frame::navigationScheduler const): * Source/WebCore/page/LocalFrame.cpp: (WebCore::LocalFrame::LocalFrame): (WebCore::LocalFrame::~LocalFrame): * Source/WebCore/page/LocalFrame.h: (WebCore::LocalFrame::navigationScheduler const): Deleted. * Source/WebKit/UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::decidePolicyForNavigationAction): * Source/WebKit/WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::WebFrame): (WebKit::WebFrame::invalidate): * Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm: (TestWebKitAPI::TEST): Canonical link: https://commits.webkit.org/263999@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes