Changeset 163132 in webkit
- Timestamp:
- Jan 30, 2014 4:23:23 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r163131 r163132 1 2014-01-30 Anders Carlsson <andersca@apple.com> 2 3 Add a webView:didStartProvisionalNavigation: delegate method 4 https://bugs.webkit.org/show_bug.cgi?id=127965 5 6 Reviewed by Dan Bernstein. 7 8 * UIProcess/API/APILoaderClient.h: 9 (API::LoaderClient::didStartProvisionalLoadForFrame): 10 * UIProcess/API/C/WKPage.cpp: 11 (WKPageSetPageLoaderClient): 12 * UIProcess/API/Cocoa/WKNavigationDelegate.h: 13 * UIProcess/API/Cocoa/WKWebView.mm: 14 (-[WKWebView initWithFrame:configuration:]): 15 * UIProcess/Cocoa/NavigationState.h: 16 * UIProcess/Cocoa/NavigationState.mm: 17 (WebKit::NavigationState::createLoaderClient): 18 (WebKit::NavigationState::createPolicyClient): 19 (WebKit::NavigationState::setNavigationDelegate): 20 (WebKit::NavigationState::LoaderClient::LoaderClient): 21 (WebKit::NavigationState::LoaderClient::~LoaderClient): 22 (WebKit::NavigationState::LoaderClient::didStartProvisionalLoadForFrame): 23 * UIProcess/WebPageProxy.cpp: 24 (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): 25 * UIProcess/WebPageProxy.h: 26 * UIProcess/WebPageProxy.messages.in: 27 * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: 28 (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad): 29 1 30 2014-01-30 Brady Eidson <beidson@apple.com> 2 31 -
trunk/Source/WebKit2/UIProcess/API/APILoaderClient.h
r162883 r163132 54 54 virtual ~LoaderClient() { } 55 55 56 virtual void didStartProvisionalLoadForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, API::Object*) { }56 virtual void didStartProvisionalLoadForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, uint64_t navigationID, API::Object*) { } 57 57 virtual void didReceiveServerRedirectForProvisionalLoadForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, API::Object*) { } 58 58 virtual void didFailProvisionalLoadWithErrorForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::ResourceError&, API::Object*) { } -
trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp
r163123 r163132 693 693 694 694 private: 695 virtual void didStartProvisionalLoadForFrame(WebPageProxy* page, WebFrameProxy* frame, API::Object* userData) override695 virtual void didStartProvisionalLoadForFrame(WebPageProxy* page, WebFrameProxy* frame, uint64_t navigationID, API::Object* userData) override 696 696 { 697 697 if (!m_client.didStartProvisionalLoadForFrame) -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationDelegate.h
r163112 r163132 52 52 - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicyDecision))decisionHandler; 53 53 54 - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation; 55 54 56 @end 55 57 -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm
r163108 r163132 121 121 122 122 _page->setPolicyClient(_navigationState->createPolicyClient()); 123 _page->setLoaderClient(_navigationState->createLoaderClient()); 123 124 124 125 return self; -
trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h
r163129 r163132 33 33 #import <wtf/HashMap.h> 34 34 #import <wtf/RetainPtr.h> 35 #import "APILoaderClient.h" 35 36 #import "APIPolicyClient.h" 36 37 #import "WeakObjCPtr.h" … … 48 49 49 50 std::unique_ptr<API::PolicyClient> createPolicyClient(); 51 std::unique_ptr<API::LoaderClient> createLoaderClient(); 50 52 51 53 RetainPtr<id <WKNavigationDelegate> > navigationDelegate(); … … 69 71 }; 70 72 73 class LoaderClient : public API::LoaderClient { 74 public: 75 explicit LoaderClient(NavigationState&); 76 ~LoaderClient(); 77 78 private: 79 virtual void didStartProvisionalLoadForFrame(WebPageProxy*, WebFrameProxy*, uint64_t navigationID, API::Object*) override; 80 81 NavigationState& m_navigationState; 82 }; 83 71 84 struct { 72 85 bool webViewDecidePolicyForNavigationActionDecisionHandler : 1; 73 86 bool webViewDecidePolicyForNavigationResponseDecisionHandler : 1; 87 88 bool webViewDidStartProvisionalNavigation : 1; 74 89 } m_navigationDelegateMethods; 75 90 -
trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm
r163129 r163132 31 31 #import "WKNavigationDelegate.h" 32 32 #import "WKNavigationInternal.h" 33 #import "WebFrameProxy.h" 33 34 34 35 namespace WebKit { … … 41 42 NavigationState::~NavigationState() 42 43 { 44 } 45 46 std::unique_ptr<API::LoaderClient> NavigationState::createLoaderClient() 47 { 48 return std::make_unique<LoaderClient>(*this); 49 } 50 51 std::unique_ptr<API::PolicyClient> NavigationState::createPolicyClient() 52 { 53 return std::make_unique<PolicyClient>(*this); 43 54 } 44 55 … … 54 65 m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler = [delegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]; 55 66 m_navigationDelegateMethods.webViewDecidePolicyForNavigationResponseDecisionHandler = [delegate respondsToSelector:@selector(webView:decidePolicyForNavigationResponse:decisionHandler:)]; 67 68 m_navigationDelegateMethods.webViewDidStartProvisionalNavigation = [delegate respondsToSelector:@selector(webView:didStartProvisionalNavigation:)]; 56 69 } 57 70 … … 67 80 68 81 return navigation; 69 }70 71 std::unique_ptr<API::PolicyClient> NavigationState::createPolicyClient()72 {73 return std::make_unique<PolicyClient>(*this);74 82 } 75 83 … … 152 160 } 153 161 162 NavigationState::LoaderClient::LoaderClient(NavigationState& navigationState) 163 : m_navigationState(navigationState) 164 { 165 } 166 167 NavigationState::LoaderClient::~LoaderClient() 168 { 169 } 170 171 void NavigationState::LoaderClient::didStartProvisionalLoadForFrame(WebPageProxy*, WebFrameProxy* webFrameProxy, uint64_t navigationID, API::Object*) 172 { 173 if (!webFrameProxy->isMainFrame()) 174 return; 175 176 if (!m_navigationState.m_navigationDelegateMethods.webViewDidStartProvisionalNavigation) 177 return; 178 179 auto navigationDelegate = m_navigationState.m_navigationDelegate.get(); 180 if (!navigationDelegate) 181 return; 182 183 // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process. 184 WKNavigation *navigation = nil; 185 if (navigationID) 186 navigation = m_navigationState.m_navigations.get(navigationID).get(); 187 188 [navigationDelegate.get() webView:m_navigationState.m_webView didStartProvisionalNavigation:navigation]; 189 } 190 154 191 } // namespace WebKit 155 192 -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r163125 r163132 2098 2098 } 2099 2099 2100 void WebPageProxy::didStartProvisionalLoadForFrame(uint64_t frameID, const String& url, const String& unreachableURL, IPC::MessageDecoder& decoder)2100 void WebPageProxy::didStartProvisionalLoadForFrame(uint64_t frameID, uint64_t navigationID, const String& url, const String& unreachableURL, IPC::MessageDecoder& decoder) 2101 2101 { 2102 2102 auto transaction = m_pageLoadState.transaction(); … … 2122 2122 2123 2123 m_pageLoadState.commitChanges(); 2124 m_loaderClient->didStartProvisionalLoadForFrame(this, frame, userData.get());2124 m_loaderClient->didStartProvisionalLoadForFrame(this, frame, navigationID, userData.get()); 2125 2125 } 2126 2126 -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r163079 r163132 898 898 void didCreateSubframe(uint64_t frameID); 899 899 900 void didStartProvisionalLoadForFrame(uint64_t frameID, const String& url, const String& unreachableURL, IPC::MessageDecoder&);900 void didStartProvisionalLoadForFrame(uint64_t frameID, uint64_t navigationID, const String& url, const String& unreachableURL, IPC::MessageDecoder&); 901 901 void didReceiveServerRedirectForProvisionalLoadForFrame(uint64_t frameID, const String&, IPC::MessageDecoder&); 902 902 void didFailProvisionalLoadForFrame(uint64_t frameID, const WebCore::ResourceError&, IPC::MessageDecoder&); -
trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in
r162951 r163132 131 131 DidReceiveServerRedirectForProvisionalLoadForFrame(uint64_t frameID, String url, WebKit::InjectedBundleUserMessageEncoder userData) Variadic 132 132 DidRemoveFrameFromHierarchy(uint64_t frameID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic 133 DidStartProvisionalLoadForFrame(uint64_t frameID, String url, String unreachableURL, WebKit::InjectedBundleUserMessageEncoder userData) Variadic133 DidStartProvisionalLoadForFrame(uint64_t frameID, uint64_t navigationID, String url, String unreachableURL, WebKit::InjectedBundleUserMessageEncoder userData) Variadic 134 134 DidReceiveTitleForFrame(uint64_t frameID, String title, WebKit::InjectedBundleUserMessageEncoder userData) Variadic 135 135 DidDisplayInsecureContentForFrame(uint64_t frameID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
r162990 r163132 39 39 #include "WebContextMessages.h" 40 40 #include "WebCoreArgumentCoders.h" 41 #include "WebDocumentLoader.h" 41 42 #include "WebErrors.h" 42 43 #include "WebEvent.h" … … 395 396 webPage->sandboxExtensionTracker().didStartProvisionalLoad(m_frame); 396 397 397 DocumentLoader* provisionalLoader = m_frame->coreFrame()->loader().provisionalDocumentLoader();398 const String& url = provisionalLoader ->url().string();398 WebDocumentLoader& provisionalLoader = static_cast<WebDocumentLoader&>(*m_frame->coreFrame()->loader().provisionalDocumentLoader()); 399 const String& url = provisionalLoader.url().string(); 399 400 RefPtr<API::Object> userData; 400 401 … … 402 403 webPage->injectedBundleLoaderClient().didStartProvisionalLoadForFrame(webPage, m_frame, userData); 403 404 404 String unreachableURL = provisionalLoader ->unreachableURL().string();405 String unreachableURL = provisionalLoader.unreachableURL().string(); 405 406 406 407 // Notify the UIProcess. 407 webPage->send(Messages::WebPageProxy::DidStartProvisionalLoadForFrame(m_frame->frameID(), url, unreachableURL, InjectedBundleUserMessageEncoder(userData.get())));408 webPage->send(Messages::WebPageProxy::DidStartProvisionalLoadForFrame(m_frame->frameID(), provisionalLoader.navigationID(), url, unreachableURL, InjectedBundleUserMessageEncoder(userData.get()))); 408 409 } 409 410 -
trunk/Tools/ChangeLog
r163117 r163132 1 2014-01-30 Anders Carlsson <andersca@apple.com> 2 3 Add a webView:didStartProvisionalNavigation: delegate method 4 https://bugs.webkit.org/show_bug.cgi?id=127965 5 6 Reviewed by Dan Bernstein. 7 8 * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm: 9 (-[NavigationDelegate webView:didStartProvisionalNavigation:]): 10 (TEST): 11 1 12 2014-01-30 Chris Fleizach <cfleizach@apple.com> 2 13 -
trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm
r163098 r163132 30 30 #import <WebKit2/WKWebView.h> 31 31 #import <wtf/RetainPtr.h> 32 #import "PlatformUtilities.h" 32 33 #import "Test.h" 33 34 … … 37 38 @end 38 39 40 static bool isDone; 41 static RetainPtr<WKNavigation> currentNavigation; 42 39 43 @implementation NavigationDelegate 44 45 - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation 46 { 47 EXPECT_EQ(currentNavigation, navigation); 48 EXPECT_NOT_NULL(navigation.request); 49 50 isDone = true; 51 } 52 40 53 @end 41 54 … … 59 72 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]); 60 73 74 RetainPtr<NavigationDelegate> delegate = adoptNS([[NavigationDelegate alloc] init]); 75 [webView setNavigationDelegate:delegate.get()]; 76 61 77 NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"simple" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]]; 62 78 63 WKNavigation *navigation = [webView loadRequest:request]; 64 ASSERT_NOT_NULL(navigation); 65 ASSERT_TRUE([navigation.request isEqual:request]); 79 currentNavigation = [webView loadRequest:request]; 80 ASSERT_NOT_NULL(currentNavigation); 81 ASSERT_TRUE([[currentNavigation request] isEqual:request]); 82 83 TestWebKitAPI::Util::run(&isDone); 66 84 } 67 85
Note: See TracChangeset
for help on using the changeset viewer.