Changeset 170660 in webkit
- Timestamp:
- Jul 1, 2014, 1:22:58 PM (11 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r170659 r170660 1 2014-07-01 Dan Bernstein <mitz@apple.com> 2 3 [Cocoa] Navigation parameter in navigation delegate messages is nil for navigations started by the Web Content process 4 https://bugs.webkit.org/show_bug.cgi?id=134482 5 6 Reviewed by Tim Horton. 7 8 * UIProcess/API/APILoaderClient.h: 9 (API::LoaderClient::didDestroyNavigation): New client function, called when a navigation ID 10 is not going to be used anymore. 11 12 * UIProcess/API/Cocoa/WKWebView.mm: 13 (-[WKWebView _restoreFromSessionState:]): If restoring triggered a navigation, create a 14 WKNavigation for its ID. 15 16 * UIProcess/Cocoa/NavigationState.h: 17 * UIProcess/Cocoa/NavigationState.mm: 18 (WebKit::NavigationState::createLoadRequestNavigation): Removed FIXME, because we now remove 19 navigations from the map in LoaderClient::didDestroyNavigation. 20 (WebKit::NavigationState::createBackForwardNavigation): Ditto. 21 (WebKit::NavigationState::createReloadNavigation): Ditto. 22 (WebKit::NavigationState::createLoadDataNavigation): Ditto. 23 (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction): If we are only 24 getting a navigation ID now, create a WKNavigation for it. Also changed to create the 25 NSURLRequest lazily. 26 (WebKit::NavigationState::LoaderClient::didStartProvisionalLoadForFrame): Assert that 27 navigationID is not zero and that it maps to an existing WKNavigation. 28 (WebKit::NavigationState::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame): 29 Ditto. 30 (WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame): Ditto. 31 (WebKit::NavigationState::LoaderClient::didCommitLoadForFrame): Ditto. 32 (WebKit::NavigationState::LoaderClient::didFinishDocumentLoadForFrame): Ditto. 33 (WebKit::NavigationState::LoaderClient::didFinishLoadForFrame): Ditto. 34 (WebKit::NavigationState::LoaderClient::didFailLoadWithErrorForFrame): Ditto. 35 (WebKit::NavigationState::LoaderClient::didDestroyNavigation): Override the new client 36 function to remove the navigation from the map. 37 (WebKit::NavigationState::LoaderClient::processDidCrash): Clear the navigations map. 38 39 * UIProcess/WebFrameListenerProxy.cpp: 40 (WebKit::WebFrameListenerProxy::WebFrameListenerProxy): Initialize new m_navigationID 41 member variable. 42 (WebKit::WebFrameListenerProxy::receivedPolicyDecision): Pass the navigation ID to 43 WebFrame::receivedPolicyDecision. 44 * UIProcess/WebFrameListenerProxy.h: 45 (WebKit::WebFrameListenerProxy::navigationID): Added this accessor. 46 (WebKit::WebFrameListenerProxy::setNavigationID): Ditto. 47 48 * UIProcess/WebFrameProxy.cpp: 49 (WebKit::WebFrameProxy::receivedPolicyDecision): Added navigationID parameter, which is 50 passed along to the WebPageProxy. 51 * UIProcess/WebFrameProxy.h: 52 53 * UIProcess/WebPageProxy.cpp: 54 (WebKit::WebPageProxy::receivedPolicyDecision): Added navigationID parameter, which is 55 passed along in the message to the Web Content process. 56 (WebKit::WebPageProxy::restoreFromSessionStateData): Changed to return a navigation ID of 0. 57 (WebKit::WebPageProxy::restoreFromState): Changed to return a navigation ID if one was 58 started. 59 (WebKit::WebPageProxy::didDestroyNavigation): Added. Calls the new client function. 60 (WebKit::WebPageProxy::decidePolicyForNavigationAction): Added navigationID and 61 newNavigationID parameters. If a main-frame navigation doesn’t already have an ID, assign it 62 a new ID and return it in the newNavigationID parmeter as well as setting it on the listener 63 for the asynchronous case. 64 * UIProcess/WebPageProxy.h: 65 66 * UIProcess/WebPageProxy.messages.in: Added navigationID and newNavigationID parameters. 67 68 * UIProcess/cf/WebPageProxyCF.cpp: 69 (WebKit::WebPageProxy::restoreFromSessionStateData): Changed to return a navigation ID if 70 one was started. 71 72 * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: 73 (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse): Updated for additional 74 parameter. 75 (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Send the navigation 76 ID to the UI process, get the new navigation ID from the reply, and set it on the document 77 loader. 78 79 * WebProcess/WebPage/WebDocumentLoader.cpp: 80 (WebKit::WebDocumentLoader::detachFromFrame): Override to let the UI process know that the 81 navigation ID will not be used anymore. 82 * WebProcess/WebPage/WebDocumentLoader.h: 83 84 * WebProcess/WebPage/WebFrame.cpp: 85 (WebKit::WebFrame::didReceivePolicyDecision): Added navigationID parameter, set it on the 86 document loader. 87 (WebKit::WebFrame::documentLoaderDetached): Pass the message along to the UI process. 88 * WebProcess/WebPage/WebFrame.h: 89 90 * WebProcess/WebPage/WebPage.cpp: 91 (WebKit::WebPage::didReceivePolicyDecision): Pass new navigationID parameter along. 92 * WebProcess/WebPage/WebPage.h: 93 94 * WebProcess/WebPage/WebPage.messages.in: Added navigationID parameter. 95 1 96 2014-07-01 Anders Carlsson <andersca@apple.com> 2 97 -
trunk/Source/WebKit2/UIProcess/API/APILoaderClient.h
r168407 r170660 66 66 virtual void didReceiveTitleForFrame(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, API::Object*) { } 67 67 virtual void didFirstLayoutForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, API::Object*) { } 68 virtual void didDestroyNavigation(WebKit::WebPageProxy*, uint64_t navigationID) { } 68 69 69 70 // FIXME: We should consider removing didFirstVisuallyNonEmptyLayoutForFrame since it is replaced by didLayout. -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm
r170644 r170660 1572 1572 { 1573 1573 [sessionState retain]; 1574 _page->restoreFromSessionStateData(API::Data::createWithoutCopying((const unsigned char*)sessionState.bytes, sessionState.length, releaseNSData, sessionState).get()); 1574 uint64_t navigationID = _page->restoreFromSessionStateData(API::Data::createWithoutCopying((const unsigned char*)sessionState.bytes, sessionState.length, releaseNSData, sessionState).get()); 1575 if (navigationID) 1576 _navigationState->createReloadNavigation(navigationID); 1575 1577 } 1576 1578 -
trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h
r170137 r170660 103 103 virtual void didFinishLoadForFrame(WebPageProxy*, WebFrameProxy*, uint64_t navigationID, API::Object*) override; 104 104 virtual void didFailLoadWithErrorForFrame(WebPageProxy*, WebFrameProxy*, uint64_t navigationID, const WebCore::ResourceError&, API::Object*) override; 105 virtual void didDestroyNavigation(WebKit::WebPageProxy*, uint64_t navigationID) override; 105 106 virtual void didLayout(WebKit::WebPageProxy*, WebCore::LayoutMilestones, API::Object*) override; 106 107 virtual bool canAuthenticateAgainstProtectionSpaceInFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, WebKit::WebProtectionSpace*) override; -
trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm
r170322 r170660 43 43 #import "WKNSURLExtras.h" 44 44 #import "WKNSURLProtectionSpace.h" 45 #import "WKNSURLRequest.h" 45 46 #import "WKNavigationActionInternal.h" 46 47 #import "WKNavigationDataInternal.h" … … 164 165 [navigation setRequest:request]; 165 166 166 // FIXME: We need to remove the navigation when we're done with it!167 167 m_navigations.set(navigationID, navigation); 168 168 … … 176 176 auto navigation = adoptNS([[WKNavigation alloc] init]); 177 177 178 // FIXME: We need to remove the navigation when we're done with it!179 178 m_navigations.set(navigationID, navigation); 180 179 … … 188 187 auto navigation = adoptNS([[WKNavigation alloc] init]); 189 188 190 // FIXME: We need to remove the navigation when we're done with it!191 189 m_navigations.set(navigationID, navigation); 192 190 … … 200 198 auto navigation = adoptNS([[WKNavigation alloc] init]); 201 199 202 // FIXME: We need to remove the navigation when we're done with it!203 200 m_navigations.set(navigationID, navigation); 204 201 … … 265 262 void NavigationState::PolicyClient::decidePolicyForNavigationAction(WebPageProxy*, WebFrameProxy* destinationFrame, const NavigationActionData& navigationActionData, WebFrameProxy* sourceFrame, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest& request, RefPtr<WebFramePolicyListenerProxy> listener, API::Object* userData) 266 263 { 264 RetainPtr<NSURLRequest> nsURLRequest = adoptNS(wrapper(*API::URLRequest::create(request).leakRef())); 265 266 if (listener->navigationID()) 267 m_navigationState.createLoadRequestNavigation(listener->navigationID(), nsURLRequest.get()); 268 267 269 if (!m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler) { 268 270 if (!destinationFrame) { … … 271 273 } 272 274 273 NSURLRequest *nsURLRequest = request.nsURLRequest(WebCore::DoNotUpdateHTTPBody); 274 if ([NSURLConnection canHandleRequest:nsURLRequest]) { 275 if ([NSURLConnection canHandleRequest:nsURLRequest.get()]) { 275 276 listener->use(); 276 277 return; … … 280 281 // A file URL shouldn't fall through to here, but if it did, 281 282 // it would be a security risk to open it. 282 if (![ nsURLRequest.URLisFileURL])283 [[NSWorkspace sharedWorkspace] openURL: nsURLRequest.URL];283 if (![[nsURLRequest URL] isFileURL]) 284 [[NSWorkspace sharedWorkspace] openURL:[nsURLRequest URL]]; 284 285 #endif 285 286 listener->ignore(); … … 303 304 } 304 305 305 [navigationAction setRequest: request.nsURLRequest(WebCore::DoNotUpdateHTTPBody)];306 [navigationAction setRequest:nsURLRequest.get()]; 306 307 [navigationAction _setOriginalURL:originalRequest.url()]; 307 308 … … 413 414 return; 414 415 415 // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process. 416 WKNavigation *navigation = nil; 417 if (navigationID) 418 navigation = m_navigationState.m_navigations.get(navigationID).get(); 416 ASSERT(navigationID); 417 WKNavigation *navigation = m_navigationState.m_navigations.get(navigationID).get(); 418 ASSERT(navigation); 419 419 420 420 [navigationDelegate webView:m_navigationState.m_webView didStartProvisionalNavigation:navigation]; … … 433 433 return; 434 434 435 // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process. 436 WKNavigation *navigation = nil; 437 if (navigationID) 438 navigation = m_navigationState.m_navigations.get(navigationID).get(); 435 ASSERT(navigationID); 436 WKNavigation *navigation = m_navigationState.m_navigations.get(navigationID).get(); 437 ASSERT(navigation); 439 438 440 439 [navigationDelegate webView:m_navigationState.m_webView didReceiveServerRedirectForProvisionalNavigation:navigation]; … … 469 468 } 470 469 471 // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process. 472 RetainPtr<WKNavigation> navigation; 473 if (navigationID) 474 navigation = m_navigationState.m_navigations.take(navigationID); 470 ASSERT(navigationID); 471 RetainPtr<WKNavigation> navigation = m_navigationState.m_navigations.take(navigationID).get(); 472 ASSERT(navigation); 475 473 476 474 // FIXME: Set the error on the navigation object. … … 499 497 return; 500 498 501 // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process. 502 WKNavigation *navigation = nil; 503 if (navigationID) 504 navigation = m_navigationState.m_navigations.get(navigationID).get(); 499 ASSERT(navigationID); 500 WKNavigation *navigation = m_navigationState.m_navigations.get(navigationID).get(); 501 ASSERT(navigation); 505 502 506 503 [navigationDelegate webView:m_navigationState.m_webView didCommitNavigation:navigation]; … … 519 516 return; 520 517 521 WKNavigation *navigation = nil;522 if (navigationID)523 navigation = m_navigationState.m_navigations.get(navigationID).get();518 ASSERT(navigationID); 519 WKNavigation *navigation = m_navigationState.m_navigations.get(navigationID).get(); 520 ASSERT(navigation); 524 521 525 522 [static_cast<id <WKNavigationDelegatePrivate>>(navigationDelegate.get()) _webView:m_navigationState.m_webView navigationDidFinishDocumentLoad:navigation]; … … 538 535 return; 539 536 540 // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process. 541 WKNavigation *navigation = nil; 542 if (navigationID) 543 navigation = m_navigationState.m_navigations.get(navigationID).get(); 537 ASSERT(navigationID); 538 WKNavigation *navigation = m_navigationState.m_navigations.get(navigationID).get(); 539 ASSERT(navigation); 544 540 545 541 [navigationDelegate webView:m_navigationState.m_webView didFinishNavigation:navigation]; … … 558 554 return; 559 555 560 // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process. 561 WKNavigation *navigation = nil; 562 if (navigationID) 563 navigation = m_navigationState.m_navigations.get(navigationID).get(); 556 ASSERT(navigationID); 557 WKNavigation *navigation = m_navigationState.m_navigations.get(navigationID).get(); 558 ASSERT(navigation); 564 559 565 560 auto errorWithRecoveryAttempter = createErrorWithRecoveryAttempter(m_navigationState.m_webView, *webFrameProxy, error); 566 561 [navigationDelegate webView:m_navigationState.m_webView didFailNavigation:navigation withError:errorWithRecoveryAttempter.get()]; 562 } 563 564 void NavigationState::LoaderClient::didDestroyNavigation(WebPageProxy*, uint64_t navigationID) 565 { 566 m_navigationState.m_navigations.remove(navigationID); 567 567 } 568 568 … … 667 667 void NavigationState::LoaderClient::processDidCrash(WebKit::WebPageProxy*) 668 668 { 669 m_navigationState.m_navigations.clear(); 670 669 671 if (!m_navigationState.m_navigationDelegateMethods.webViewWebProcessDidCrash) 670 672 return; -
trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp
r95901 r170660 34 34 : m_frame(frame) 35 35 , m_listenerID(listenerID) 36 , m_navigationID(0) 36 37 { 37 38 } … … 51 52 return; 52 53 53 m_frame->receivedPolicyDecision(action, m_listenerID );54 m_frame->receivedPolicyDecision(action, m_listenerID, m_navigationID); 54 55 m_frame = 0; 55 56 } -
trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.h
r159163 r170660 43 43 uint64_t listenerID() const { return m_listenerID; } 44 44 45 uint64_t navigationID() const { return m_navigationID; } 46 void setNavigationID(uint64_t navigationID) { m_navigationID = navigationID; } 47 45 48 protected: 46 49 WebFrameListenerProxy(WebFrameProxy*, uint64_t listenerID); … … 51 54 RefPtr<WebFrameProxy> m_frame; 52 55 uint64_t m_listenerID; 56 uint64_t m_navigationID; 53 57 }; 54 58 -
trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp
r170000 r170660 170 170 } 171 171 172 void WebFrameProxy::receivedPolicyDecision(WebCore::PolicyAction action, uint64_t listenerID )172 void WebFrameProxy::receivedPolicyDecision(WebCore::PolicyAction action, uint64_t listenerID, uint64_t navigationID) 173 173 { 174 174 if (!m_page) … … 177 177 ASSERT(m_activeListener); 178 178 ASSERT(m_activeListener->listenerID() == listenerID); 179 m_page->receivedPolicyDecision(action, this, listenerID );179 m_page->receivedPolicyDecision(action, this, listenerID, navigationID); 180 180 } 181 181 -
trunk/Source/WebKit2/UIProcess/WebFrameProxy.h
r170000 r170660 110 110 111 111 // Policy operations. 112 void receivedPolicyDecision(WebCore::PolicyAction, uint64_t listenerID );112 void receivedPolicyDecision(WebCore::PolicyAction, uint64_t listenerID, uint64_t navigationID = 0); 113 113 WebFramePolicyListenerProxy* setUpPolicyListenerProxy(uint64_t listenerID); 114 114 WebFormSubmissionListenerProxy* setUpFormSubmissionListenerProxy(uint64_t listenerID); -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r170644 r170660 1709 1709 } 1710 1710 1711 void WebPageProxy::receivedPolicyDecision(PolicyAction action, WebFrameProxy* frame, uint64_t listenerID )1711 void WebPageProxy::receivedPolicyDecision(PolicyAction action, WebFrameProxy* frame, uint64_t listenerID, uint64_t navigationID) 1712 1712 { 1713 1713 if (!isValid()) … … 1745 1745 } 1746 1746 1747 m_process->send(Messages::WebPage::DidReceivePolicyDecision(frame->frameID(), listenerID, action, downloadID), m_pageID);1747 m_process->send(Messages::WebPage::DidReceivePolicyDecision(frame->frameID(), listenerID, action, navigationID, downloadID), m_pageID); 1748 1748 } 1749 1749 … … 1841 1841 } 1842 1842 1843 voidWebPageProxy::restoreFromSessionStateData(API::Data*)1843 uint64_t WebPageProxy::restoreFromSessionStateData(API::Data*) 1844 1844 { 1845 1845 // FIXME: Restore the Page from the passed in session state data. 1846 } 1847 #endif 1848 1849 void WebPageProxy::restoreFromState(SessionState sessionState) 1846 return 0; 1847 } 1848 #endif 1849 1850 uint64_t WebPageProxy::restoreFromState(SessionState sessionState) 1850 1851 { 1851 1852 m_backForwardList->restoreFromState(std::move(sessionState.backForwardListState)); … … 1856 1857 // FIXME: Navigating should be separate from state restoration. 1857 1858 1858 if (!sessionState.provisionalURL.isNull()) { 1859 loadRequest(sessionState.provisionalURL); 1860 return; 1861 } 1859 if (!sessionState.provisionalURL.isNull()) 1860 return loadRequest(sessionState.provisionalURL); 1862 1861 1863 1862 if (WebBackForwardListItem* item = m_backForwardList->currentItem()) 1864 goToBackForwardItem(item); 1863 return goToBackForwardItem(item); 1864 1865 return 0; 1865 1866 } 1866 1867 … … 2427 2428 m_pageLoadState.commitChanges(); 2428 2429 m_loaderClient->didFinishProgress(this); 2430 } 2431 2432 void WebPageProxy::didDestroyNavigation(uint64_t navigationID) 2433 { 2434 m_loaderClient->didDestroyNavigation(this, navigationID); 2429 2435 } 2430 2436 … … 2773 2779 } 2774 2780 2775 void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, const NavigationActionData& navigationActionData, uint64_t originatingFrameID, const WebCore::ResourceRequest& originalRequest, const ResourceRequest& request, uint64_t listenerID, IPC::MessageDecoder& decoder, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID)2781 void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, uint64_t navigationID, const NavigationActionData& navigationActionData, uint64_t originatingFrameID, const WebCore::ResourceRequest& originalRequest, const ResourceRequest& request, uint64_t listenerID, IPC::MessageDecoder& decoder, bool& receivedPolicyAction, uint64_t& newNavigationID, uint64_t& policyAction, uint64_t& downloadID) 2776 2782 { 2777 2783 RefPtr<API::Object> userData; … … 2793 2799 2794 2800 RefPtr<WebFramePolicyListenerProxy> listener = frame->setUpPolicyListenerProxy(listenerID); 2801 if (!navigationID && frame->isMainFrame()) { 2802 newNavigationID = generateNavigationID(); 2803 listener->setNavigationID(newNavigationID); 2804 } 2795 2805 2796 2806 ASSERT(!m_inDecidePolicyForNavigationAction); -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r170644 r170660 552 552 553 553 PassRefPtr<API::Data> sessionStateData(std::function<bool (WebBackForwardListItem&)>) const; 554 voidrestoreFromSessionStateData(API::Data*);555 voidrestoreFromState(SessionState);554 uint64_t restoreFromSessionStateData(API::Data*); 555 uint64_t restoreFromState(SessionState); 556 556 557 557 bool supportsTextZoom() const; … … 679 679 #endif 680 680 681 void receivedPolicyDecision(WebCore::PolicyAction, WebFrameProxy*, uint64_t listenerID );681 void receivedPolicyDecision(WebCore::PolicyAction, WebFrameProxy*, uint64_t listenerID, uint64_t navigationID); 682 682 683 683 void backForwardRemovedItem(uint64_t itemID); … … 958 958 void didChangeProgress(double); 959 959 void didFinishProgress(); 960 961 void decidePolicyForNavigationAction(uint64_t frameID, const NavigationActionData&, uint64_t originatingFrameID, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, uint64_t listenerID, IPC::MessageDecoder&, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID); 960 void didDestroyNavigation(uint64_t navigationID); 961 962 void decidePolicyForNavigationAction(uint64_t frameID, uint64_t navigationID, const NavigationActionData&, uint64_t originatingFrameID, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, uint64_t listenerID, IPC::MessageDecoder&, bool& receivedPolicyAction, uint64_t& newNavigationID, uint64_t& policyAction, uint64_t& downloadID); 962 963 void decidePolicyForNewWindowAction(uint64_t frameID, const NavigationActionData&, const WebCore::ResourceRequest&, const String& frameName, uint64_t listenerID, IPC::MessageDecoder&); 963 964 void decidePolicyForResponse(uint64_t frameID, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, IPC::MessageDecoder&); -
trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in
r170447 r170660 111 111 # Policy messages 112 112 DecidePolicyForResponseSync(uint64_t frameID, WebCore::ResourceResponse response, WebCore::ResourceRequest request, bool canShowMIMEType, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) -> (bool receivedPolicyAction, uint64_t policyAction, uint64_t downloadID) Variadic 113 DecidePolicyForNavigationAction(uint64_t frameID, WebKit::NavigationActionData navigationActionData, uint64_t originatingFrameID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) -> (bool receivedPolicyAction, uint64_t policyAction, uint64_t downloadID) Variadic113 DecidePolicyForNavigationAction(uint64_t frameID, uint64_t navigationID, WebKit::NavigationActionData navigationActionData, uint64_t originatingFrameID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) -> (bool receivedPolicyAction, uint64_t newNavigationID, uint64_t policyAction, uint64_t downloadID) Variadic 114 114 DecidePolicyForNewWindowAction(uint64_t frameID, WebKit::NavigationActionData navigationActionData, WebCore::ResourceRequest request, String frameName, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic 115 115 UnableToImplementPolicy(uint64_t frameID, WebCore::ResourceError error, WebKit::InjectedBundleUserMessageEncoder userData) Variadic … … 141 141 DidDetectXSSForFrame(uint64_t frameID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic 142 142 DidSameDocumentNavigationForFrame(uint64_t frameID, uint32_t type, String url, WebKit::InjectedBundleUserMessageEncoder userData) Variadic 143 DidDestroyNavigation(uint64_t navigationID) 143 144 144 145 FrameDidBecomeFrameSet(uint64_t frameID, bool value) -
trunk/Source/WebKit2/UIProcess/cf/WebPageProxyCF.cpp
r170644 r170660 105 105 } 106 106 107 voidWebPageProxy::restoreFromSessionStateData(API::Data* apiData)107 uint64_t WebPageProxy::restoreFromSessionStateData(API::Data* apiData) 108 108 { 109 109 if (!apiData || apiData->size() < sizeof(UInt32)) 110 return ;110 return 0; 111 111 112 112 const unsigned char* buffer = apiData->bytes(); … … 115 115 if (versionHeader != CurrentSessionStateDataVersion) { 116 116 LOG(SessionState, "Unrecognized version header for session state data - cannot restore"); 117 return ;117 return 0; 118 118 } 119 119 … … 125 125 CFRelease(propertyListError); 126 126 LOG(SessionState, "Could not read session state property list"); 127 return ;127 return 0; 128 128 } 129 129 130 130 if (!propertyList) 131 return ;131 return 0; 132 132 133 133 if (CFGetTypeID(propertyList.get()) != CFDictionaryGetTypeID()) { 134 134 LOG(SessionState, "SessionState property list is not a CFDictionaryRef (%i) - its CFTypeID is %i", (int)CFDictionaryGetTypeID(), (int)CFGetTypeID(propertyList.get())); 135 return ;135 return 0; 136 136 } 137 137 … … 170 170 m_pageLoadState.setPendingAPIRequestURL(transaction, item->url()); 171 171 172 process().send(Messages::WebPage::RestoreSessionAndNavigateToCurrentItem(generateNavigationID(), state), m_pageID); 172 uint64_t navigationID = generateNavigationID(); 173 process().send(Messages::WebPage::RestoreSessionAndNavigateToCurrentItem(navigationID, state), m_pageID); 174 return navigationID; 173 175 } 174 176 } … … 177 179 178 180 if (provisionalURL) 179 loadRequest(URL(URL(), provisionalURL)); 181 return loadRequest(URL(URL(), provisionalURL)); 182 183 return 0; 180 184 } 181 185 -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
r170330 r170660 671 671 // We call this synchronously because CFNetwork can only convert a loading connection to a download from its didReceiveResponse callback. 672 672 if (receivedPolicyAction) 673 m_frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), downloadID);673 m_frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), 0, downloadID); 674 674 } 675 675 … … 730 730 uint64_t listenerID = m_frame->setUpPolicyListener(std::move(function)); 731 731 bool receivedPolicyAction; 732 uint64_t newNavigationID; 732 733 uint64_t policyAction; 733 734 uint64_t downloadID; … … 761 762 navigationActionData.canHandleRequest = webPage->canHandleRequest(request); 762 763 764 WebCore::Frame* coreFrame = m_frame->coreFrame(); 765 WebDocumentLoader* documentLoader = static_cast<WebDocumentLoader*>(coreFrame->loader().policyDocumentLoader()); 766 if (!documentLoader) 767 documentLoader = static_cast<WebDocumentLoader*>(coreFrame->loader().documentLoader()); 768 763 769 // Notify the UIProcess. 764 if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), navigationActionData, originatingFrame ? originatingFrame->frameID() : 0, navigationAction.resourceRequest(), request, listenerID, InjectedBundleUserMessageEncoder(userData.get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(receivedPolicyAction, policyAction, downloadID)))770 if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), documentLoader->navigationID(), navigationActionData, originatingFrame ? originatingFrame->frameID() : 0, navigationAction.resourceRequest(), request, listenerID, InjectedBundleUserMessageEncoder(userData.get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(receivedPolicyAction, newNavigationID, policyAction, downloadID))) 765 771 return; 766 772 767 773 // We call this synchronously because WebCore cannot gracefully handle a frame load without a synchronous navigation policy reply. 768 774 if (receivedPolicyAction) 769 m_frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), downloadID);775 m_frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), newNavigationID, downloadID); 770 776 } 771 777 -
trunk/Source/WebKit2/WebProcess/WebPage/WebDocumentLoader.cpp
r162981 r170660 27 27 #include "WebDocumentLoader.h" 28 28 29 #include "WebFrame.h" 30 29 31 using namespace WebCore; 30 32 … … 35 37 , m_navigationID(0) 36 38 { 39 } 40 41 void WebDocumentLoader::detachFromFrame() 42 { 43 if (m_navigationID) 44 WebFrame::fromCoreFrame(*frame())->documentLoaderDetached(m_navigationID); 45 46 m_navigationID = 0; 47 48 DocumentLoader::detachFromFrame(); 37 49 } 38 50 -
trunk/Source/WebKit2/WebProcess/WebPage/WebDocumentLoader.h
r162981 r170660 44 44 WebDocumentLoader(const WebCore::ResourceRequest&, const WebCore::SubstituteData&); 45 45 46 virtual void detachFromFrame() override; 47 46 48 uint64_t m_navigationID; 47 49 }; -
trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp
r170650 r170660 37 37 #include "WKBundleAPICast.h" 38 38 #include "WebChromeClient.h" 39 #include "WebDocumentLoader.h" 39 40 #include "WebPage.h" 40 41 #include "WebPageProxyMessages.h" … … 216 217 } 217 218 218 void WebFrame::didReceivePolicyDecision(uint64_t listenerID, PolicyAction action, uint64_t downloadID)219 void WebFrame::didReceivePolicyDecision(uint64_t listenerID, PolicyAction action, uint64_t navigationID, uint64_t downloadID) 219 220 { 220 221 if (!m_coreFrame) … … 234 235 235 236 m_policyDownloadID = downloadID; 237 if (navigationID) { 238 WebDocumentLoader& documentLoader = static_cast<WebDocumentLoader&>(*m_coreFrame->loader().policyDocumentLoader()); 239 documentLoader.setNavigationID(navigationID); 240 } 241 236 242 function(action); 237 243 } … … 752 758 } 753 759 760 void WebFrame::documentLoaderDetached(uint64_t navigationID) 761 { 762 page()->send(Messages::WebPageProxy::DidDestroyNavigation(navigationID)); 763 } 764 754 765 #if PLATFORM(COCOA) 755 766 RetainPtr<CFDataRef> WebFrame::webArchiveData(FrameFilterFunction callback, void* context) -
trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.h
r170650 r170660 78 78 uint64_t setUpPolicyListener(WebCore::FramePolicyFunction); 79 79 void invalidatePolicyListener(); 80 void didReceivePolicyDecision(uint64_t listenerID, WebCore::PolicyAction, uint64_t downloadID);80 void didReceivePolicyDecision(uint64_t listenerID, WebCore::PolicyAction, uint64_t navigationID, uint64_t downloadID); 81 81 82 82 void startDownload(const WebCore::ResourceRequest&); … … 132 132 void setTextDirection(const String&); 133 133 134 void documentLoaderDetached(uint64_t navigationID); 135 134 136 // Simple listener class used by plug-ins to know when frames finish or fail loading. 135 137 class LoadListener { -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r170641 r170660 2255 2255 } 2256 2256 2257 void WebPage::didReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t downloadID)2257 void WebPage::didReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t navigationID, uint64_t downloadID) 2258 2258 { 2259 2259 WebFrame* frame = WebProcess::shared().webFrame(frameID); 2260 2260 if (!frame) 2261 2261 return; 2262 frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), downloadID);2262 frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), navigationID, downloadID); 2263 2263 } 2264 2264 -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h
r170652 r170660 960 960 void updatePreferences(const WebPreferencesStore&); 961 961 962 void didReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t downloadID);962 void didReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t navigationID, uint64_t downloadID); 963 963 void setUserAgent(const String&); 964 964 void setCustomTextEncodingName(const String&); -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
r170447 r170660 135 135 DidRemoveBackForwardItem(uint64_t backForwardItemID) 136 136 137 DidReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t downloadID)137 DidReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t navigationID, uint64_t downloadID) 138 138 139 139 ClearSelection()
Note:
See TracChangeset
for help on using the changeset viewer.