Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 6c6b1e0f4c367656d18d45a8b4f6d2ec60ec128c https://github.com/WebKit/WebKit/commit/6c6b1e0f4c367656d18d45a8b4f6d2ec60ec128c Author: Chris Dumez <cdu...@apple.com> Date: 2023-08-23 (Wed, 23 Aug 2023)
Changed paths: M Source/WebKit/CMakeLists.txt M Source/WebKit/DerivedSources-input.xcfilelist M Source/WebKit/DerivedSources.make A Source/WebKit/Shared/GoToBackForwardItemParameters.h A Source/WebKit/Shared/GoToBackForwardItemParameters.serialization.in M Source/WebKit/UIProcess/ProvisionalPageProxy.cpp M Source/WebKit/UIProcess/WebPageProxy.cpp M Source/WebKit/UIProcess/WebProcessProxy.cpp M Source/WebKit/WebKit.xcodeproj/project.pbxproj M Source/WebKit/WebProcess/WebPage/WebPage.cpp M Source/WebKit/WebProcess/WebPage/WebPage.h M Source/WebKit/WebProcess/WebPage/WebPage.messages.in Log Message: ----------- Safari can't open the page when navigating back from a remote HTTP URL to a local html file https://bugs.webkit.org/show_bug.cgi?id=260504 rdar://103697846 Reviewed by Brent Fulgham. When calling loadFile on a WKWebView, we create a sandbox extension in the UIProcess and send it to the WebProcess. In turn the WebProcess uses this to create a temporary extension for the network process. Without this, sandboxed apps such as Safari would be unable to load such local files. When doing a back/forward navigation to a history item for a file URL, we often get lucky and load the page from the back/forward cache. However, if the page was evicted from the cache (or wasn't cached in the first place), we end up using a fresh new process for the navigation. However, we were not issuing a sandbox extension and the load would fail. To address the issue, we now create a sandbox extension in ProvisionalPageProxy::goToBackForwardItem(), whenever we process-swap on back/forward navigation to a file URL. Note that Cocoa ports are only able to create sandbox extensions once the process has finished launching (and we have its PID). As a result, the call to maybeInitializeSandboxExtensionHandle() may fail when calling ProvisionalPageProxy::goToBackForwardItem() if the process is still launching. In this case, the sandbox extension gets created later on, when the process has finished launching and we're sending the queued IPC. This is the exact same approach that we were using for WebPage::LoadRequest, but I am now applying it to WebPage::GoToBackForwardItem IPC too. If the process is not done launching, we send a WebPage::GoToBackForwardItemWaitingForProcessLaunch IPC instead, which gets handled in WebProcessProxy::shouldSendPendingMessage(), similarly to WebPage::LoadRequestWaitingForProcessLaunch. At this point, we create the sandbox extensions and convert the IPC message into a regular WebPage::GoToBackForwardItem one. To simplify the code, I moved all the parameters for the WebPage::GoToBackForwardItem IPC to a new GoToBackForwardItemParameters structure with its generated IPC coders. I also added the new sandbox extension handle to this structure. * Source/WebKit/CMakeLists.txt: * Source/WebKit/DerivedSources-input.xcfilelist: * Source/WebKit/DerivedSources.make: * Source/WebKit/Shared/GoToBackForwardItemParameters.h: Added. * Source/WebKit/Shared/GoToBackForwardItemParameters.serialization.in: Added. * Source/WebKit/UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::goToBackForwardItem): * Source/WebKit/UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::launchProcessForReload): (WebKit::WebPageProxy::goToBackForwardItem): * Source/WebKit/UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::shouldSendPendingMessage): * Source/WebKit/WebKit.xcodeproj/project.pbxproj: * Source/WebKit/WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::goToBackForwardItem): (WebKit::WebPage::goToBackForwardItemWaitingForProcessLaunch): * Source/WebKit/WebProcess/WebPage/WebPage.h: * Source/WebKit/WebProcess/WebPage/WebPage.messages.in: Canonical link: https://commits.webkit.org/267199@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes