Changeset 244540 in webkit
- Timestamp:
- Apr 23, 2019, 8:38:11 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 24 edited
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/loader/EmptyFrameLoaderClient.h (modified) (1 diff)
-
Source/WebCore/loader/FrameLoader.cpp (modified) (1 diff)
-
Source/WebCore/loader/FrameLoaderClient.h (modified) (1 diff)
-
Source/WebCore/loader/FrameLoaderTypes.h (modified) (1 diff)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/Scripts/webkit/messages.py (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKURLSchemeTask.mm (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKURLSchemeTaskPrivate.h (modified) (1 diff)
-
Source/WebKit/UIProcess/ProvisionalPageProxy.cpp (modified) (6 diffs)
-
Source/WebKit/UIProcess/ProvisionalPageProxy.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/WebPageProxy.cpp (modified) (6 diffs)
-
Source/WebKit/UIProcess/WebPageProxy.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/WebPageProxy.messages.in (modified) (1 diff)
-
Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (modified) (2 diffs)
-
Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.h (modified) (1 diff)
-
Source/WebKitLegacy/mac/ChangeLog (modified) (1 diff)
-
Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.h (modified) (1 diff)
-
Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm (modified) (1 diff)
-
Source/WebKitLegacy/win/ChangeLog (modified) (1 diff)
-
Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.cpp (modified) (1 diff)
-
Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.h (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r244538 r244540 1 2019-04-23 Chris Dumez <cdumez@apple.com> 2 3 [Process-Swap-On-Navigation] WebKit hangs when going back to a form submission's page due to Process-Swap-On-Navigation on iOS 12.2 and higher 4 https://bugs.webkit.org/show_bug.cgi?id=197097 5 <rdar://problem/50048318> 6 7 Reviewed by Alex Christensen. 8 9 * loader/EmptyFrameLoaderClient.h: 10 * loader/FrameLoader.cpp: 11 (WebCore::FrameLoader::checkLoadCompleteForThisFrame): 12 If we still have a provisional item (new load has been started or we did not clear it because we're about to retry), 13 then let the client know the load will continue by passing an extra flag with the didFailProvisionalLoad. 14 15 * loader/FrameLoaderClient.h: 16 * loader/FrameLoaderTypes.h: 17 1 18 2019-04-23 Carlos Garcia Campos <cgarcia@igalia.com> 2 19 -
trunk/Source/WebCore/loader/EmptyFrameLoaderClient.h
r244161 r244540 85 85 void dispatchDidReceiveTitle(const StringWithDirection&) final { } 86 86 void dispatchDidCommitLoad(Optional<HasInsecureContent>) final { } 87 void dispatchDidFailProvisionalLoad(const ResourceError& ) final { }87 void dispatchDidFailProvisionalLoad(const ResourceError&, WillContinueLoading) final { } 88 88 void dispatchDidFailLoad(const ResourceError&) final { } 89 89 void dispatchDidFinishDocumentLoad() final { } -
trunk/Source/WebCore/loader/FrameLoader.cpp
r244361 r244540 2466 2466 RELEASE_LOG_IF_ALLOWED("checkLoadCompleteForThisFrame: Failed provisional load (frame = %p, main = %d, isTimeout = %d, isCancellation = %d, errorCode = %d)", &m_frame, m_frame.isMainFrame(), error.isTimeout(), error.isCancellation(), error.errorCode()); 2467 2467 m_provisionalLoadErrorBeingHandledURL = m_provisionalDocumentLoader->url(); 2468 m_client.dispatchDidFailProvisionalLoad(error); 2468 2469 m_client.dispatchDidFailProvisionalLoad(error, history().provisionalItem() ? WillContinueLoading::Yes : WillContinueLoading::No); 2469 2470 #if ENABLE(CONTENT_FILTERING) 2470 2471 if (auto contentFilter = pdl->contentFilter()) -
trunk/Source/WebCore/loader/FrameLoaderClient.h
r244361 r244540 178 178 virtual void dispatchDidReceiveTitle(const StringWithDirection&) = 0; 179 179 virtual void dispatchDidCommitLoad(Optional<HasInsecureContent>) = 0; 180 virtual void dispatchDidFailProvisionalLoad(const ResourceError& ) = 0;180 virtual void dispatchDidFailProvisionalLoad(const ResourceError&, WillContinueLoading) = 0; 181 181 virtual void dispatchDidFailLoad(const ResourceError&) = 0; 182 182 virtual void dispatchDidFinishDocumentLoad() = 0; -
trunk/Source/WebCore/loader/FrameLoaderTypes.h
r240909 r244540 68 68 }; 69 69 70 enum class WillContinueLoading : bool { No, Yes }; 71 70 72 class PolicyCheckIdentifier { 71 73 public: -
trunk/Source/WebKit/ChangeLog
r244537 r244540 1 2019-04-23 Chris Dumez <cdumez@apple.com> 2 3 [Process-Swap-On-Navigation] WebKit hangs when going back to a form submission's page due to Process-Swap-On-Navigation on iOS 12.2 and higher 4 https://bugs.webkit.org/show_bug.cgi?id=197097 5 <rdar://problem/50048318> 6 7 Reviewed by Alex Christensen. 8 9 The issue is that when doing a history navigation with form data, we try to resubmit the form. 10 We initially use the ReturnCacheDataDontLoad cache policy without prompting the user to get 11 cached data. If this fails, we sent a DidFailProvisionalLoadForFrame IPC to the UIProcess but 12 the WebContent process actually retries the load with ReturnCacheDataElseLoad cache policy. 13 This new load triggers a new decidePolicyForNavigationAction. 14 15 This would cause trouble with process-swapping because we normally destroy the 16 ProvisionalPageProxy as soon as we receive a DidFailProvisionalLoadForFrame IPC from the 17 provisional process. As a result, the provisional process would not be able to retry. 18 19 To address the issue, we add pass a flag with the DidFailProvisionalLoadForFrame IPC to 20 if the load will continue or not. When this flag is set, the UIProcess does not destroy 21 the provisional page. 22 23 * Scripts/webkit/messages.py: 24 Minor IPC message handler build fix. 25 26 * UIProcess/API/Cocoa/WKURLSchemeTask.mm: 27 (-[WKURLSchemeTaskImpl _onlyIfCached]): 28 * UIProcess/API/Cocoa/WKURLSchemeTaskPrivate.h: 29 Add new _onlyIfCached SPI to WKURLSchemeTaskPrivate to allow for API testing. 30 31 * UIProcess/ProvisionalPageProxy.cpp: 32 (WebKit::ProvisionalPageProxy::cancel): 33 Pass WillContinueLoading flag. 34 35 (WebKit::ProvisionalPageProxy::validateInput): 36 Consider IPC with a navigationID of 0 as valid. When the navigation is triggered by the 37 WebContent process, it sends us a DecidePolicyForNavigationActionAsync IPC with a navigationID 38 of 0, until the UIProcess can generate a valid identifier. 39 40 (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame): 41 42 (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync): 43 When the WebPageProxy has generated a navigationID for the new WebContent process-initiated 44 navigation, update m_navigationID so that follow-up IPC is considered valid. 45 46 * UIProcess/ProvisionalPageProxy.h: 47 * UIProcess/WebPageProxy.cpp: 48 (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): 49 (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared): 50 (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared): 51 (WebKit::WebPageProxy::decidePolicyForNavigationAction): 52 * UIProcess/WebPageProxy.h: 53 * UIProcess/WebPageProxy.messages.in: 54 * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: 55 (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad): 56 * WebProcess/WebCoreSupport/WebFrameLoaderClient.h: 57 1 58 2019-04-22 Zalan Bujtas <zalan@apple.com> 2 59 -
trunk/Source/WebKit/Scripts/webkit/messages.py
r244095 r244540 463 463 'WebCore::TextIndicatorData': ['<WebCore/TextIndicator.h>'], 464 464 'WebCore::ViewportAttributes': ['<WebCore/ViewportArguments.h>'], 465 'WebCore::WillContinueLoading': ['<WebCore/FrameLoaderTypes.h>'], 465 466 'WebCore::SelectionRect': ['"EditorState.h"'], 466 467 'WebKit::ActivityStateChangeID': ['"DrawingAreaInfo.h"'], -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKURLSchemeTask.mm
r242339 r244540 71 71 } 72 72 73 - (BOOL)_requestOnlyIfCached 74 { 75 return _urlSchemeTask->task().request().cachePolicy() == WebCore::ResourceRequestCachePolicy::ReturnCacheDataDontLoad; 76 } 77 73 78 - (void)didReceiveResponse:(NSURLResponse *)response 74 79 { -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKURLSchemeTaskPrivate.h
r243376 r244540 31 31 - (void)_didPerformRedirection:(NSURLResponse *)response newRequest:(NSURLRequest *)request; 32 32 33 @property (nonatomic, readonly) BOOL _requestOnlyIfCached WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 34 33 35 @end -
trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp
r244307 r244540 135 135 auto error = WebKit::cancelledError(m_request); 136 136 error.setType(WebCore::ResourceError::Type::Cancellation); 137 didFailProvisionalLoadForFrame(m_mainFrame->frameID(), { }, m_navigationID, m_provisionalLoadURL, error, UserData { }); // Will delete |this|.137 didFailProvisionalLoadForFrame(m_mainFrame->frameID(), { }, m_navigationID, m_provisionalLoadURL, error, WebCore::WillContinueLoading::No, UserData { }); // Will delete |this|. 138 138 } 139 139 … … 190 190 return false; 191 191 192 return !navigationID || *navigationID == m_navigationID;192 return !navigationID || !*navigationID || *navigationID == m_navigationID; 193 193 } 194 194 … … 248 248 } 249 249 250 void ProvisionalPageProxy::didFailProvisionalLoadForFrame(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const String& provisionalURL, const WebCore::ResourceError& error, const UserData& userData)250 void ProvisionalPageProxy::didFailProvisionalLoadForFrame(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const String& provisionalURL, const WebCore::ResourceError& error, WebCore::WillContinueLoading willContinueLoading, const UserData& userData) 251 251 { 252 252 if (!validateInput(frameID, navigationID)) … … 261 261 pageMainFrame->didFailProvisionalLoad(); 262 262 263 m_page.didFailProvisionalLoadForFrameShared(m_process.copyRef(), frameID, frameSecurityOrigin, navigationID, provisionalURL, error, userData); // Willdelete |this|.263 m_page.didFailProvisionalLoadForFrameShared(m_process.copyRef(), frameID, frameSecurityOrigin, navigationID, provisionalURL, error, willContinueLoading, userData); // May delete |this|. 264 264 } 265 265 … … 379 379 if (decoder.messageName() == Messages::WebPageProxy::DidStartProgress::name() 380 380 || decoder.messageName() == Messages::WebPageProxy::DidChangeProgress::name() 381 || decoder.messageName() == Messages::WebPageProxy::DidDestroyNavigation::name() 382 || decoder.messageName() == Messages::WebPageProxy::DidFinishProgress::name() 381 383 || decoder.messageName() == Messages::WebPageProxy::BackForwardAddItem::name() 382 384 || decoder.messageName() == Messages::WebPageProxy::LogDiagnosticMessage::name() … … 384 386 || decoder.messageName() == Messages::WebPageProxy::LogDiagnosticMessageWithValueDictionary::name() 385 387 || decoder.messageName() == Messages::WebPageProxy::SetNetworkRequestsInProgress::name() 388 || decoder.messageName() == Messages::WebPageProxy::WillGoToBackForwardListItem::name() 386 389 #if USE(QUICK_LOOK) 387 390 || decoder.messageName() == Messages::WebPageProxy::DidStartLoadForQuickLookDocumentInMainFrame::name() -
trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.h
r244243 r244540 75 75 std::unique_ptr<DrawingAreaProxy> takeDrawingArea(); 76 76 77 void setNavigationID(uint64_t navigationID) { m_navigationID = navigationID; } 78 77 79 #if PLATFORM(COCOA) 78 80 Vector<uint8_t> takeAccessibilityToken() { return WTFMove(m_accessibilityToken); } … … 105 107 void didStartProvisionalLoadForFrame(uint64_t frameID, uint64_t navigationID, URL&&, URL&& unreachableURL, const UserData&); 106 108 void didCommitLoadForFrame(uint64_t frameID, uint64_t navigationID, const String& mimeType, bool frameHasCustomContentProvider, uint32_t frameLoadType, const WebCore::CertificateInfo&, bool containsPluginDocument, Optional<WebCore::HasInsecureContent> forcedHasInsecureContent, const UserData&); 107 void didFailProvisionalLoadForFrame(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const String& provisionalURL, const WebCore::ResourceError&, const UserData&);109 void didFailProvisionalLoadForFrame(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const String& provisionalURL, const WebCore::ResourceError&, WebCore::WillContinueLoading, const UserData&); 108 110 void startURLSchemeTask(URLSchemeTaskParameters&&); 109 111 void backForwardGoToItem(const WebCore::BackForwardItemIdentifier&, CompletionHandler<void(SandboxExtension::Handle&&)>&&); -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r244516 r244540 2779 2779 if (auto* provisionalPage = provisionalPageProxy()) { 2780 2780 if (provisionalPage->navigationID() == navigation->navigationID()) { 2781 ASSERT(navigation->currentRequestIsRedirect());2782 2781 sourceProcess = provisionalPage->process(); 2783 2782 sourceURL = provisionalPage->provisionalURL(); … … 4039 4038 } 4040 4039 4041 void WebPageProxy::didFailProvisionalLoadForFrame(uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const String& provisionalURL, const ResourceError& error, const UserData& userData)4040 void WebPageProxy::didFailProvisionalLoadForFrame(uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const String& provisionalURL, const ResourceError& error, WillContinueLoading willContinueLoading, const UserData& userData) 4042 4041 { 4043 4042 if (m_provisionalPage && m_provisionalPage->navigationID() == navigationID) { … … 4046 4045 } 4047 4046 4048 didFailProvisionalLoadForFrameShared(m_process.copyRef(), frameID, frameSecurityOrigin, navigationID, provisionalURL, error, userData);4049 } 4050 4051 void WebPageProxy::didFailProvisionalLoadForFrameShared(Ref<WebProcessProxy>&& process, uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const String& provisionalURL, const ResourceError& error, const UserData& userData)4047 didFailProvisionalLoadForFrameShared(m_process.copyRef(), frameID, frameSecurityOrigin, navigationID, provisionalURL, error, willContinueLoading, userData); 4048 } 4049 4050 void WebPageProxy::didFailProvisionalLoadForFrameShared(Ref<WebProcessProxy>&& process, uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const String& provisionalURL, const ResourceError& error, WillContinueLoading willContinueLoading, const UserData& userData) 4052 4051 { 4053 4052 LOG(Loading, "(Loading) WebPageProxy %" PRIu64 " in web process pid %i didFailProvisionalLoadForFrame to provisionalURL %s", m_pageID, process->processIdentifier(), provisionalURL.utf8().data()); … … 4096 4095 4097 4096 // If the provisional page's load fails then we destroy the provisional page. 4098 if (m_provisionalPage && m_provisionalPage->mainFrame() == frame )4097 if (m_provisionalPage && m_provisionalPage->mainFrame() == frame && willContinueLoading == WillContinueLoading::No) 4099 4098 m_provisionalPage = nullptr; 4100 4099 } … … 4581 4580 } 4582 4581 4583 uint64_t newNavigationID = navigation->navigationID(); 4582 navigationID = navigation->navigationID(); 4583 4584 // Make sure the provisional page always has the latest navigationID. 4585 if (m_provisionalPage && &m_provisionalPage->process() == process.ptr()) 4586 m_provisionalPage->setNavigationID(navigationID); 4587 4584 4588 navigation->setCurrentRequest(ResourceRequest(request), process->coreProcessIdentifier()); 4585 4589 navigation->setLastNavigationAction(navigationActionData); … … 4589 4593 #if ENABLE(CONTENT_FILTERING) 4590 4594 if (frame.didHandleContentFilterUnblockNavigation(request)) 4591 return receivedPolicyDecision(PolicyAction::Ignore, m_navigationState->navigation(newNavigationID), WTF::nullopt, WTFMove(sender)); 4592 #else 4593 UNUSED_PARAM(newNavigationID); 4595 return receivedPolicyDecision(PolicyAction::Ignore, m_navigationState->navigation(navigationID), WTF::nullopt, WTFMove(sender)); 4594 4596 #endif 4595 4597 -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r244516 r244540 1485 1485 // Logic shared between the WebPageProxy and the ProvisionalPageProxy. 1486 1486 void didStartProvisionalLoadForFrameShared(Ref<WebProcessProxy>&&, uint64_t frameID, uint64_t navigationID, URL&&, URL&& unreachableURL, const UserData&); 1487 void didFailProvisionalLoadForFrameShared(Ref<WebProcessProxy>&&, uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const String& provisionalURL, const WebCore::ResourceError&, const UserData&);1487 void didFailProvisionalLoadForFrameShared(Ref<WebProcessProxy>&&, uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const String& provisionalURL, const WebCore::ResourceError&, WebCore::WillContinueLoading, const UserData&); 1488 1488 void didReceiveServerRedirectForProvisionalLoadForFrameShared(Ref<WebProcessProxy>&&, uint64_t frameID, uint64_t navigationID, WebCore::ResourceRequest&&, const UserData&); 1489 1489 void didPerformServerRedirectShared(Ref<WebProcessProxy>&&, const String& sourceURLString, const String& destinationURLString, uint64_t frameID); … … 1587 1587 void didCancelClientRedirectForFrame(uint64_t frameID); 1588 1588 void didChangeProvisionalURLForFrame(uint64_t frameID, uint64_t navigationID, URL&&); 1589 void didFailProvisionalLoadForFrame(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const String& provisionalURL, const WebCore::ResourceError&, const UserData&);1589 void didFailProvisionalLoadForFrame(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const String& provisionalURL, const WebCore::ResourceError&, WebCore::WillContinueLoading, const UserData&); 1590 1590 void didCommitLoadForFrame(uint64_t frameID, uint64_t navigationID, const String& mimeType, bool frameHasCustomContentProvider, uint32_t frameLoadType, const WebCore::CertificateInfo&, bool containsPluginDocument, Optional<WebCore::HasInsecureContent> forcedHasInsecureContent, const UserData&); 1591 1591 void didFinishDocumentLoadForFrame(uint64_t frameID, uint64_t navigationID, const UserData&); -
trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in
r244446 r244540 128 128 DidCancelClientRedirectForFrame(uint64_t frameID) 129 129 DidChangeProvisionalURLForFrame(uint64_t frameID, uint64_t navigationID, URL url) 130 DidFailProvisionalLoadForFrame(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, String provisionalURL, WebCore::ResourceError error, WebKit::UserData userData)130 DidFailProvisionalLoadForFrame(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, String provisionalURL, WebCore::ResourceError error, enum:bool WebCore::WillContinueLoading willContinueLoading, WebKit::UserData userData) 131 131 DidCommitLoadForFrame(uint64_t frameID, uint64_t navigationID, String mimeType, bool hasCustomContentProvider, uint32_t loadType, WebCore::CertificateInfo certificateInfo, bool containsPluginDocument, Optional<WebCore::HasInsecureContent> forcedHasInsecureContent, WebKit::UserData userData) 132 132 DidFailLoadForFrame(uint64_t frameID, uint64_t navigationID, WebCore::ResourceError error, WebKit::UserData userData) -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
r244361 r244540 536 536 } 537 537 538 void WebFrameLoaderClient::dispatchDidFailProvisionalLoad(const ResourceError& error )538 void WebFrameLoaderClient::dispatchDidFailProvisionalLoad(const ResourceError& error, WillContinueLoading willContinueLoading) 539 539 { 540 540 WebPage* webPage = m_frame->page(); … … 565 565 // Notify the UIProcess. 566 566 WebCore::Frame* coreFrame = m_frame ? m_frame->coreFrame() : nullptr; 567 webPage->send(Messages::WebPageProxy::DidFailProvisionalLoadForFrame(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), navigationID, m_frame->coreFrame()->loader().provisionalLoadErrorBeingHandledURL(), error, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())));567 webPage->send(Messages::WebPageProxy::DidFailProvisionalLoadForFrame(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), navigationID, m_frame->coreFrame()->loader().provisionalLoadErrorBeingHandledURL(), error, willContinueLoading, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get()))); 568 568 569 569 // If we have a load listener, notify it. -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.h
r244361 r244540 113 113 void dispatchDidReceiveTitle(const WebCore::StringWithDirection&) final; 114 114 void dispatchDidCommitLoad(Optional<WebCore::HasInsecureContent>) final; 115 void dispatchDidFailProvisionalLoad(const WebCore::ResourceError& ) final;115 void dispatchDidFailProvisionalLoad(const WebCore::ResourceError&, WebCore::WillContinueLoading) final; 116 116 void dispatchDidFailLoad(const WebCore::ResourceError&) final; 117 117 void dispatchDidFinishDocumentLoad() final; -
trunk/Source/WebKitLegacy/mac/ChangeLog
r244471 r244540 1 2019-04-23 Chris Dumez <cdumez@apple.com> 2 3 [Process-Swap-On-Navigation] WebKit hangs when going back to a form submission's page due to Process-Swap-On-Navigation on iOS 12.2 and higher 4 https://bugs.webkit.org/show_bug.cgi?id=197097 5 <rdar://problem/50048318> 6 7 Reviewed by Alex Christensen. 8 9 * WebCoreSupport/WebFrameLoaderClient.h: 10 * WebCoreSupport/WebFrameLoaderClient.mm: 11 (WebFrameLoaderClient::dispatchDidFailProvisionalLoad): 12 1 13 2019-04-18 Daniel Bates <dabates@apple.com> 2 14 -
trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.h
r244161 r244540 118 118 void dispatchDidReceiveTitle(const WebCore::StringWithDirection&) final; 119 119 void dispatchDidCommitLoad(Optional<WebCore::HasInsecureContent>) final; 120 void dispatchDidFailProvisionalLoad(const WebCore::ResourceError& ) final;120 void dispatchDidFailProvisionalLoad(const WebCore::ResourceError&, WebCore::WillContinueLoading) final; 121 121 void dispatchDidFailLoad(const WebCore::ResourceError&) final; 122 122 void dispatchDidFinishDocumentLoad() final; -
trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm
r244161 r244540 725 725 } 726 726 727 void WebFrameLoaderClient::dispatchDidFailProvisionalLoad(const ResourceError& error )727 void WebFrameLoaderClient::dispatchDidFailProvisionalLoad(const ResourceError& error, WillContinueLoading) 728 728 { 729 729 m_webFrame->_private->provisionalURL = nullptr; -
trunk/Source/WebKitLegacy/win/ChangeLog
r244488 r244540 1 2019-04-23 Chris Dumez <cdumez@apple.com> 2 3 [Process-Swap-On-Navigation] WebKit hangs when going back to a form submission's page due to Process-Swap-On-Navigation on iOS 12.2 and higher 4 https://bugs.webkit.org/show_bug.cgi?id=197097 5 <rdar://problem/50048318> 6 7 Reviewed by Alex Christensen. 8 9 * WebCoreSupport/WebFrameLoaderClient.cpp: 10 (WebFrameLoaderClient::dispatchDidFailProvisionalLoad): 11 * WebCoreSupport/WebFrameLoaderClient.h: 12 1 13 2019-04-20 Don Olmstead <don.olmstead@sony.com> 2 14 -
trunk/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.cpp
r244161 r244540 446 446 } 447 447 448 void WebFrameLoaderClient::dispatchDidFailProvisionalLoad(const ResourceError& error )448 void WebFrameLoaderClient::dispatchDidFailProvisionalLoad(const ResourceError& error, WillContinueLoading) 449 449 { 450 450 WebView* webView = m_webFrame->webView(); -
trunk/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.h
r244161 r244540 95 95 void dispatchDidReceiveTitle(const WebCore::StringWithDirection&) override; 96 96 void dispatchDidCommitLoad(Optional<WebCore::HasInsecureContent>) override; 97 void dispatchDidFailProvisionalLoad(const WebCore::ResourceError& ) override;97 void dispatchDidFailProvisionalLoad(const WebCore::ResourceError&, WebCore::WillContinueLoading) override; 98 98 void dispatchDidFailLoad(const WebCore::ResourceError&) override; 99 99 void dispatchDidFinishDocumentLoad() override; -
trunk/Tools/ChangeLog
r244538 r244540 1 2019-04-23 Chris Dumez <cdumez@apple.com> 2 3 [Process-Swap-On-Navigation] WebKit hangs when going back to a form submission's page due to Process-Swap-On-Navigation on iOS 12.2 and higher 4 https://bugs.webkit.org/show_bug.cgi?id=197097 5 <rdar://problem/50048318> 6 7 Reviewed by Alex Christensen. 8 9 Add API test coverage. 10 11 * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: 12 (-[PSONScheme webView:startURLSchemeTask:]): 13 1 14 2019-04-23 Carlos Garcia Campos <cgarcia@igalia.com> 2 15 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm
r244516 r244540 277 277 } 278 278 279 if ([(id<WKURLSchemeTaskPrivate>)task _requestOnlyIfCached]) { 280 [task didFailWithError:[NSError errorWithDomain:@"TestWebKitAPI" code:1 userInfo:nil]]; 281 return; 282 } 283 279 284 RetainPtr<NSURLResponse> response = adoptNS([[NSURLResponse alloc] initWithURL:finalURL MIMEType:@"text/html" expectedContentLength:1 textEncodingName:nil]); 280 285 [task didReceiveResponse:response.get()]; … … 4279 4284 } 4280 4285 4286 static const char* crossSiteFormSubmissionBytes = R"PSONRESOURCE( 4287 <body> 4288 <form action="pson://www.apple.com/main.html" method="post"> 4289 Name: <input type="text" name="name" placeholder="Name"> 4290 <input id="submitButton" type="submit"> 4291 </form> 4292 </body> 4293 )PSONRESOURCE"; 4294 4295 TEST(ProcessSwap, SwapOnFormSubmission) 4296 { 4297 auto processPoolConfiguration = psonProcessPoolConfiguration(); 4298 auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]); 4299 4300 auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]); 4301 [webViewConfiguration setProcessPool:processPool.get()]; 4302 auto handler = adoptNS([[PSONScheme alloc] init]); 4303 [handler addMappingFromURLString:@"pson://www.webkit.org/main.html" toData:crossSiteFormSubmissionBytes]; 4304 [webViewConfiguration setURLSchemeHandler:handler.get() forURLScheme:@"PSON"]; 4305 4306 auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:webViewConfiguration.get()]); 4307 auto navigationDelegate = adoptNS([[PSONNavigationDelegate alloc] init]); 4308 [webView setNavigationDelegate:navigationDelegate.get()]; 4309 4310 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"pson://www.webkit.org/main.html"]]]; 4311 TestWebKitAPI::Util::run(&done); 4312 done = false; 4313 auto webkitPID = [webView _webProcessIdentifier]; 4314 EXPECT_WK_STREQ(@"pson://www.webkit.org/main.html", [[webView URL] absoluteString]); 4315 4316 [webView evaluateJavaScript:@"submitButton.click()" completionHandler:nil]; 4317 TestWebKitAPI::Util::run(&done); 4318 done = false; 4319 auto applePID = [webView _webProcessIdentifier]; 4320 EXPECT_NE(webkitPID, applePID); 4321 EXPECT_WK_STREQ(@"pson://www.apple.com/main.html", [[webView URL] absoluteString]); 4322 4323 [webView reload]; 4324 TestWebKitAPI::Util::run(&done); 4325 done = false; 4326 EXPECT_EQ(applePID, [webView _webProcessIdentifier]); 4327 EXPECT_WK_STREQ(@"pson://www.apple.com/main.html", [[webView URL] absoluteString]); 4328 4329 [webView goBack]; 4330 TestWebKitAPI::Util::run(&done); 4331 done = false; 4332 EXPECT_EQ(webkitPID, [webView _webProcessIdentifier]); 4333 EXPECT_WK_STREQ(@"pson://www.webkit.org/main.html", [[webView URL] absoluteString]); 4334 4335 [webView goForward]; 4336 TestWebKitAPI::Util::run(&done); 4337 done = false; 4338 EXPECT_EQ(applePID, [webView _webProcessIdentifier]); 4339 EXPECT_WK_STREQ(@"pson://www.apple.com/main.html", [[webView URL] absoluteString]); 4340 4341 [webView goBack]; 4342 TestWebKitAPI::Util::run(&done); 4343 done = false; 4344 #if !PLATFORM(IOS_FAMILY) 4345 // This is not guaranteed on iOS because the WebProcess cache is disabled on devices with too little RAM. 4346 EXPECT_EQ(webkitPID, [webView _webProcessIdentifier]); 4347 #else 4348 EXPECT_NE(applePID, [webView _webProcessIdentifier]); 4349 #endif 4350 EXPECT_WK_STREQ(@"pson://www.webkit.org/main.html", [[webView URL] absoluteString]); 4351 } 4281 4352 4282 4353 TEST(ProcessSwap, ClosePageAfterCrossSiteProvisionalLoad)
Note:
See TracChangeset
for help on using the changeset viewer.