2009-12-01 Xiyuan Xia <xiyuan@chromium.org>
authoreric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 1 Dec 2009 18:41:36 +0000 (18:41 +0000)
committereric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 1 Dec 2009 18:41:36 +0000 (18:41 +0000)
        Reviewed by Darin Fisher.

        Only fire start/stop events when main frame is not loading.

        https://bugs.webkit.org/show_bug.cgi?id=31838

        * src/FrameLoaderClientImpl.cpp:
        (WebKit::FrameLoaderClientImpl::dispatchDidChangeLocationWithinPage):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@51548 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/chromium/ChangeLog
WebKit/chromium/src/FrameLoaderClientImpl.cpp

index dfc3a0c8c2ec8cd7d9ed2e818b63785ca0f057b5..b021532e97b7c99a595b45cfe2476db6fb606bd4 100644 (file)
@@ -1,3 +1,14 @@
+2009-12-01  Xiyuan Xia  <xiyuan@chromium.org>
+
+        Reviewed by Darin Fisher.
+
+        Only fire start/stop events when main frame is not loading.
+
+        https://bugs.webkit.org/show_bug.cgi?id=31838
+
+        * src/FrameLoaderClientImpl.cpp:
+        (WebKit::FrameLoaderClientImpl::dispatchDidChangeLocationWithinPage):
+
 2009-11-27  Yury Semikhatsky  <yurys@chromium.org>
 
         Reviewed by Pavel Feldman.
index cbb8eb73c4cb389697969fe2f6e864dcfdd3b9bf..cd4e025bf9135a3011e2beb4d3ad5272d09795e8 100644 (file)
@@ -539,7 +539,16 @@ void FrameLoaderClientImpl::dispatchDidChangeLocationWithinPage()
     // Anchor fragment navigations are not normal loads, so we need to synthesize
     // some events for our delegate.
     WebViewImpl* webView = m_webFrame->viewImpl();
-    if (webView->client())
+
+    // Flag of whether frame loader is completed. Generate didStartLoading and
+    // didStopLoading only when loader is completed so that we don't fire
+    // them for fragment redirection that happens in window.onload handler.
+    // See https://bugs.webkit.org/show_bug.cgi?id=31838
+    bool loaderCompleted =
+        !m_webFrame->frame()->page()->mainFrame()->loader()->isLoading();
+
+    // Generate didStartLoading if loader is completed.
+    if (webView->client() && loaderCompleted)
         webView->client()->didStartLoading();
 
     WebDataSourceImpl* ds = m_webFrame->dataSourceImpl();
@@ -585,7 +594,8 @@ void FrameLoaderClientImpl::dispatchDidChangeLocationWithinPage()
     if (m_webFrame->client())
         m_webFrame->client()->didChangeLocationWithinPage(m_webFrame, isNewNavigation);
 
-    if (webView->client())
+    // Generate didStopLoading if loader is completed.
+    if (webView->client() && loaderCompleted)
         webView->client()->didStopLoading();
 }