Title: [163149] trunk
Revision
163149
Author
[email protected]
Date
2014-01-30 18:24:35 -0800 (Thu, 30 Jan 2014)

Log Message

Add webView:didFinishLoadingNavigation: delegate method
https://bugs.webkit.org/show_bug.cgi?id=127976

Reviewed by Dan Bernstein.

Source/WebKit2:

* UIProcess/API/APILoaderClient.h:
(API::LoaderClient::didFinishLoadForFrame):
* UIProcess/API/C/WKPage.cpp:
(WKPageSetPageLoaderClient):
* UIProcess/API/Cocoa/WKNavigationDelegate.h:
* UIProcess/Cocoa/NavigationState.h:
* UIProcess/Cocoa/NavigationState.mm:
(WebKit::NavigationState::setNavigationDelegate):
(WebKit::NavigationState::LoaderClient::didStartProvisionalLoadForFrame):
(WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
(WebKit::NavigationState::LoaderClient::didCommitLoadForFrame):
(WebKit::NavigationState::LoaderClient::didFinishLoadForFrame):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didFinishLoadForFrame):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::dispatchDidFinishLoad):

Tools:

* TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
(-[NavigationDelegate webView:didCommitNavigation:]):
(-[NavigationDelegate webView:didFinishLoadingNavigation:]):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (163148 => 163149)


--- trunk/Source/WebKit2/ChangeLog	2014-01-31 02:02:05 UTC (rev 163148)
+++ trunk/Source/WebKit2/ChangeLog	2014-01-31 02:24:35 UTC (rev 163149)
@@ -1,3 +1,29 @@
+2014-01-30  Anders Carlsson  <[email protected]>
+
+        Add webView:didFinishLoadingNavigation: delegate method
+        https://bugs.webkit.org/show_bug.cgi?id=127976
+
+        Reviewed by Dan Bernstein.
+
+        * UIProcess/API/APILoaderClient.h:
+        (API::LoaderClient::didFinishLoadForFrame):
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageSetPageLoaderClient):
+        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
+        * UIProcess/Cocoa/NavigationState.h:
+        * UIProcess/Cocoa/NavigationState.mm:
+        (WebKit::NavigationState::setNavigationDelegate):
+        (WebKit::NavigationState::LoaderClient::didStartProvisionalLoadForFrame):
+        (WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
+        (WebKit::NavigationState::LoaderClient::didCommitLoadForFrame):
+        (WebKit::NavigationState::LoaderClient::didFinishLoadForFrame):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::didFinishLoadForFrame):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebPageProxy.messages.in:
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoad):
+
 2014-01-30  Tim Horton  <[email protected]>
 
         Crashes after 163116 in [WKView takeViewSnapshot]

Modified: trunk/Source/WebKit2/UIProcess/API/APILoaderClient.h (163148 => 163149)


--- trunk/Source/WebKit2/UIProcess/API/APILoaderClient.h	2014-01-31 02:02:05 UTC (rev 163148)
+++ trunk/Source/WebKit2/UIProcess/API/APILoaderClient.h	2014-01-31 02:24:35 UTC (rev 163149)
@@ -58,7 +58,7 @@
     virtual void didFailProvisionalLoadWithErrorForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, uint64_t navigationID, const WebCore::ResourceError&, API::Object*) { }
     virtual void didCommitLoadForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, uint64_t navigationID, API::Object*) { }
     virtual void didFinishDocumentLoadForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, API::Object*) { }
-    virtual void didFinishLoadForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, API::Object*) { }
+    virtual void didFinishLoadForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, uint64_t navigationID, API::Object*) { }
     virtual void didFailLoadWithErrorForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::ResourceError&, API::Object*) { }
     virtual void didSameDocumentNavigationForFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, WebKit::SameDocumentNavigationType, API::Object*) { }
     virtual void didReceiveTitleForFrame(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, API::Object*) { }

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp (163148 => 163149)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp	2014-01-31 02:02:05 UTC (rev 163148)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp	2014-01-31 02:24:35 UTC (rev 163149)
@@ -732,7 +732,7 @@
             m_client.didFinishDocumentLoadForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.base.clientInfo);
         }
 
-        virtual void didFinishLoadForFrame(WebPageProxy* page, WebFrameProxy* frame, API::Object* userData) override
+        virtual void didFinishLoadForFrame(WebPageProxy* page, WebFrameProxy* frame, uint64_t navigationID, API::Object* userData) override
         {
             if (!m_client.didFinishLoadForFrame)
                 return;

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationDelegate.h (163148 => 163149)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationDelegate.h	2014-01-31 02:02:05 UTC (rev 163148)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationDelegate.h	2014-01-31 02:24:35 UTC (rev 163149)
@@ -54,6 +54,7 @@
 - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;
 - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error;
 - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;
+- (void)webView:(WKWebView *)webView didFinishLoadingNavigation:(WKNavigation *)navigation;
 
 @end
 

Modified: trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h (163148 => 163149)


--- trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h	2014-01-31 02:02:05 UTC (rev 163148)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h	2014-01-31 02:24:35 UTC (rev 163149)
@@ -79,6 +79,7 @@
         virtual void didStartProvisionalLoadForFrame(WebPageProxy*, WebFrameProxy*, uint64_t navigationID, API::Object*) override;
         virtual void didFailProvisionalLoadWithErrorForFrame(WebPageProxy*, WebFrameProxy*, uint64_t navigationID, const WebCore::ResourceError&, API::Object*) override;
         virtual void didCommitLoadForFrame(WebPageProxy*, WebFrameProxy*, uint64_t navigationID, API::Object*) override;
+        virtual void didFinishLoadForFrame(WebPageProxy*, WebFrameProxy*, uint64_t navigationID, API::Object*) override;
 
         NavigationState& m_navigationState;
     };
@@ -90,6 +91,7 @@
         bool webViewDidStartProvisionalNavigation : 1;
         bool webViewDidFailProvisionalNavigationWithError : 1;
         bool webViewDidCommitNavigation : 1;
+        bool webViewDidFinishLoadingNavigation : 1;
     } m_navigationDelegateMethods;
 
     WKWebView *m_webView;

Modified: trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm (163148 => 163149)


--- trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm	2014-01-31 02:02:05 UTC (rev 163148)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm	2014-01-31 02:24:35 UTC (rev 163149)
@@ -68,6 +68,7 @@
     m_navigationDelegateMethods.webViewDidStartProvisionalNavigation = [delegate respondsToSelector:@selector(webView:didStartProvisionalNavigation:)];
     m_navigationDelegateMethods.webViewDidFailProvisionalNavigationWithError = [delegate respondsToSelector:@selector(webView:didFailProvisionalNavigation:withError:)];
     m_navigationDelegateMethods.webViewDidCommitNavigation = [delegate respondsToSelector:@selector(webView:didCommitNavigation:)];
+    m_navigationDelegateMethods.webViewDidFinishLoadingNavigation = [delegate respondsToSelector:@selector(webView:didFinishLoadingNavigation:)];
 }
 
 RetainPtr<WKNavigation> NavigationState::createLoadRequestNavigation(uint64_t navigationID, NSURLRequest *request)
@@ -187,7 +188,7 @@
     if (navigationID)
         navigation = m_navigationState.m_navigations.get(navigationID).get();
 
-    [navigationDelegate.get() webView:m_navigationState.m_webView didStartProvisionalNavigation:navigation];
+    [navigationDelegate webView:m_navigationState.m_webView didStartProvisionalNavigation:navigation];
 }
 
 void NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame(WebPageProxy*, WebFrameProxy* webFrameProxy, uint64_t navigationID, const WebCore::ResourceError& error, API::Object*)
@@ -209,7 +210,7 @@
     if (!navigationDelegate)
         return;
 
-    [navigationDelegate.get() webView:m_navigationState.m_webView didFailProvisionalNavigation:navigation.get() withError:error];
+    [navigationDelegate webView:m_navigationState.m_webView didFailProvisionalNavigation:navigation.get() withError:error];
 }
 
 void NavigationState::LoaderClient::didCommitLoadForFrame(WebPageProxy*, WebFrameProxy* webFrameProxy, uint64_t navigationID, API::Object*)
@@ -229,9 +230,29 @@
     if (navigationID)
         navigation = m_navigationState.m_navigations.get(navigationID).get();
 
-    [navigationDelegate.get() webView:m_navigationState.m_webView didCommitNavigation:navigation];
+    [navigationDelegate webView:m_navigationState.m_webView didCommitNavigation:navigation];
 }
 
+void NavigationState::LoaderClient::didFinishLoadForFrame(WebPageProxy*, WebFrameProxy* webFrameProxy, uint64_t navigationID, API::Object*)
+{
+    if (!webFrameProxy->isMainFrame())
+        return;
+
+    if (!m_navigationState.m_navigationDelegateMethods.webViewDidFinishLoadingNavigation)
+        return;
+
+    auto navigationDelegate = m_navigationState.m_navigationDelegate.get();
+    if (!navigationDelegate)
+        return;
+
+    // FIXME: We should assert that navigationID is not zero here, but it's currently zero for navigations originating from the web process.
+    WKNavigation *navigation = nil;
+    if (navigationID)
+        navigation = m_navigationState.m_navigations.get(navigationID).get();
+
+    [navigationDelegate webView:m_navigationState.m_webView didFinishLoadingNavigation:navigation];
+}
+
 } // namespace WebKit
 
 #endif

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (163148 => 163149)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2014-01-31 02:02:05 UTC (rev 163148)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2014-01-31 02:24:35 UTC (rev 163149)
@@ -2233,7 +2233,7 @@
     m_loaderClient->didFinishDocumentLoadForFrame(this, frame, userData.get());
 }
 
-void WebPageProxy::didFinishLoadForFrame(uint64_t frameID, IPC::MessageDecoder& decoder)
+void WebPageProxy::didFinishLoadForFrame(uint64_t frameID, uint64_t navigationID, IPC::MessageDecoder& decoder)
 {
     RefPtr<API::Object> userData;
     WebContextUserMessageDecoder messageDecoder(userData, process());
@@ -2251,7 +2251,7 @@
     frame->didFinishLoad();
 
     m_pageLoadState.commitChanges();
-    m_loaderClient->didFinishLoadForFrame(this, frame, userData.get());
+    m_loaderClient->didFinishLoadForFrame(this, frame, navigationID, userData.get());
 }
 
 void WebPageProxy::didFailLoadForFrame(uint64_t frameID, const ResourceError& error, IPC::MessageDecoder& decoder)

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (163148 => 163149)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2014-01-31 02:02:05 UTC (rev 163148)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2014-01-31 02:24:35 UTC (rev 163149)
@@ -902,7 +902,7 @@
     void didFailProvisionalLoadForFrame(uint64_t frameID, uint64_t navigationID, const WebCore::ResourceError&, IPC::MessageDecoder&);
     void didCommitLoadForFrame(uint64_t frameID, uint64_t navigationID, const String& mimeType, uint32_t frameLoadType, const WebCore::CertificateInfo&, IPC::MessageDecoder&);
     void didFinishDocumentLoadForFrame(uint64_t frameID, IPC::MessageDecoder&);
-    void didFinishLoadForFrame(uint64_t frameID, IPC::MessageDecoder&);
+    void didFinishLoadForFrame(uint64_t frameID, uint64_t navigationID, IPC::MessageDecoder&);
     void didFailLoadForFrame(uint64_t frameID, const WebCore::ResourceError&, IPC::MessageDecoder&);
     void didSameDocumentNavigationForFrame(uint64_t frameID, uint32_t sameDocumentNavigationType, const String&, IPC::MessageDecoder&);
     void didReceiveTitleForFrame(uint64_t frameID, const String&, IPC::MessageDecoder&);

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (163148 => 163149)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in	2014-01-31 02:02:05 UTC (rev 163148)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in	2014-01-31 02:24:35 UTC (rev 163149)
@@ -126,7 +126,7 @@
     DidCommitLoadForFrame(uint64_t frameID, uint64_t navigationID, String mimeType, uint32_t loadType, WebCore::CertificateInfo certificateInfo, WebKit::InjectedBundleUserMessageEncoder userData) Variadic
     DidFailLoadForFrame(uint64_t frameID, WebCore::ResourceError error, WebKit::InjectedBundleUserMessageEncoder userData) Variadic
     DidFinishDocumentLoadForFrame(uint64_t frameID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic
-    DidFinishLoadForFrame(uint64_t frameID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic
+    DidFinishLoadForFrame(uint64_t frameID, uint64_t navigationID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic
     DidFirstLayoutForFrame(uint64_t frameID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic
     DidFirstVisuallyNonEmptyLayoutForFrame(uint64_t frameID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic
     DidLayout(uint32_t type, WebKit::InjectedBundleUserMessageEncoder userData) Variadic

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (163148 => 163149)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2014-01-31 02:02:05 UTC (rev 163148)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2014-01-31 02:24:35 UTC (rev 163149)
@@ -517,8 +517,10 @@
     // Notify the bundle client.
     webPage->injectedBundleLoaderClient().didFinishLoadForFrame(webPage, m_frame, userData);
 
+    WebDocumentLoader& documentLoader = static_cast<WebDocumentLoader&>(*m_frame->coreFrame()->loader().documentLoader());
+
     // Notify the UIProcess.
-    webPage->send(Messages::WebPageProxy::DidFinishLoadForFrame(m_frame->frameID(), InjectedBundleUserMessageEncoder(userData.get())));
+    webPage->send(Messages::WebPageProxy::DidFinishLoadForFrame(m_frame->frameID(), documentLoader.navigationID(), InjectedBundleUserMessageEncoder(userData.get())));
 
     // If we have a load listener, notify it.
     if (WebFrame::LoadListener* loadListener = m_frame->loadListener())

Modified: trunk/Tools/ChangeLog (163148 => 163149)


--- trunk/Tools/ChangeLog	2014-01-31 02:02:05 UTC (rev 163148)
+++ trunk/Tools/ChangeLog	2014-01-31 02:24:35 UTC (rev 163149)
@@ -1,5 +1,16 @@
 2014-01-30  Anders Carlsson  <[email protected]>
 
+        Add webView:didFinishLoadingNavigation: delegate method
+        https://bugs.webkit.org/show_bug.cgi?id=127976
+
+        Reviewed by Dan Bernstein.
+
+        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
+        (-[NavigationDelegate webView:didCommitNavigation:]):
+        (-[NavigationDelegate webView:didFinishLoadingNavigation:]):
+
+2014-01-30  Anders Carlsson  <[email protected]>
+
         Add a webView:didCommitNavigation: delegate method
         https://bugs.webkit.org/show_bug.cgi?id=127972
 

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm (163148 => 163149)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm	2014-01-31 02:02:05 UTC (rev 163148)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm	2014-01-31 02:24:35 UTC (rev 163149)
@@ -51,7 +51,12 @@
 - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation
 {
     EXPECT_EQ(currentNavigation, navigation);
+}
 
+- (void)webView:(WKWebView *)webView didFinishLoadingNavigation:(WKNavigation *)navigation
+{
+    EXPECT_EQ(currentNavigation, navigation);
+
     isDone = true;
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to