Changeset 252442 in webkit
- Timestamp:
- Nov 13, 2019, 5:59:52 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/UIProcess/WebPageProxy.cpp (modified) (4 diffs)
-
Source/WebKit/UIProcess/WebPageProxy.h (modified) (1 diff)
-
Source/WebKit/UIProcess/WebProcessProxy.cpp (modified) (2 diffs)
-
Source/WebKit/WebProcess/WebPage/WebPage.cpp (modified) (1 diff)
-
Source/WebKit/WebProcess/WebPage/WebPage.h (modified) (1 diff)
-
Source/WebKit/WebProcess/WebPage/WebPage.messages.in (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/LoadFileURL.mm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r252435 r252442 1 2019-11-13 Per Arne Vollan <pvollan@apple.com> 2 3 REGRESSION: WKWebView navigation fails when navigating from about:blank 4 https://bugs.webkit.org/show_bug.cgi?id=203852 5 <rdar://problem/56973112> 6 7 Reviewed by Brent Fulgham. 8 9 Previously, WebPageProxy::loadFile would unconditionally create a sandbox extension for the resource directory URL. Currently, 10 this method is calling WebPageProxy::maybeInitializeSandboxExtension to create a sandbox extension if needed. The sandbox 11 extension for the resource URL is not created if the WebContent process already has assumed access to the resource URL, which 12 is the case when loading the same file for the second time. The sandbox extension still needs to be issued in this case, since 13 the WebContent process is revoking its extension when the load is done. This patch restore the original behaviour by adding a 14 flag to WebPageProxy::maybeInitializeSandboxExtension to indicate whether the method should check if the process already has 15 assumed access. 16 17 API test: WKWebView.LoadRelativeFileURL 18 19 * UIProcess/WebPageProxy.cpp: 20 (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle): 21 (WebKit::WebPageProxy::loadRequestWithNavigationShared): 22 (WebKit::WebPageProxy::loadFile): 23 * UIProcess/WebPageProxy.h: 24 * UIProcess/WebProcessProxy.cpp: 25 (WebKit::WebProcessProxy::shouldSendPendingMessage): 26 * WebProcess/WebPage/WebPage.cpp: 27 (WebKit::WebPage::loadRequestWaitingForProcessLaunch): 28 (WebKit::WebPage::loadRequestWaitingForPID): Deleted. 29 * WebProcess/WebPage/WebPage.h: 30 * WebProcess/WebPage/WebPage.messages.in: 31 1 32 2019-11-13 Myles C. Maxfield <mmaxfield@apple.com> 2 33 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r252303 r252442 1083 1083 } 1084 1084 1085 void WebPageProxy::maybeInitializeSandboxExtensionHandle(WebProcessProxy& process, const URL& url, const URL& resourceDirectoryURL, SandboxExtension::Handle& sandboxExtensionHandle )1085 void WebPageProxy::maybeInitializeSandboxExtensionHandle(WebProcessProxy& process, const URL& url, const URL& resourceDirectoryURL, SandboxExtension::Handle& sandboxExtensionHandle, bool checkAssumedReadAccessToResourceURL) 1086 1086 { 1087 1087 if (!url.isLocalFile()) … … 1096 1096 1097 1097 if (!resourceDirectoryURL.isEmpty()) { 1098 if ( process.hasAssumedReadAccessToURL(resourceDirectoryURL))1098 if (checkAssumedReadAccessToResourceURL && process.hasAssumedReadAccessToURL(resourceDirectoryURL)) 1099 1099 return; 1100 1100 … … 1227 1227 process->send(Messages::WebPage::LoadRequest(loadParameters), webPageID); 1228 1228 else 1229 process->send(Messages::WebPage::LoadRequestWaitingForP ID(loadParameters, m_pageLoadState.resourceDirectoryURL(), m_identifier), webPageID);1229 process->send(Messages::WebPage::LoadRequestWaitingForProcessLaunch(loadParameters, m_pageLoadState.resourceDirectoryURL(), m_identifier, true), webPageID); 1230 1230 #else 1231 1231 process->send(Messages::WebPage::LoadRequest(loadParameters), webPageID); … … 1274 1274 loadParameters.shouldOpenExternalURLsPolicy = ShouldOpenExternalURLsPolicy::ShouldNotAllow; 1275 1275 loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get()); 1276 maybeInitializeSandboxExtensionHandle(m_process, fileURL, resourceDirectoryURL, loadParameters.sandboxExtensionHandle); 1276 const bool checkAssumedReadAccessToResourceURL = false; 1277 maybeInitializeSandboxExtensionHandle(m_process, fileURL, resourceDirectoryURL, loadParameters.sandboxExtensionHandle, checkAssumedReadAccessToResourceURL); 1277 1278 addPlatformLoadParameters(loadParameters); 1278 1279 1279 1280 #if HAVE(SANDBOX_ISSUE_READ_EXTENSION_TO_PROCESS_BY_AUDIT_TOKEN) 1280 1281 if (m_process->isLaunching()) 1281 m_process->send(Messages::WebPage::LoadRequestWaitingForP ID(loadParameters, resourceDirectoryURL, m_identifier), m_webPageID);1282 m_process->send(Messages::WebPage::LoadRequestWaitingForProcessLaunch(loadParameters, resourceDirectoryURL, m_identifier, checkAssumedReadAccessToResourceURL), m_webPageID); 1282 1283 else 1283 1284 m_process->send(Messages::WebPage::LoadRequest(loadParameters), m_webPageID); -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r252303 r252442 1610 1610 #endif 1611 1611 1612 void maybeInitializeSandboxExtensionHandle(WebProcessProxy&, const URL&, const URL& resourceDirectoryURL, SandboxExtension::Handle& );1612 void maybeInitializeSandboxExtensionHandle(WebProcessProxy&, const URL&, const URL& resourceDirectoryURL, SandboxExtension::Handle&, bool checkAssumedReadAccessToResourceURL = true); 1613 1613 1614 1614 #if ENABLE(WEB_AUTHN) -
trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
r252418 r252442 315 315 { 316 316 #if HAVE(SANDBOX_ISSUE_READ_EXTENSION_TO_PROCESS_BY_AUDIT_TOKEN) 317 if (message.encoder->messageName() == "LoadRequestWaitingForP ID") {317 if (message.encoder->messageName() == "LoadRequestWaitingForProcessLaunch") { 318 318 auto buffer = message.encoder->buffer(); 319 319 auto bufferSize = message.encoder->bufferSize(); … … 322 322 URL resourceDirectoryURL; 323 323 WebPageProxyIdentifier pageID; 324 if (decoder->decode(loadParameters) && decoder->decode(resourceDirectoryURL) && decoder->decode(pageID)) { 324 bool checkAssumedReadAccessToResourceURL; 325 if (decoder->decode(loadParameters) && decoder->decode(resourceDirectoryURL) && decoder->decode(pageID) && decoder->decode(checkAssumedReadAccessToResourceURL)) { 325 326 if (auto* page = WebProcessProxy::webPage(pageID)) { 326 page->maybeInitializeSandboxExtensionHandle(static_cast<WebProcessProxy&>(*this), loadParameters.request.url(), resourceDirectoryURL, loadParameters.sandboxExtensionHandle );327 page->maybeInitializeSandboxExtensionHandle(static_cast<WebProcessProxy&>(*this), loadParameters.request.url(), resourceDirectoryURL, loadParameters.sandboxExtensionHandle, checkAssumedReadAccessToResourceURL); 327 328 send(Messages::WebPage::LoadRequest(loadParameters), decoder->destinationID()); 328 329 } -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r252303 r252442 1556 1556 } 1557 1557 1558 // LoadRequestWaitingForP IDshould never be sent to the WebProcess. It must always be converted to a LoadRequest message.1559 NO_RETURN void WebPage::loadRequestWaitingForP ID(LoadParameters&&, URL&&, WebPageProxyIdentifier)1558 // LoadRequestWaitingForProcessLaunch should never be sent to the WebProcess. It must always be converted to a LoadRequest message. 1559 NO_RETURN void WebPage::loadRequestWaitingForProcessLaunch(LoadParameters&&, URL&&, WebPageProxyIdentifier, bool) 1560 1560 { 1561 1561 RELEASE_ASSERT_NOT_REACHED(); -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.h
r252303 r252442 1336 1336 void platformDidReceiveLoadParameters(const LoadParameters&); 1337 1337 void loadRequest(LoadParameters&&); 1338 NO_RETURN void loadRequestWaitingForP ID(LoadParameters&&, URL&&, WebPageProxyIdentifier);1338 NO_RETURN void loadRequestWaitingForProcessLaunch(LoadParameters&&, URL&&, WebPageProxyIdentifier, bool); 1339 1339 void loadData(LoadParameters&&); 1340 1340 void loadAlternateHTML(LoadParameters&&); -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in
r252303 r252442 166 166 LoadDataInFrame(IPC::DataReference data, String MIMEType, String encodingName, URL baseURL, WebCore::FrameIdentifier frameID) 167 167 LoadRequest(struct WebKit::LoadParameters loadParameters) 168 LoadRequestWaitingForP ID(struct WebKit::LoadParameters loadParameters, URL resourceDirectoryURL, WebKit::WebPageProxyIdentifier pageID)168 LoadRequestWaitingForProcessLaunch(struct WebKit::LoadParameters loadParameters, URL resourceDirectoryURL, WebKit::WebPageProxyIdentifier pageID, bool checkAssumedReadAccessToResourceURL) 169 169 LoadData(struct WebKit::LoadParameters loadParameters) 170 170 LoadAlternateHTML(struct WebKit::LoadParameters loadParameters) -
trunk/Tools/ChangeLog
r252441 r252442 1 2019-11-13 Per Arne Vollan <pvollan@apple.com> 2 3 REGRESSION: WKWebView navigation fails when navigating from about:blank 4 https://bugs.webkit.org/show_bug.cgi?id=203852 5 6 Reviewed by Brent Fulgham. 7 8 * TestWebKitAPI/Tests/WebKitCocoa/LoadFileURL.mm: 9 (TEST): 10 1 11 2019-11-13 Fujii Hironori <Hironori.Fujii@sony.com> 2 12 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/LoadFileURL.mm
r250673 r252442 29 29 #import "Test.h" 30 30 #import "TestNavigationDelegate.h" 31 #import <WebKit/WKProcessPoolPrivate.h> 31 32 #import <WebKit/WebKit.h> 32 33 #import <WebKit/WebViewPrivate.h> 34 #import <WebKit/_WKProcessPoolConfiguration.h> 33 35 #import <wtf/RetainPtr.h> 34 36 … … 93 95 EXPECT_WK_STREQ([webView _resourceDirectoryURL].path, fileURL.URLByDeletingLastPathComponent.path); 94 96 } 97 98 TEST(WKWebView, RepeatLoadFileURL) 99 { 100 auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 101 processPoolConfiguration.get().processSwapsOnNavigation = NO; 102 auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]); 103 104 auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]); 105 [webViewConfiguration setProcessPool:processPool.get()]; 106 107 auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:webViewConfiguration.get()]); 108 109 auto delegate = adoptNS([[TestNavigationDelegate alloc] init]); 110 [webView setNavigationDelegate:delegate.get()]; 111 112 NSString *path = [NSBundle.mainBundle pathForResource:@"simple" ofType:@"html" inDirectory:@"TestWebKitAPI.resources"]; 113 NSURL *baseURL = [NSURL fileURLWithPath:path.stringByDeletingLastPathComponent]; 114 NSURL *fileURL = [NSURL fileURLWithPath:path.lastPathComponent relativeToURL:baseURL]; 115 EXPECT_NOT_NULL([webView loadFileURL:fileURL allowingReadAccessToURL:fileURL.URLByDeletingLastPathComponent]); 116 [delegate waitForDidFinishNavigation]; 117 NSURL *aboutBlankURL = [NSURL URLWithString:@"about:blank"]; 118 [webView loadRequest:[NSURLRequest requestWithURL:aboutBlankURL]]; 119 [delegate waitForDidFinishNavigation]; 120 EXPECT_NOT_NULL([webView loadFileURL:fileURL allowingReadAccessToURL:fileURL.URLByDeletingLastPathComponent]); 121 [delegate waitForDidFinishNavigation]; 122 }
Note:
See TracChangeset
for help on using the changeset viewer.