Changeset 171027 in webkit
- Timestamp:
- Jul 12, 2014 1:40:17 PM (10 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r171024 r171027 1 2014-07-12 Dan Bernstein <mitz@apple.com> 2 3 [Cocoa] Client is not notified of same-document navigations 4 https://bugs.webkit.org/show_bug.cgi?id=134855 5 6 Reviewed by Sam Weinig. 7 8 * UIProcess/API/APILoaderClient.h: 9 (API::LoaderClient::didSameDocumentNavigationForFrame): Added navigationID parameter. 10 11 * UIProcess/API/C/WKPage.cpp: 12 (WKPageSetPageLoaderClient): Ditto. 13 14 * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h: Added new enum and delegate method. 15 16 * UIProcess/Cocoa/NavigationState.h: Declare override of 17 API::LoaderClient::didSameDocumentNavigationForFrame. Added flag in 18 m_navigationDelegateMethods struct. 19 * UIProcess/Cocoa/NavigationState.mm: 20 (WebKit::NavigationState::setNavigationDelegate): Initialize new m_navigationDelegateMethods 21 flag. 22 (WebKit::toWKSameDocumentNavigationType): Added this helper to convert from internal to API 23 values. 24 (WebKit::NavigationState::LoaderClient::didSameDocumentNavigationForFrame): Override to call 25 the delegate method, if implemented. 26 27 * UIProcess/WebPageProxy.cpp: 28 (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): Added navigationID parameter, 29 which is forwarded to the client. 30 * UIProcess/WebPageProxy.h: Added navigationID parameter. 31 * UIProcess/WebPageProxy.messages.in: Ditto. 32 33 * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: 34 (WebKit::WebFrameLoaderClient::dispatchDidChangeLocationWithinPage): Send the navigation ID. 35 (WebKit::WebFrameLoaderClient::dispatchDidPushStateWithinPage): Ditto. 36 (WebKit::WebFrameLoaderClient::dispatchDidReplaceStateWithinPage): Ditto. 37 (WebKit::WebFrameLoaderClient::dispatchDidPopStateWithinPage): Ditto. 38 1 39 2014-07-12 Oliver Hunt <oliver@apple.com> 2 40 -
trunk/Source/WebKit2/UIProcess/API/APILoaderClient.h
r170673 r171027 63 63 virtual void didFinishLoadForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, uint64_t, API::Object*) { } 64 64 virtual void didFailLoadWithErrorForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, uint64_t, const WebCore::ResourceError&, API::Object*) { } 65 virtual void didSameDocumentNavigationForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, WebKit::SameDocumentNavigationType, API::Object*) { }65 virtual void didSameDocumentNavigationForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, uint64_t, WebKit::SameDocumentNavigationType, API::Object*) { } 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*) { } -
trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp
r170856 r171027 836 836 } 837 837 838 virtual void didSameDocumentNavigationForFrame(WebPageProxy* page, WebFrameProxy* frame, SameDocumentNavigationType type, API::Object* userData) override838 virtual void didSameDocumentNavigationForFrame(WebPageProxy* page, WebFrameProxy* frame, uint64_t, SameDocumentNavigationType type, API::Object* userData) override 839 839 { 840 840 if (!m_client.didSameDocumentNavigationForFrame) -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h
r170157 r171027 35 35 static const WKNavigationResponsePolicy _WKNavigationResponsePolicyBecomeDownload = (WKNavigationResponsePolicy)(WKNavigationResponsePolicyAllow + 1); 36 36 37 typedef NS_ENUM(NSInteger, _WKSameDocumentNavigationType) { 38 _WKSameDocumentNavigationTypeAnchorNavigation, 39 _WKSameDocumentNavigationTypeSessionStatePush, 40 _WKSameDocumentNavigationTypeSessionStateReplace, 41 _WKSameDocumentNavigationTypeSessionStatePop, 42 } WK_AVAILABLE(10_10, 8_0); 43 37 44 @protocol WKNavigationDelegatePrivate <WKNavigationDelegate> 38 45 … … 42 49 43 50 - (void)_webView:(WKWebView *)webView navigationDidFinishDocumentLoad:(WKNavigation *)navigation; 51 - (void)_webView:(WKWebView *)webView navigation:(WKNavigation *)navigation didSameDocumentNavigation:(_WKSameDocumentNavigationType)navigationType; 44 52 45 53 - (void)_webView:(WKWebView *)webView renderingProgressDidChange:(_WKRenderingProgressEvents)progressEvents; -
trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h
r170776 r171027 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 didSameDocumentNavigationForFrame(WebPageProxy*, WebFrameProxy*, uint64_t navigationID, SameDocumentNavigationType, API::Object*) override; 105 106 virtual void didDestroyNavigation(WebKit::WebPageProxy*, uint64_t navigationID) override; 106 107 virtual void didLayout(WebKit::WebPageProxy*, WebCore::LayoutMilestones, API::Object*) override; … … 150 151 bool webViewDidFinishNavigation : 1; 151 152 bool webViewDidFailNavigationWithError : 1; 153 bool webViewNavigationDidSameDocumentNavigation : 1; 152 154 153 155 bool webViewRenderingProgressDidChange : 1; -
trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm
r170845 r171027 131 131 m_navigationDelegateMethods.webViewNavigationDidFailProvisionalLoadInSubframeWithError = [delegate respondsToSelector:@selector(_webView:navigation:didFailProvisionalLoadInSubframe:withError:)]; 132 132 m_navigationDelegateMethods.webViewNavigationDidFinishDocumentLoad = [delegate respondsToSelector:@selector(_webView:navigationDidFinishDocumentLoad:)]; 133 m_navigationDelegateMethods.webViewNavigationDidSameDocumentNavigation = [delegate respondsToSelector:@selector(_webView:navigation:didSameDocumentNavigation:)]; 133 134 m_navigationDelegateMethods.webViewRenderingProgressDidChange = [delegate respondsToSelector:@selector(_webView:renderingProgressDidChange:)]; 134 135 m_navigationDelegateMethods.webViewDidReceiveAuthenticationChallengeCompletionHandler = [delegate respondsToSelector:@selector(webView:didReceiveAuthenticationChallenge:completionHandler:)]; … … 569 570 } 570 571 572 static _WKSameDocumentNavigationType toWKSameDocumentNavigationType(SameDocumentNavigationType navigationType) 573 { 574 switch (navigationType) { 575 case SameDocumentNavigationAnchorNavigation: 576 return _WKSameDocumentNavigationTypeAnchorNavigation; 577 case SameDocumentNavigationSessionStatePush: 578 return _WKSameDocumentNavigationTypeSessionStatePush; 579 case SameDocumentNavigationSessionStateReplace: 580 return _WKSameDocumentNavigationTypeSessionStateReplace; 581 case SameDocumentNavigationSessionStatePop: 582 return _WKSameDocumentNavigationTypeSessionStatePop; 583 } 584 585 ASSERT_NOT_REACHED(); 586 return _WKSameDocumentNavigationTypeAnchorNavigation; 587 } 588 589 void NavigationState::LoaderClient::didSameDocumentNavigationForFrame(WebPageProxy*, WebFrameProxy* webFrameProxy, uint64_t navigationID, SameDocumentNavigationType navigationType, API::Object*) 590 { 591 if (!webFrameProxy->isMainFrame()) 592 return; 593 594 if (!m_navigationState.m_navigationDelegateMethods.webViewNavigationDidSameDocumentNavigation) 595 return; 596 597 auto navigationDelegate = m_navigationState.m_navigationDelegate.get(); 598 if (!navigationDelegate) 599 return; 600 601 // FIXME: We should assert that navigationID is not zero here, but it's currently zero for some navigations through the page cache. 602 WKNavigation *navigation = nil; 603 if (navigationID) 604 navigation = m_navigationState.m_navigations.get(navigationID).get(); 605 606 [static_cast<id <WKNavigationDelegatePrivate>>(navigationDelegate.get()) _webView:m_navigationState.m_webView navigation:navigation didSameDocumentNavigation:toWKSameDocumentNavigationType(navigationType)]; 607 } 608 571 609 void NavigationState::LoaderClient::didDestroyNavigation(WebPageProxy*, uint64_t navigationID) 572 610 { -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r170981 r171027 2684 2684 } 2685 2685 2686 void WebPageProxy::didSameDocumentNavigationForFrame(uint64_t frameID, uint 32_t opaqueSameDocumentNavigationType, const String& url, IPC::MessageDecoder& decoder)2686 void WebPageProxy::didSameDocumentNavigationForFrame(uint64_t frameID, uint64_t navigationID, uint32_t opaqueSameDocumentNavigationType, const String& url, IPC::MessageDecoder& decoder) 2687 2687 { 2688 2688 RefPtr<API::Object> userData; … … 2704 2704 2705 2705 m_pageLoadState.commitChanges(); 2706 m_loaderClient->didSameDocumentNavigationForFrame(this, frame, static_cast<SameDocumentNavigationType>(opaqueSameDocumentNavigationType), userData.get());2706 m_loaderClient->didSameDocumentNavigationForFrame(this, frame, navigationID, static_cast<SameDocumentNavigationType>(opaqueSameDocumentNavigationType), userData.get()); 2707 2707 } 2708 2708 -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r170981 r171027 944 944 void didFinishLoadForFrame(uint64_t frameID, uint64_t navigationID, IPC::MessageDecoder&); 945 945 void didFailLoadForFrame(uint64_t frameID, uint64_t navigationID, const WebCore::ResourceError&, IPC::MessageDecoder&); 946 void didSameDocumentNavigationForFrame(uint64_t frameID, uint 32_t sameDocumentNavigationType, const String&, IPC::MessageDecoder&);946 void didSameDocumentNavigationForFrame(uint64_t frameID, uint64_t navigationID, uint32_t sameDocumentNavigationType, const String&, IPC::MessageDecoder&); 947 947 void didReceiveTitleForFrame(uint64_t frameID, const String&, IPC::MessageDecoder&); 948 948 void didFirstLayoutForFrame(uint64_t frameID, IPC::MessageDecoder&); -
trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in
r170782 r171027 142 142 DidRunInsecureContentForFrame(uint64_t frameID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic 143 143 DidDetectXSSForFrame(uint64_t frameID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic 144 DidSameDocumentNavigationForFrame(uint64_t frameID, uint 32_t type, String url, WebKit::InjectedBundleUserMessageEncoder userData) Variadic144 DidSameDocumentNavigationForFrame(uint64_t frameID, uint64_t navigationID, uint32_t type, String url, WebKit::InjectedBundleUserMessageEncoder userData) Variadic 145 145 DidDestroyNavigation(uint64_t navigationID) 146 146 -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
r171002 r171027 329 329 330 330 // Notify the UIProcess. 331 webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationAnchorNavigation, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get()))); 331 WebDocumentLoader& documentLoader = static_cast<WebDocumentLoader&>(*m_frame->coreFrame()->loader().documentLoader()); 332 webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), documentLoader.navigationID(), SameDocumentNavigationAnchorNavigation, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get()))); 332 333 } 333 334 … … 344 345 345 346 // Notify the UIProcess. 346 webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationSessionStatePush, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get()))); 347 WebDocumentLoader& documentLoader = static_cast<WebDocumentLoader&>(*m_frame->coreFrame()->loader().documentLoader()); 348 webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), documentLoader.navigationID(), SameDocumentNavigationSessionStatePush, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get()))); 347 349 } 348 350 … … 359 361 360 362 // Notify the UIProcess. 361 webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationSessionStateReplace, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get()))); 363 WebDocumentLoader& documentLoader = static_cast<WebDocumentLoader&>(*m_frame->coreFrame()->loader().documentLoader()); 364 webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), documentLoader.navigationID(), SameDocumentNavigationSessionStateReplace, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get()))); 362 365 } 363 366 … … 374 377 375 378 // Notify the UIProcess. 376 webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationSessionStatePop, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get()))); 379 WebDocumentLoader& documentLoader = static_cast<WebDocumentLoader&>(*m_frame->coreFrame()->loader().documentLoader()); 380 webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), documentLoader.navigationID(), SameDocumentNavigationSessionStatePop, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get()))); 377 381 } 378 382
Note: See TracChangeset
for help on using the changeset viewer.