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