Changeset 239223 in webkit
- Timestamp:
- Dec 14, 2018 11:29:41 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r239221 r239223 1 2018-12-14 Chris Dumez <cdumez@apple.com> 2 3 [PSON] Process-swapping on a loadHTMLString causes duplicate decidePolicyForNavigationAction delegate calls 4 https://bugs.webkit.org/show_bug.cgi?id=192704 5 6 Reviewed by Geoffrey Garen. 7 8 Process-swapping on a loadHTMLString causes duplicate decidePolicyForNavigationAction delegate calls. This 9 is because we were failing to pass the ShouldTreatAsContinuingLoad flag to the WebContent process when 10 doing a LoadData. 11 12 * UIProcess/WebPageProxy.cpp: 13 (WebKit::WebPageProxy::loadData): 14 (WebKit::WebPageProxy::loadDataWithNavigation): 15 (WebKit::WebPageProxy::continueNavigationInNewProcess): 16 * UIProcess/WebPageProxy.h: 17 * WebProcess/WebPage/WebPage.cpp: 18 (WebKit::WebPage::loadDataImpl): 19 (WebKit::WebPage::loadData): 20 (WebKit::WebPage::loadAlternateHTML): 21 * WebProcess/WebPage/WebPage.h: 22 1 23 2018-12-14 Joseph Pecoraro <pecoraro@apple.com> 2 24 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r239219 r239223 1131 1131 1132 1132 auto navigation = m_navigationState->createLoadDataNavigation(std::make_unique<API::SubstituteData>(data.vector(), MIMEType, encoding, baseURL, userData)); 1133 loadDataWithNavigation(navigation, data, MIMEType, encoding, baseURL, userData );1133 loadDataWithNavigation(navigation, data, MIMEType, encoding, baseURL, userData, ShouldTreatAsContinuingLoad::No); 1134 1134 return WTFMove(navigation); 1135 1135 } 1136 1136 1137 void WebPageProxy::loadDataWithNavigation(API::Navigation& navigation, const IPC::DataReference& data, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData, std::optional<WebsitePoliciesData>&& websitePolicies)1137 void WebPageProxy::loadDataWithNavigation(API::Navigation& navigation, const IPC::DataReference& data, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData, ShouldTreatAsContinuingLoad shouldTreatAsContinuingLoad, std::optional<WebsitePoliciesData>&& websitePolicies) 1138 1138 { 1139 1139 ASSERT(!m_isClosed); … … 1152 1152 loadParameters.encodingName = encoding; 1153 1153 loadParameters.baseURLString = baseURL; 1154 loadParameters.shouldTreatAsContinuingLoad = shouldTreatAsContinuingLoad == ShouldTreatAsContinuingLoad::Yes; 1154 1155 loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get()); 1155 1156 loadParameters.websitePolicies = WTFMove(websitePolicies); … … 2728 2729 ASSERT(!navigation.currentRequest().isEmpty()); 2729 2730 if (auto& substituteData = navigation.substituteData()) 2730 loadDataWithNavigation(navigation, { substituteData->content.data(), substituteData->content.size() }, substituteData->MIMEType, substituteData->encoding, substituteData->baseURL, substituteData->userData.get(), WTFMove(websitePolicies));2731 loadDataWithNavigation(navigation, { substituteData->content.data(), substituteData->content.size() }, substituteData->MIMEType, substituteData->encoding, substituteData->baseURL, substituteData->userData.get(), ShouldTreatAsContinuingLoad::Yes, WTFMove(websitePolicies)); 2731 2732 else 2732 2733 loadRequestWithNavigation(navigation, ResourceRequest { navigation.currentRequest() }, WebCore::ShouldOpenExternalURLsPolicy::ShouldAllowExternalSchemes, nullptr, ShouldTreatAsContinuingLoad::Yes, WTFMove(websitePolicies)); -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r239219 r239223 1577 1577 RefPtr<API::Navigation> reattachToWebProcessWithItem(WebBackForwardListItem&); 1578 1578 1579 void loadDataWithNavigation(API::Navigation&, const IPC::DataReference&, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData = nullptr, std::optional<WebsitePoliciesData>&& = std::nullopt);1579 void loadDataWithNavigation(API::Navigation&, const IPC::DataReference&, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData, WebCore::ShouldTreatAsContinuingLoad, std::optional<WebsitePoliciesData>&& = std::nullopt); 1580 1580 void loadRequestWithNavigation(API::Navigation&, WebCore::ResourceRequest&&, WebCore::ShouldOpenExternalURLsPolicy, API::Object* userData, WebCore::ShouldTreatAsContinuingLoad, std::optional<WebsitePoliciesData>&& = std::nullopt); 1581 1581 -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r239219 r239223 1380 1380 } 1381 1381 1382 void WebPage::loadDataImpl(uint64_t navigationID, std::optional<WebsitePoliciesData>&& websitePolicies, Ref<SharedBuffer>&& sharedBuffer, const String& MIMEType, const String& encodingName, const URL& baseURL, const URL& unreachableURL, const UserData& userData)1382 void WebPage::loadDataImpl(uint64_t navigationID, bool shouldTreatAsContinuingLoad, std::optional<WebsitePoliciesData>&& websitePolicies, Ref<SharedBuffer>&& sharedBuffer, const String& MIMEType, const String& encodingName, const URL& baseURL, const URL& unreachableURL, const UserData& userData) 1383 1383 { 1384 1384 SendStopResponsivenessTimer stopper; … … 1396 1396 1397 1397 // Initate the load in WebCore. 1398 m_mainFrame->coreFrame()->loader().load(FrameLoadRequest(*m_mainFrame->coreFrame(), request, ShouldOpenExternalURLsPolicy::ShouldNotAllow, substituteData)); 1398 FrameLoadRequest frameLoadRequest(*m_mainFrame->coreFrame(), request, ShouldOpenExternalURLsPolicy::ShouldNotAllow, substituteData); 1399 frameLoadRequest.setShouldTreatAsContinuingLoad(shouldTreatAsContinuingLoad); 1400 m_mainFrame->coreFrame()->loader().load(WTFMove(frameLoadRequest)); 1399 1401 } 1400 1402 … … 1405 1407 auto sharedBuffer = SharedBuffer::create(reinterpret_cast<const char*>(loadParameters.data.data()), loadParameters.data.size()); 1406 1408 URL baseURL = loadParameters.baseURLString.isEmpty() ? WTF::blankURL() : URL(URL(), loadParameters.baseURLString); 1407 loadDataImpl(loadParameters.navigationID, WTFMove(loadParameters.websitePolicies), WTFMove(sharedBuffer), loadParameters.MIMEType, loadParameters.encodingName, baseURL, URL(), loadParameters.userData);1409 loadDataImpl(loadParameters.navigationID, loadParameters.shouldTreatAsContinuingLoad, WTFMove(loadParameters.websitePolicies), WTFMove(sharedBuffer), loadParameters.MIMEType, loadParameters.encodingName, baseURL, URL(), loadParameters.userData); 1408 1410 } 1409 1411 … … 1417 1419 auto sharedBuffer = SharedBuffer::create(reinterpret_cast<const char*>(loadParameters.data.data()), loadParameters.data.size()); 1418 1420 m_mainFrame->coreFrame()->loader().setProvisionalLoadErrorBeingHandledURL(provisionalLoadErrorURL); 1419 loadDataImpl(loadParameters.navigationID, WTFMove(loadParameters.websitePolicies), WTFMove(sharedBuffer), loadParameters.MIMEType, loadParameters.encodingName, baseURL, unreachableURL, loadParameters.userData);1421 loadDataImpl(loadParameters.navigationID, loadParameters.shouldTreatAsContinuingLoad, WTFMove(loadParameters.websitePolicies), WTFMove(sharedBuffer), loadParameters.MIMEType, loadParameters.encodingName, baseURL, unreachableURL, loadParameters.userData); 1420 1422 m_mainFrame->coreFrame()->loader().setProvisionalLoadErrorBeingHandledURL({ }); 1421 1423 } -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.h
r239219 r239223 1197 1197 String sourceForFrame(WebFrame*); 1198 1198 1199 void loadDataImpl(uint64_t navigationID, std::optional<WebsitePoliciesData>&&, Ref<WebCore::SharedBuffer>&&, const String& MIMEType, const String& encodingName, const URL& baseURL, const URL& failingURL, const UserData&);1199 void loadDataImpl(uint64_t navigationID, bool shouldTreatAsContinuingLoad, std::optional<WebsitePoliciesData>&&, Ref<WebCore::SharedBuffer>&&, const String& MIMEType, const String& encodingName, const URL& baseURL, const URL& failingURL, const UserData&); 1200 1200 1201 1201 // Actions -
trunk/Tools/ChangeLog
r239210 r239223 1 2018-12-14 Chris Dumez <cdumez@apple.com> 2 3 [PSON] Process-swapping on a loadHTMLString causes duplicate decidePolicyForNavigationAction delegate calls 4 https://bugs.webkit.org/show_bug.cgi?id=192704 5 6 Reviewed by Geoffrey Garen. 7 8 Extend existing API test to reproduce the problem. 9 10 * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: 11 1 12 2018-12-14 Chris Dumez <cdumez@apple.com> 2 13 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm
r239095 r239223 2998 2998 [webView setNavigationDelegate:delegate.get()]; 2999 2999 3000 numberOfDecidePolicyCalls = 0; 3001 3000 3002 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"pson://www.webkit.org/main.html"]]; 3001 3003 [webView loadRequest:request]; … … 3014 3016 auto pid2 = [webView _webProcessIdentifier]; 3015 3017 EXPECT_NE(pid1, pid2); 3018 3019 EXPECT_EQ(2, numberOfDecidePolicyCalls); 3016 3020 3017 3021 [webView evaluateJavaScript:@"document.body.innerText" completionHandler:^(id innerText, NSError *error) {
Note: See TracChangeset
for help on using the changeset viewer.