| Index: chrome/browser/captive_portal/captive_portal_tab_helper_unittest.cc
|
| ===================================================================
|
| --- chrome/browser/captive_portal/captive_portal_tab_helper_unittest.cc (revision 151564)
|
| +++ chrome/browser/captive_portal/captive_portal_tab_helper_unittest.cc (working copy)
|
| @@ -5,13 +5,19 @@
|
| #include "chrome/browser/captive_portal/captive_portal_tab_helper.h"
|
|
|
| #include "base/callback.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| #include "chrome/browser/captive_portal/captive_portal_service.h"
|
| #include "chrome/browser/captive_portal/captive_portal_tab_reloader.h"
|
| +#include "chrome/browser/ui/tab_contents/test_tab_contents.h"
|
| #include "chrome/common/chrome_notification_types.h"
|
| #include "content/public/browser/notification_details.h"
|
| #include "content/public/browser/notification_service.h"
|
| #include "content/public/browser/notification_source.h"
|
| #include "content/public/browser/notification_types.h"
|
| +#include "content/public/browser/render_view_host.h"
|
| +#include "content/public/browser/render_process_host.h"
|
| +#include "content/public/browser/web_contents.h"
|
| +#include "content/public/test/test_browser_thread.h"
|
| #include "net/base/net_errors.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -22,9 +28,21 @@
|
|
|
| const char* const kHttpUrl = "http://whatever.com/";
|
| const char* const kHttpsUrl = "https://whatever.com/";
|
| +
|
| +// Used for cross-process navigations. Shouldn't actually matter whether this
|
| +// is different from kHttpsUrl, but best to keep things consistent.
|
| +const char* const kHttpsUrl2 = "https://cross_process.com/";
|
| +
|
| // Error pages use a "data:" URL. Shouldn't actually matter what this is.
|
| const char* const kErrorPageUrl = "data:blah";
|
|
|
| +// Some navigations behave differently depending on if they're cross-process
|
| +// or not.
|
| +enum NavigationType {
|
| + kSameProcess,
|
| + kCrossProcess,
|
| +};
|
| +
|
| } // namespace
|
|
|
| class MockCaptivePortalTabReloader : public CaptivePortalTabReloader {
|
| @@ -40,66 +58,123 @@
|
| MOCK_METHOD2(OnCaptivePortalResults, void(Result, Result));
|
| };
|
|
|
| -class CaptivePortalTabHelperTest : public testing::Test {
|
| +// Inherits from the TabContentsTestHarness to gain access to
|
| +// CreateTestWebContents. Since the tests need to micromanage order of
|
| +// WebContentsObserver function calls, does not actually make sure of
|
| +// the harness in any other way.
|
| +class CaptivePortalTabHelperTest : public TabContentsTestHarness {
|
| public:
|
| CaptivePortalTabHelperTest()
|
| : tab_helper_(NULL, NULL),
|
| - mock_reloader_(new testing::StrictMock<MockCaptivePortalTabReloader>) {
|
| + mock_reloader_(new testing::StrictMock<MockCaptivePortalTabReloader>),
|
| + ui_thread_(content::BrowserThread::UI, &message_loop_) {
|
| tab_helper_.SetTabReloaderForTest(mock_reloader_);
|
| }
|
| virtual ~CaptivePortalTabHelperTest() {}
|
|
|
| + virtual void SetUp() OVERRIDE {
|
| + TabContentsTestHarness::SetUp();
|
| + web_contents1_.reset(CreateTestWebContents());
|
| + web_contents2_.reset(CreateTestWebContents());
|
| + }
|
| +
|
| + virtual void TearDown() OVERRIDE {
|
| + web_contents2_.reset(NULL);
|
| + web_contents1_.reset(NULL);
|
| + TabContentsTestHarness::TearDown();
|
| + }
|
| +
|
| // Simulates a successful load of |url|.
|
| - void SimulateSuccess(const GURL& url) {
|
| + void SimulateSuccess(const GURL& url,
|
| + content::RenderViewHost* render_view_host) {
|
| EXPECT_CALL(mock_reloader(), OnLoadStart(url.SchemeIsSecure())).Times(1);
|
| - tab_helper().DidStartProvisionalLoadForFrame(1, true, url, false, NULL);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, url, false, render_view_host);
|
|
|
| EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::OK)).Times(1);
|
| tab_helper().DidCommitProvisionalLoadForFrame(
|
| - 1, true, url, content::PAGE_TRANSITION_LINK, NULL);
|
| + 1, true, url, content::PAGE_TRANSITION_LINK, render_view_host);
|
| }
|
|
|
| // Simulates a connection timeout while requesting |url|.
|
| - void SimulateTimeout(const GURL& url) {
|
| + void SimulateTimeout(const GURL& url,
|
| + content::RenderViewHost* render_view_host) {
|
| EXPECT_CALL(mock_reloader(), OnLoadStart(url.SchemeIsSecure())).Times(1);
|
| - tab_helper().DidStartProvisionalLoadForFrame(1, true, url, false, NULL);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, url, false, render_view_host);
|
|
|
| tab_helper().DidFailProvisionalLoad(
|
| - 1, true, url, net::ERR_TIMED_OUT, string16(), NULL);
|
| + 1, true, url, net::ERR_TIMED_OUT, string16(), render_view_host);
|
|
|
| // Provisional load starts for the error page.
|
| tab_helper().DidStartProvisionalLoadForFrame(
|
| - 1, true, GURL(kErrorPageUrl), true, NULL);
|
| + 1, true, GURL(kErrorPageUrl), true, render_view_host);
|
|
|
| EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_TIMED_OUT)).Times(1);
|
| tab_helper().DidCommitProvisionalLoadForFrame(
|
| - 1, true, GURL(kErrorPageUrl), content::PAGE_TRANSITION_LINK, NULL);
|
| + 1, true, GURL(kErrorPageUrl), content::PAGE_TRANSITION_LINK,
|
| + render_view_host);
|
| }
|
|
|
| // Simulates an abort while requesting |url|.
|
| - void SimulateAbort(const GURL& url) {
|
| + void SimulateAbort(const GURL& url,
|
| + content::RenderViewHost* render_view_host,
|
| + NavigationType navigation_type) {
|
| EXPECT_CALL(mock_reloader(), OnLoadStart(url.SchemeIsSecure())).Times(1);
|
| - tab_helper().DidStartProvisionalLoadForFrame(1, true, url, false, NULL);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, url, false, render_view_host);
|
|
|
| EXPECT_CALL(mock_reloader(), OnAbort()).Times(1);
|
| - tab_helper().DidFailProvisionalLoad(
|
| - 1, true, url, net::ERR_ABORTED, string16(), NULL);
|
| + if (navigation_type == kSameProcess) {
|
| + tab_helper().DidFailProvisionalLoad(
|
| + 1, true, url, net::ERR_ABORTED, string16(), render_view_host);
|
| + } else {
|
| + // For interrupted provisional cross-process navigations, the
|
| + // RenderViewHost is destroyed without sending a DidFailProvisionalLoad
|
| + // notification.
|
| + tab_helper().Observe(
|
| + content::NOTIFICATION_RENDER_VIEW_HOST_DELETED,
|
| + content::Source<content::RenderViewHost>(render_view_host),
|
| + content::NotificationService::NoDetails());
|
| + }
|
| +
|
| + // Make sure that above call resulted in abort, for tests that continue
|
| + // after the abort.
|
| + EXPECT_CALL(mock_reloader(), OnAbort()).Times(0);
|
| }
|
|
|
| // Simulates an abort while loading an error page.
|
| - void SimulateAbortTimeout(const GURL& url) {
|
| + void SimulateAbortTimeout(const GURL& url,
|
| + content::RenderViewHost* render_view_host,
|
| + NavigationType navigation_type) {
|
| EXPECT_CALL(mock_reloader(), OnLoadStart(url.SchemeIsSecure())).Times(1);
|
| - tab_helper().DidStartProvisionalLoadForFrame(1, true, url, false, NULL);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, url, false, render_view_host);
|
|
|
| tab_helper().DidFailProvisionalLoad(
|
| - 1, true, url, net::ERR_TIMED_OUT, string16(), NULL);
|
| + 1, true, url, net::ERR_TIMED_OUT, string16(), render_view_host);
|
|
|
| // Start event for the error page.
|
| - tab_helper().DidStartProvisionalLoadForFrame(1, true, url, true, NULL);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, url, true, render_view_host);
|
|
|
| EXPECT_CALL(mock_reloader(), OnAbort()).Times(1);
|
| - tab_helper().DidFailProvisionalLoad(
|
| - 1, true, url, net::ERR_ABORTED, string16(), NULL);
|
| + if (navigation_type == kSameProcess) {
|
| + tab_helper().DidFailProvisionalLoad(
|
| + 1, true, url, net::ERR_ABORTED, string16(), render_view_host);
|
| + } else {
|
| + // For interrupted provisional cross-process navigations, the
|
| + // RenderViewHost is destroyed without sending a DidFailProvisionalLoad
|
| + // notification.
|
| + tab_helper().Observe(
|
| + content::NOTIFICATION_RENDER_VIEW_HOST_DELETED,
|
| + content::Source<content::RenderViewHost>(render_view_host),
|
| + content::NotificationService::NoDetails());
|
| + }
|
| +
|
| + // Make sure that above call resulted in abort, for tests that continue
|
| + // after the abort.
|
| + EXPECT_CALL(mock_reloader(), OnAbort()).Times(0);
|
| }
|
|
|
| CaptivePortalTabHelper& tab_helper() {
|
| @@ -123,10 +198,8 @@
|
| }
|
|
|
| // Simulates a redirect. Uses OnRedirect rather than Observe, for simplicity.
|
| - void OnRedirect(int64 frame_id, const GURL& new_url) {
|
| - content::Source<content::WebContents> source_contents(NULL);
|
| -
|
| - tab_helper().OnRedirect(frame_id, new_url);
|
| + void OnRedirect(ResourceType::Type type, const GURL& new_url, int child_id) {
|
| + tab_helper().OnRedirect(child_id, type, new_url);
|
| }
|
|
|
| MockCaptivePortalTabReloader& mock_reloader() { return *mock_reloader_; }
|
| @@ -135,91 +208,215 @@
|
| tab_helper().SetIsLoginTab();
|
| }
|
|
|
| + content::RenderViewHost* render_view_host1() {
|
| + return web_contents1_->GetRenderViewHost();
|
| + }
|
| +
|
| + content::RenderViewHost* render_view_host2() {
|
| + return web_contents2_->GetRenderViewHost();
|
| + }
|
| +
|
| private:
|
| + // Only the RenderViewHosts are used.
|
| + scoped_ptr<content::WebContents> web_contents1_;
|
| + scoped_ptr<content::WebContents> web_contents2_;
|
| +
|
| CaptivePortalTabHelper tab_helper_;
|
|
|
| // Owned by |tab_helper_|.
|
| testing::StrictMock<MockCaptivePortalTabReloader>* mock_reloader_;
|
|
|
| + content::TestBrowserThread ui_thread_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(CaptivePortalTabHelperTest);
|
| };
|
|
|
| TEST_F(CaptivePortalTabHelperTest, HttpSuccess) {
|
| - SimulateSuccess(GURL(kHttpUrl));
|
| - tab_helper().DidStopLoading(NULL);
|
| + SimulateSuccess(GURL(kHttpUrl), render_view_host1());
|
| + tab_helper().DidStopLoading(render_view_host1());
|
| }
|
|
|
| TEST_F(CaptivePortalTabHelperTest, HttpTimeout) {
|
| - SimulateTimeout(GURL(kHttpUrl));
|
| - tab_helper().DidStopLoading(NULL);
|
| + SimulateTimeout(GURL(kHttpUrl), render_view_host1());
|
| + tab_helper().DidStopLoading(render_view_host1());
|
| }
|
|
|
| // Same as above, but simulates what happens when the Link Doctor is enabled,
|
| // which adds another provisional load/commit for the error page, after the
|
| // first two.
|
| TEST_F(CaptivePortalTabHelperTest, HttpTimeoutLinkDoctor) {
|
| - SimulateTimeout(GURL(kHttpUrl));
|
| + SimulateTimeout(GURL(kHttpUrl), render_view_host1());
|
|
|
| EXPECT_CALL(mock_reloader(), OnLoadStart(false)).Times(1);
|
| // Provisional load starts for the error page.
|
| tab_helper().DidStartProvisionalLoadForFrame(
|
| - 1, true, GURL(kErrorPageUrl), true, NULL);
|
| + 1, true, GURL(kErrorPageUrl), true, render_view_host1());
|
|
|
| EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::OK)).Times(1);
|
| tab_helper().DidCommitProvisionalLoadForFrame(
|
| - 1, true, GURL(kErrorPageUrl), content::PAGE_TRANSITION_LINK, NULL);
|
| - tab_helper().DidStopLoading(NULL);
|
| + 1, true, GURL(kErrorPageUrl), content::PAGE_TRANSITION_LINK,
|
| + render_view_host1());
|
| + tab_helper().DidStopLoading(render_view_host1());
|
| }
|
|
|
| TEST_F(CaptivePortalTabHelperTest, HttpsSuccess) {
|
| - SimulateSuccess(GURL(kHttpsUrl));
|
| - tab_helper().DidStopLoading(NULL);
|
| + SimulateSuccess(GURL(kHttpsUrl), render_view_host1());
|
| + tab_helper().DidStopLoading(render_view_host1());
|
| EXPECT_FALSE(tab_helper().IsLoginTab());
|
| }
|
|
|
| TEST_F(CaptivePortalTabHelperTest, HttpsTimeout) {
|
| - SimulateTimeout(GURL(kHttpsUrl));
|
| + SimulateTimeout(GURL(kHttpsUrl), render_view_host1());
|
| // Make sure no state was carried over from the timeout.
|
| - SimulateSuccess(GURL(kHttpsUrl));
|
| + SimulateSuccess(GURL(kHttpsUrl), render_view_host1());
|
| EXPECT_FALSE(tab_helper().IsLoginTab());
|
| }
|
|
|
| TEST_F(CaptivePortalTabHelperTest, HttpsAbort) {
|
| - SimulateAbort(GURL(kHttpsUrl));
|
| + SimulateAbort(GURL(kHttpsUrl), render_view_host1(), kSameProcess);
|
| // Make sure no state was carried over from the abort.
|
| - SimulateSuccess(GURL(kHttpsUrl));
|
| + SimulateSuccess(GURL(kHttpsUrl), render_view_host1());
|
| EXPECT_FALSE(tab_helper().IsLoginTab());
|
| }
|
|
|
| +// A cross-process navigation is aborted by a same-site navigation.
|
| +TEST_F(CaptivePortalTabHelperTest, AbortCrossProcess) {
|
| + SimulateAbort(GURL(kHttpsUrl2), render_view_host2(), kCrossProcess);
|
| + // Make sure no state was carried over from the abort.
|
| + SimulateSuccess(GURL(kHttpUrl), render_view_host1());
|
| + EXPECT_FALSE(tab_helper().IsLoginTab());
|
| +}
|
| +
|
| // Abort while there's a provisional timeout error page loading.
|
| TEST_F(CaptivePortalTabHelperTest, HttpsAbortTimeout) {
|
| - SimulateAbortTimeout(GURL(kHttpsUrl));
|
| + SimulateAbortTimeout(GURL(kHttpsUrl), render_view_host1(), kSameProcess);
|
| // Make sure no state was carried over from the timeout or the abort.
|
| - SimulateSuccess(GURL(kHttpsUrl));
|
| + SimulateSuccess(GURL(kHttpsUrl), render_view_host1());
|
| EXPECT_FALSE(tab_helper().IsLoginTab());
|
| }
|
|
|
| +// Abort a cross-process navigation while there's a provisional timeout error
|
| +// page loading.
|
| +TEST_F(CaptivePortalTabHelperTest, AbortTimeoutCrossProcess) {
|
| + SimulateAbortTimeout(GURL(kHttpsUrl2), render_view_host2(),
|
| + kCrossProcess);
|
| + // Make sure no state was carried over from the timeout or the abort.
|
| + SimulateSuccess(GURL(kHttpsUrl), render_view_host1());
|
| + EXPECT_FALSE(tab_helper().IsLoginTab());
|
| +}
|
| +
|
| +// Opposite case from above - a same-process error page is aborted in favor of
|
| +// a cross-process one.
|
| +TEST_F(CaptivePortalTabHelperTest, HttpsAbortTimeoutForCrossProcess) {
|
| + SimulateAbortTimeout(GURL(kHttpsUrl), render_view_host1(), kSameProcess);
|
| + // Make sure no state was carried over from the timeout or the abort.
|
| + SimulateSuccess(GURL(kHttpsUrl2), render_view_host2());
|
| + EXPECT_FALSE(tab_helper().IsLoginTab());
|
| +}
|
| +
|
| +// A provisional same-site navigation is interrupted by a cross-process
|
| +// navigation without sending an abort first.
|
| +TEST_F(CaptivePortalTabHelperTest, UnexpectedProvisionalLoad) {
|
| + GURL same_site_url = GURL(kHttpUrl);
|
| + GURL cross_process_url = GURL(kHttpsUrl2);
|
| +
|
| + // A same-site load for the original RenderViewHost starts.
|
| + EXPECT_CALL(mock_reloader(),
|
| + OnLoadStart(same_site_url.SchemeIsSecure())).Times(1);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, same_site_url, false, render_view_host1());
|
| +
|
| + // It's unexpectedly interrupted by a cross-process navigation, which starts
|
| + // navigating before the old navigation cancels. We generate an abort message
|
| + // for the old navigation.
|
| + EXPECT_CALL(mock_reloader(), OnAbort()).Times(1);
|
| + EXPECT_CALL(mock_reloader(),
|
| + OnLoadStart(cross_process_url.SchemeIsSecure())).Times(1);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, cross_process_url, false, render_view_host2());
|
| +
|
| + // The cross-process navigation fails.
|
| + tab_helper().DidFailProvisionalLoad(
|
| + 1, true, cross_process_url, net::ERR_FAILED, string16(),
|
| + render_view_host2());
|
| +
|
| + // The same-site navigation finally is aborted.
|
| + tab_helper().DidFailProvisionalLoad(
|
| + 1, true, same_site_url, net::ERR_ABORTED, string16(),
|
| + render_view_host1());
|
| +
|
| + // The provisional load starts for the error page for the cross-process
|
| + // navigation.
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, GURL(kErrorPageUrl), true, render_view_host2());
|
| +
|
| + EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_FAILED)).Times(1);
|
| + tab_helper().DidCommitProvisionalLoadForFrame(
|
| + 1, true, GURL(kErrorPageUrl), content::PAGE_TRANSITION_TYPED,
|
| + render_view_host2());
|
| +}
|
| +
|
| +// Similar to the above test, except the original RenderViewHost manages to
|
| +// commit before its navigation is aborted.
|
| +TEST_F(CaptivePortalTabHelperTest, UnexpectedCommit) {
|
| + GURL same_site_url = GURL(kHttpUrl);
|
| + GURL cross_process_url = GURL(kHttpsUrl2);
|
| +
|
| + // A same-site load for the original RenderViewHost starts.
|
| + EXPECT_CALL(mock_reloader(),
|
| + OnLoadStart(same_site_url.SchemeIsSecure())).Times(1);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, same_site_url, false, render_view_host1());
|
| +
|
| + // It's unexpectedly interrupted by a cross-process navigation, which starts
|
| + // navigating before the old navigation cancels. We generate an abort message
|
| + // for the old navigation.
|
| + EXPECT_CALL(mock_reloader(), OnAbort()).Times(1);
|
| + EXPECT_CALL(mock_reloader(),
|
| + OnLoadStart(cross_process_url.SchemeIsSecure())).Times(1);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, cross_process_url, false, render_view_host2());
|
| +
|
| + // The cross-process navigation fails.
|
| + tab_helper().DidFailProvisionalLoad(
|
| + 1, true, cross_process_url, net::ERR_FAILED, string16(),
|
| + render_view_host2());
|
| +
|
| + // The same-site navigation succeeds.
|
| + EXPECT_CALL(mock_reloader(), OnAbort()).Times(1);
|
| + EXPECT_CALL(mock_reloader(),
|
| + OnLoadStart(same_site_url.SchemeIsSecure())).Times(1);
|
| + EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::OK)).Times(1);
|
| + tab_helper().DidCommitProvisionalLoadForFrame(
|
| + 1, true, same_site_url, content::PAGE_TRANSITION_LINK,
|
| + render_view_host1());
|
| +}
|
| +
|
| // Simulates navigations for a number of subframes, and makes sure no
|
| // CaptivePortalTabHelper function is called.
|
| TEST_F(CaptivePortalTabHelperTest, HttpsSubframe) {
|
| GURL url = GURL(kHttpsUrl);
|
| // Normal load.
|
| - tab_helper().DidStartProvisionalLoadForFrame(1, false, url, false, NULL);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, false, url, false, render_view_host1());
|
| tab_helper().DidCommitProvisionalLoadForFrame(
|
| - 1, false, url, content::PAGE_TRANSITION_LINK, NULL);
|
| + 1, false, url, content::PAGE_TRANSITION_LINK, render_view_host1());
|
|
|
| // Timeout.
|
| - tab_helper().DidStartProvisionalLoadForFrame(2, false, url, false, NULL);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 2, false, url, false, render_view_host1());
|
| tab_helper().DidFailProvisionalLoad(
|
| - 2, false, url, net::ERR_TIMED_OUT, string16(), NULL);
|
| - tab_helper().DidStartProvisionalLoadForFrame(2, false, url, true, NULL);
|
| + 2, false, url, net::ERR_TIMED_OUT, string16(), render_view_host1());
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 2, false, url, true, render_view_host1());
|
| tab_helper().DidFailProvisionalLoad(
|
| - 2, false, url, net::ERR_ABORTED, string16(), NULL);
|
| + 2, false, url, net::ERR_ABORTED, string16(), render_view_host1());
|
|
|
| // Abort.
|
| - tab_helper().DidStartProvisionalLoadForFrame(3, false, url, false, NULL);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 3, false, url, false, render_view_host1());
|
| tab_helper().DidFailProvisionalLoad(
|
| - 3, false, url, net::ERR_ABORTED, string16(), NULL);
|
| + 3, false, url, net::ERR_ABORTED, string16(), render_view_host1());
|
| }
|
|
|
| // Simulates a subframe erroring out at the same time as a provisional load,
|
| @@ -235,96 +432,141 @@
|
| // Loads start.
|
| EXPECT_CALL(mock_reloader(), OnLoadStart(url.SchemeIsSecure())).Times(1);
|
| tab_helper().DidStartProvisionalLoadForFrame(
|
| - frame_id, true, url, false, NULL);
|
| + frame_id, true, url, false, render_view_host1());
|
| tab_helper().DidStartProvisionalLoadForFrame(
|
| - subframe_id, false, url, false, NULL);
|
| + subframe_id, false, url, false, render_view_host1());
|
|
|
| // Loads return errors.
|
| tab_helper().DidFailProvisionalLoad(
|
| - frame_id, true, url, net::ERR_UNEXPECTED, string16(), NULL);
|
| + frame_id, true, url, net::ERR_UNEXPECTED, string16(),
|
| + render_view_host1());
|
| tab_helper().DidFailProvisionalLoad(
|
| - subframe_id, false, url, net::ERR_TIMED_OUT, string16(), NULL);
|
| + subframe_id, false, url, net::ERR_TIMED_OUT, string16(),
|
| + render_view_host1());
|
|
|
| // Provisional load starts for the error pages.
|
| tab_helper().DidStartProvisionalLoadForFrame(
|
| - frame_id, true, url, true, NULL);
|
| + frame_id, true, url, true, render_view_host1());
|
| tab_helper().DidStartProvisionalLoadForFrame(
|
| - subframe_id, false, url, true, NULL);
|
| + subframe_id, false, url, true, render_view_host1());
|
|
|
| // Error page load finishes.
|
| tab_helper().DidCommitProvisionalLoadForFrame(
|
| - subframe_id, false, url, content::PAGE_TRANSITION_AUTO_SUBFRAME, NULL);
|
| + subframe_id, false, url, content::PAGE_TRANSITION_AUTO_SUBFRAME,
|
| + render_view_host1());
|
| EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_UNEXPECTED)).Times(1);
|
| tab_helper().DidCommitProvisionalLoadForFrame(
|
| - frame_id, true, url, content::PAGE_TRANSITION_LINK, NULL);
|
| + frame_id, true, url, content::PAGE_TRANSITION_LINK,
|
| + render_view_host1());
|
| }
|
|
|
| // Simulates an HTTP to HTTPS redirect, which then times out.
|
| TEST_F(CaptivePortalTabHelperTest, HttpToHttpsRedirectTimeout) {
|
| - GURL http_url("http://mail.google.com");
|
| + GURL http_url(kHttpUrl);
|
| EXPECT_CALL(mock_reloader(), OnLoadStart(false)).Times(1);
|
| - tab_helper().DidStartProvisionalLoadForFrame(1, true, http_url, false, NULL);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, http_url, false, render_view_host1());
|
|
|
| - GURL https_url("https://mail.google.com");
|
| + GURL https_url(kHttpsUrl);
|
| EXPECT_CALL(mock_reloader(), OnRedirect(true)).Times(1);
|
| - OnRedirect(1, https_url);
|
| + OnRedirect(ResourceType::MAIN_FRAME, https_url,
|
| + render_view_host1()->GetProcess()->GetID());
|
|
|
| tab_helper().DidFailProvisionalLoad(
|
| - 1, true, https_url, net::ERR_TIMED_OUT, string16(), NULL);
|
| + 1, true, https_url, net::ERR_TIMED_OUT, string16(),
|
| + render_view_host1());
|
|
|
| // Provisional load starts for the error page.
|
| tab_helper().DidStartProvisionalLoadForFrame(
|
| - 1, true, GURL(kErrorPageUrl), true, NULL);
|
| + 1, true, GURL(kErrorPageUrl), true, render_view_host1());
|
|
|
| EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_TIMED_OUT)).Times(1);
|
| tab_helper().DidCommitProvisionalLoadForFrame(
|
| - 1, true, GURL(kErrorPageUrl), content::PAGE_TRANSITION_LINK, NULL);
|
| + 1, true, GURL(kErrorPageUrl), content::PAGE_TRANSITION_LINK,
|
| + render_view_host1());
|
| }
|
|
|
| // Simulates an HTTPS to HTTP redirect.
|
| TEST_F(CaptivePortalTabHelperTest, HttpsToHttpRedirect) {
|
| - GURL https_url("https://mail.google.com");
|
| - EXPECT_CALL(mock_reloader(), OnLoadStart(true)).Times(1);
|
| - tab_helper().DidStartProvisionalLoadForFrame(1, true, https_url, false, NULL);
|
| + GURL https_url(kHttpsUrl);
|
| + EXPECT_CALL(mock_reloader(),
|
| + OnLoadStart(https_url.SchemeIsSecure())).Times(1);
|
| + tab_helper().DidStartProvisionalLoadForFrame(1, true, https_url, false,
|
| + render_view_host1());
|
|
|
| - GURL http_url("http://mail.google.com");
|
| - EXPECT_CALL(mock_reloader(), OnRedirect(false)).Times(1);
|
| - OnRedirect(1, http_url);
|
| + GURL http_url(kHttpUrl);
|
| + EXPECT_CALL(mock_reloader(), OnRedirect(http_url.SchemeIsSecure())).Times(1);
|
| + OnRedirect(ResourceType::MAIN_FRAME, http_url,
|
| + render_view_host1()->GetProcess()->GetID());
|
|
|
| EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::OK)).Times(1);
|
| tab_helper().DidCommitProvisionalLoadForFrame(
|
| - 1, true, http_url, content::PAGE_TRANSITION_LINK, NULL);
|
| + 1, true, http_url, content::PAGE_TRANSITION_LINK,
|
| + render_view_host1());
|
| }
|
|
|
| // Simulates an HTTPS to HTTPS redirect.
|
| TEST_F(CaptivePortalTabHelperTest, HttpToHttpRedirect) {
|
| - GURL https_url("https://mail.google.com");
|
| - EXPECT_CALL(mock_reloader(), OnLoadStart(true)).Times(1);
|
| - tab_helper().DidStartProvisionalLoadForFrame(1, true, https_url, false, NULL);
|
| + GURL http_url(kHttpUrl);
|
| + EXPECT_CALL(mock_reloader(),
|
| + OnLoadStart(http_url.SchemeIsSecure())).Times(1);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, http_url, false, render_view_host1());
|
|
|
| - GURL http_url("https://www.google.com");
|
| - EXPECT_CALL(mock_reloader(), OnRedirect(true)).Times(1);
|
| - OnRedirect(1, http_url);
|
| + EXPECT_CALL(mock_reloader(), OnRedirect(http_url.SchemeIsSecure())).Times(1);
|
| + OnRedirect(ResourceType::MAIN_FRAME, http_url,
|
| + render_view_host1()->GetProcess()->GetID());
|
|
|
| EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::OK)).Times(1);
|
| tab_helper().DidCommitProvisionalLoadForFrame(
|
| - 1, true, http_url, content::PAGE_TRANSITION_LINK, NULL);
|
| + 1, true, http_url, content::PAGE_TRANSITION_LINK,
|
| + render_view_host1());
|
| }
|
|
|
| // Simulates redirect of a subframe.
|
| TEST_F(CaptivePortalTabHelperTest, SubframeRedirect) {
|
| - GURL http_url("http://mail.google.com");
|
| + GURL http_url(kHttpUrl);
|
| EXPECT_CALL(mock_reloader(), OnLoadStart(false)).Times(1);
|
| - tab_helper().DidStartProvisionalLoadForFrame(1, true, http_url, false, NULL);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, http_url, false, render_view_host1());
|
|
|
| - GURL https_url("https://mail.google.com");
|
| - OnRedirect(2, https_url);
|
| + GURL https_url(kHttpsUrl);
|
| + OnRedirect(ResourceType::SUB_FRAME, https_url,
|
| + render_view_host1()->GetProcess()->GetID());
|
|
|
| EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::OK)).Times(1);
|
| tab_helper().DidCommitProvisionalLoadForFrame(
|
| - 1, true, GURL(kErrorPageUrl), content::PAGE_TRANSITION_LINK, NULL);
|
| + 1, true, GURL(kErrorPageUrl), content::PAGE_TRANSITION_LINK,
|
| + render_view_host1());
|
| }
|
|
|
| +// Simulates a redirect, for another RenderViewHost.
|
| +TEST_F(CaptivePortalTabHelperTest, OtherRenderViewHostRedirect) {
|
| + GURL http_url(kHttpUrl);
|
| + EXPECT_CALL(mock_reloader(), OnLoadStart(false)).Times(1);
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, http_url, false, render_view_host1());
|
| +
|
| + // Another RenderViewHost sees a redirect. None of the reloader's functions
|
| + // should be called.
|
| + GURL https_url(kHttpsUrl);
|
| + OnRedirect(ResourceType::MAIN_FRAME, https_url,
|
| + render_view_host2()->GetProcess()->GetID());
|
| +
|
| + tab_helper().DidFailProvisionalLoad(
|
| + 1, true, https_url, net::ERR_TIMED_OUT, string16(),
|
| + render_view_host1());
|
| +
|
| + // Provisional load starts for the error page.
|
| + tab_helper().DidStartProvisionalLoadForFrame(
|
| + 1, true, GURL(kErrorPageUrl), true, render_view_host1());
|
| +
|
| + EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_TIMED_OUT)).Times(1);
|
| + tab_helper().DidCommitProvisionalLoadForFrame(
|
| + 1, true, GURL(kErrorPageUrl), content::PAGE_TRANSITION_LINK,
|
| + render_view_host1());
|
| +}
|
| +
|
| TEST_F(CaptivePortalTabHelperTest, LoginTabLogin) {
|
| EXPECT_FALSE(tab_helper().IsLoginTab());
|
| SetIsLoginTab();
|
|
|