Changeset 94630 in webkit


Ignore:
Timestamp:
Sep 6, 2011 8:00:55 PM (13 years ago)
Author:
commit-queue@webkit.org
Message:

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

Patch by Ben Smith <binji@chromium.org> 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):

Location:
trunk/Source/WebKit/chromium
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/chromium/ChangeLog

    r94613 r94630  
     12011-09-06  Ben Smith  <binji@chromium.org>
     2
     3        [chromium] Fix WebFrameClient receiving isRedirect when reloading
     4        https://bugs.webkit.org/show_bug.cgi?id=63591
     5
     6        Reviewed by Adam Barth.
     7
     8        Fix bug when quickly reloading a WebFrame where the
     9        WebFrameClient would get called with decidePolicyForNavigation
     10        isRedirect=true.
     11
     12        * src/FrameLoaderClientImpl.cpp:
     13        (WebKit::FrameLoaderClientImpl::dispatchDecidePolicyForNavigationAction):
     14        * src/WebDataSourceImpl.h:
     15        (WebKit::WebDataSourceImpl::isRedirect):
     16        * tests/WebFrameTest.cpp:
     17        (WebKit::TestReloadDoesntRedirectWebFrameClient::decidePolicyForNavigation):
     18        (WebKit::TestReloadDoesntRedirectWebFrameClient::cancelledError):
     19        (WebKit::TEST_F):
     20
    1212011-09-06  Ryosuke Niwa  <rniwa@webkit.org>
    222
  • trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp

    r94237 r94630  
    967967            ASSERT(!url.protocolIs(backForwardNavigationScheme));
    968968
    969             bool isRedirect = ds->hasRedirectChain();
     969            bool isRedirect = ds->isRedirect();
    970970
    971971            WebNavigationType webnavType =
  • trunk/Source/WebKit/chromium/src/WebDataSourceImpl.h

    r84933 r94630  
    7575
    7676    bool hasRedirectChain() const { return !m_redirectChain.isEmpty(); }
     77    bool isRedirect() const { return m_redirectChain.size() > 1; }
    7778    const WebCore::KURL& endOfRedirectChain() const;
    7879    void clearRedirectChain();
  • trunk/Source/WebKit/chromium/tests/WebFrameTest.cpp

    r93734 r94630  
    3131#include "config.h"
    3232
     33#include "ResourceError.h"
    3334#include "WebDocument.h"
    3435#include "WebFormElement.h"
     
    216217}
    217218
     219class TestReloadDoesntRedirectWebFrameClient : public WebFrameClient {
     220public:
     221    virtual WebNavigationPolicy decidePolicyForNavigation(
     222        WebFrame*, const WebURLRequest&, WebNavigationType,
     223        const WebNode& originatingNode,
     224        WebNavigationPolicy defaultPolicy, bool isRedirect)
     225    {
     226        EXPECT_EQ(false, isRedirect);
     227        return WebNavigationPolicyCurrentTab;
     228    }
     229
     230    virtual WebURLError cancelledError(WebFrame*, const WebURLRequest& request)
     231    {
     232        // Return a dummy error so the DocumentLoader doesn't assert when
     233        // the reload cancels it.
     234        return WebURLError(WebCore::ResourceError("", 1, "", "cancelled"));
     235    }
     236};
     237
     238TEST_F(WebFrameTest, ReloadDoesntSetRedirect)
     239{
     240    // Test for case in http://crbug.com/73104. Reloading a frame very quickly
     241    // would sometimes call decidePolicyForNavigation with isRedirect=true
     242    registerMockedHttpURLLoad("form.html");
     243
     244    TestReloadDoesntRedirectWebFrameClient webFrameClient;
     245    WebView* webView = WebView::create(0);
     246    webView->initializeMainFrame(&webFrameClient);
     247
     248    loadHttpFrame(webView->mainFrame(), "form.html");
     249    serveRequests();
     250    // Frame is loaded.
     251
     252    webView->mainFrame()->reload(true);
     253    // start reload before request is delivered.
     254    webView->mainFrame()->reload(true);
     255    serveRequests();
     256}
     257
    218258} // namespace
Note: See TracChangeset for help on using the changeset viewer.