diff options
author | tburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-26 20:40:13 +0000 |
---|---|---|
committer | tburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-26 20:40:13 +0000 |
commit | 5eeb73e4f17c2e46bcf1850f8833a686f55fdd15 (patch) | |
tree | 6e2252b85edeb3132ad2337c5eaa00d2b298944c /chrome/browser/prerender/prerender_browsertest.cc | |
parent | 4aeda5795fa3d1a3b3e5f7ed71c2acbc41d94a6d (diff) | |
download | chromium_src-5eeb73e4f17c2e46bcf1850f8833a686f55fdd15.zip chromium_src-5eeb73e4f17c2e46bcf1850f8833a686f55fdd15.tar.gz chromium_src-5eeb73e4f17c2e46bcf1850f8833a686f55fdd15.tar.bz2 |
Adding tests to verify that WOULD_HAVE_BEEN_PRERENDERED works for
both the control group and for match complete dummys in the case of
cancellations in the prerender group.
R=cbentzel@chromium.org, dominich@chromium.org
Review URL: https://chromiumcodereview.appspot.com/9271058
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@119279 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/prerender/prerender_browsertest.cc')
-rw-r--r-- | chrome/browser/prerender/prerender_browsertest.cc | 60 |
1 files changed, 49 insertions, 11 deletions
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc index 5cce9b2..cc65a61 100644 --- a/chrome/browser/prerender/prerender_browsertest.cc +++ b/chrome/browser/prerender/prerender_browsertest.cc @@ -415,6 +415,16 @@ class FakeDevToolsClientHost : public DevToolsClientHost { virtual void TabReplaced(WebContents* new_tab) OVERRIDE {} }; +class RestorePrerenderMode { + public: + RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) { + } + + ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); } + private: + PrerenderManager::PrerenderManagerMode prev_mode_; +}; + } // namespace class PrerenderBrowserTest : public InProcessBrowserTest { @@ -762,17 +772,21 @@ class PrerenderBrowserTest : public InProcessBrowserTest { if (disposition == NEW_BACKGROUND_TAB) GetPrerenderContents()->set_should_be_shown(false); - // In the case of zero loads, need to wait for the page load to complete - // before running any Javascript. scoped_ptr<ui_test_utils::WindowedNotificationObserver> page_load_observer; - WebContents* web_contents = - GetPrerenderContents()->prerender_contents()->web_contents(); - if (GetPrerenderContents()->number_of_loads() == 0) { - page_load_observer.reset( - new ui_test_utils::WindowedNotificationObserver( - content::NOTIFICATION_LOAD_STOP, - content::Source<NavigationController>( - &web_contents->GetController()))); + WebContents* web_contents = NULL; + + if (GetPrerenderContents()->prerender_contents()) { + // In the case of zero loads, need to wait for the page load to complete + // before running any Javascript. + web_contents = + GetPrerenderContents()->prerender_contents()->web_contents(); + if (GetPrerenderContents()->number_of_loads() == 0) { + page_load_observer.reset( + new ui_test_utils::WindowedNotificationObserver( + content::NOTIFICATION_LOAD_STOP, + content::Source<NavigationController>( + &web_contents->GetController()))); + } } // ui_test_utils::NavigateToURL waits until DidStopLoading is called on @@ -790,7 +804,7 @@ class PrerenderBrowserTest : public InProcessBrowserTest { // Make sure the PrerenderContents found earlier was used or removed. EXPECT_TRUE(GetPrerenderContents() == NULL); - if (call_javascript_) { + if (call_javascript_ && web_contents) { if (page_load_observer.get()) page_load_observer->Wait(); @@ -1912,4 +1926,28 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderSessionStorage) { GoBackToPageBeforePrerender(browser()); } +// Checks that the control group works. A JS alert cannot be detected in the +// control group. +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, ControlGroup) { + RestorePrerenderMode restore_prerender_mode; + PrerenderManager::SetMode( + PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); + PrerenderTestURL("files/prerender/prerender_alert_before_onload.html", + FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); + NavigateToDestURL(); +} + +// Make sure that the MatchComplete dummy works in the normal case. Once +// a prerender is cancelled because of a script, a dummy must be created to +// account for the MatchComplete case, and it must have a final status of +// FINAL_STATUS_WOULD_HAVE_BEEN_USED. +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) { + std::deque<FinalStatus> expected_final_status_queue; + expected_final_status_queue.push_back(FINAL_STATUS_JAVASCRIPT_ALERT); + expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); + PrerenderTestURL("files/prerender/prerender_alert_before_onload.html", + expected_final_status_queue, 1); + NavigateToDestURL(); +} + } // namespace prerender |