summaryrefslogtreecommitdiffstats
path: root/chrome/browser/prerender/prerender_browsertest.cc
diff options
context:
space:
mode:
authortburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-26 20:40:13 +0000
committertburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-26 20:40:13 +0000
commit5eeb73e4f17c2e46bcf1850f8833a686f55fdd15 (patch)
tree6e2252b85edeb3132ad2337c5eaa00d2b298944c /chrome/browser/prerender/prerender_browsertest.cc
parent4aeda5795fa3d1a3b3e5f7ed71c2acbc41d94a6d (diff)
downloadchromium_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.cc60
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