Title: [94630] trunk/Source/WebKit/chromium
Revision
94630
Author
[email protected]
Date
2011-09-06 20:00:55 -0700 (Tue, 06 Sep 2011)

Log Message

[chromium] Fix WebFrameClient receiving isRedirect when reloading
https://bugs.webkit.org/show_bug.cgi?id=63591

Patch by Ben Smith <[email protected]> on 2011-09-06
Reviewed by Adam Barth.

Fix bug when quickly reloading a WebFrame where the
WebFrameClient would get called with decidePolicyForNavigation
isRedirect=true.

* src/FrameLoaderClientImpl.cpp:
(WebKit::FrameLoaderClientImpl::dispatchDecidePolicyForNavigationAction):
* src/WebDataSourceImpl.h:
(WebKit::WebDataSourceImpl::isRedirect):
* tests/WebFrameTest.cpp:
(WebKit::TestReloadDoesntRedirectWebFrameClient::decidePolicyForNavigation):
(WebKit::TestReloadDoesntRedirectWebFrameClient::cancelledError):
(WebKit::TEST_F):

Modified Paths

Diff

Modified: trunk/Source/WebKit/chromium/ChangeLog (94629 => 94630)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-09-07 02:47:51 UTC (rev 94629)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-09-07 03:00:55 UTC (rev 94630)
@@ -1,3 +1,23 @@
+2011-09-06  Ben Smith  <[email protected]>
+
+        [chromium] Fix WebFrameClient receiving isRedirect when reloading
+        https://bugs.webkit.org/show_bug.cgi?id=63591
+
+        Reviewed by Adam Barth.
+
+        Fix bug when quickly reloading a WebFrame where the
+        WebFrameClient would get called with decidePolicyForNavigation
+        isRedirect=true.
+
+        * src/FrameLoaderClientImpl.cpp:
+        (WebKit::FrameLoaderClientImpl::dispatchDecidePolicyForNavigationAction):
+        * src/WebDataSourceImpl.h:
+        (WebKit::WebDataSourceImpl::isRedirect):
+        * tests/WebFrameTest.cpp:
+        (WebKit::TestReloadDoesntRedirectWebFrameClient::decidePolicyForNavigation):
+        (WebKit::TestReloadDoesntRedirectWebFrameClient::cancelledError):
+        (WebKit::TEST_F):
+
 2011-09-06  Ryosuke Niwa  <[email protected]>
 
         Rename confirmCompositionWithoutDisturbingSelection to cancelComposition

Modified: trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp (94629 => 94630)


--- trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp	2011-09-07 02:47:51 UTC (rev 94629)
+++ trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp	2011-09-07 03:00:55 UTC (rev 94630)
@@ -966,7 +966,7 @@
             KURL url = ""
             ASSERT(!url.protocolIs(backForwardNavigationScheme));
 
-            bool isRedirect = ds->hasRedirectChain();
+            bool isRedirect = ds->isRedirect();
 
             WebNavigationType webnavType =
                 WebDataSourceImpl::toWebNavigationType(action.type());

Modified: trunk/Source/WebKit/chromium/src/WebDataSourceImpl.h (94629 => 94630)


--- trunk/Source/WebKit/chromium/src/WebDataSourceImpl.h	2011-09-07 02:47:51 UTC (rev 94629)
+++ trunk/Source/WebKit/chromium/src/WebDataSourceImpl.h	2011-09-07 03:00:55 UTC (rev 94630)
@@ -74,6 +74,7 @@
     static WebNavigationType toWebNavigationType(WebCore::NavigationType type);
 
     bool hasRedirectChain() const { return !m_redirectChain.isEmpty(); }
+    bool isRedirect() const { return m_redirectChain.size() > 1; }
     const WebCore::KURL& endOfRedirectChain() const;
     void clearRedirectChain();
     void appendRedirect(const WebCore::KURL& url);

Modified: trunk/Source/WebKit/chromium/tests/WebFrameTest.cpp (94629 => 94630)


--- trunk/Source/WebKit/chromium/tests/WebFrameTest.cpp	2011-09-07 02:47:51 UTC (rev 94629)
+++ trunk/Source/WebKit/chromium/tests/WebFrameTest.cpp	2011-09-07 03:00:55 UTC (rev 94630)
@@ -30,6 +30,7 @@
 
 #include "config.h"
 
+#include "ResourceError.h"
 #include "WebDocument.h"
 #include "WebFormElement.h"
 #include "WebFrame.h"
@@ -215,4 +216,43 @@
     EXPECT_EQ(std::string::npos, content.find("Clobbered"));
 }
 
+class TestReloadDoesntRedirectWebFrameClient : public WebFrameClient {
+public:
+    virtual WebNavigationPolicy decidePolicyForNavigation(
+        WebFrame*, const WebURLRequest&, WebNavigationType,
+        const WebNode& originatingNode,
+        WebNavigationPolicy defaultPolicy, bool isRedirect)
+    {
+        EXPECT_EQ(false, isRedirect);
+        return WebNavigationPolicyCurrentTab;
+    }
+
+    virtual WebURLError cancelledError(WebFrame*, const WebURLRequest& request)
+    {
+        // Return a dummy error so the DocumentLoader doesn't assert when
+        // the reload cancels it.
+        return WebURLError(WebCore::ResourceError("", 1, "", "cancelled"));
+    }
+};
+
+TEST_F(WebFrameTest, ReloadDoesntSetRedirect)
+{
+    // Test for case in http://crbug.com/73104. Reloading a frame very quickly
+    // would sometimes call decidePolicyForNavigation with isRedirect=true
+    registerMockedHttpURLLoad("form.html");
+
+    TestReloadDoesntRedirectWebFrameClient webFrameClient;
+    WebView* webView = WebView::create(0);
+    webView->initializeMainFrame(&webFrameClient);
+
+    loadHttpFrame(webView->mainFrame(), "form.html");
+    serveRequests();
+    // Frame is loaded.
+
+    webView->mainFrame()->reload(true);
+    // start reload before request is delivered.
+    webView->mainFrame()->reload(true);
+    serveRequests();
+}
+
 } // namespace
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to