Index: chrome/browser/prerender/prerender_browsertest.cc |
=================================================================== |
--- chrome/browser/prerender/prerender_browsertest.cc (revision 98544) |
+++ chrome/browser/prerender/prerender_browsertest.cc (working copy) |
@@ -102,21 +102,19 @@ |
Profile* profile, |
const GURL& url, |
const GURL& referrer, |
- int expected_number_of_loads, |
+ int number_of_loads, |
FinalStatus expected_final_status) |
: PrerenderContents(prerender_manager, prerender_tracker, profile, |
url, referrer, ORIGIN_LINK_REL_PRERENDER, |
PrerenderManager::kNoExperiment), |
number_of_loads_(0), |
- expected_number_of_loads_(expected_number_of_loads), |
+ expected_number_of_loads_(number_of_loads), |
expected_final_status_(expected_final_status), |
new_render_view_host_(NULL), |
was_hidden_(false), |
was_shown_(false), |
should_be_shown_(expected_final_status == FINAL_STATUS_USED), |
quit_message_loop_on_destruction_(true) { |
- if (expected_number_of_loads == 0) |
- MessageLoopForUI::current()->Quit(); |
} |
virtual ~TestPrerenderContents() { |
@@ -128,8 +126,9 @@ |
// navigation, so this should be happen for every PrerenderContents for |
// which a RenderViewHost is created, regardless of whether or not it's |
// used. |
- if (new_render_view_host_) |
+ if (new_render_view_host_) { |
EXPECT_TRUE(was_hidden_); |
+ } |
// A used PrerenderContents will only be destroyed when we swap out |
// TabContents, at the end of a navigation caused by a call to |
@@ -186,8 +185,6 @@ |
quit_message_loop_on_destruction_ = value; |
} |
- int number_of_loads() { return number_of_loads_; } |
- |
private: |
virtual void OnRenderViewHostCreated( |
RenderViewHost* new_render_view_host) OVERRIDE { |
@@ -248,8 +245,11 @@ |
WaitForLoadPrerenderContentsFactory( |
int number_of_loads, |
const std::deque<FinalStatus>& expected_final_status_queue) |
- : number_of_loads_(number_of_loads), |
- expected_final_status_queue_(expected_final_status_queue) { |
+ : number_of_loads_(number_of_loads) { |
+ expected_final_status_queue_.resize(expected_final_status_queue.size()); |
+ std::copy(expected_final_status_queue.begin(), |
+ expected_final_status_queue.end(), |
+ expected_final_status_queue_.begin()); |
VLOG(1) << "Factory created with queue length " << |
expected_final_status_queue_.size(); |
} |
@@ -615,7 +615,7 @@ |
ASSERT_TRUE(prerender_contents != NULL); |
EXPECT_EQ(FINAL_STATUS_MAX, prerender_contents->final_status()); |
- if (call_javascript_ && total_navigations > 0) { |
+ if (call_javascript_) { |
// Check if page behaves as expected while in prerendered state. |
bool prerender_test_result = false; |
ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
@@ -625,7 +625,7 @@ |
EXPECT_TRUE(prerender_test_result); |
} |
} else { |
- // In the failure case, we should have removed |dest_url_| from the |
+ // In the failure case, we should have removed dest_url_ from the |
// prerender_manager. |
EXPECT_TRUE(prerender_contents == NULL); |
} |
@@ -641,18 +641,6 @@ |
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; |
- TabContents* tab_contents = |
- GetPrerenderContents()->prerender_contents()->tab_contents(); |
- if (GetPrerenderContents()->number_of_loads() == 0) { |
- page_load_observer.reset( |
- new ui_test_utils::WindowedNotificationObserver( |
- content::NOTIFICATION_LOAD_STOP, |
- Source<NavigationController>(&tab_contents->controller()))); |
- } |
- |
// ui_test_utils::NavigateToURL waits until DidStopLoading is called on |
// the current tab. As that tab is going to end up deleted, and may never |
// finish loading before that happens, exit the message loop on the deletion |
@@ -669,9 +657,24 @@ |
EXPECT_TRUE(GetPrerenderContents() == NULL); |
if (call_javascript_) { |
- if (page_load_observer.get()) |
- page_load_observer->Wait(); |
+ // Check if page behaved as expected when actually displayed. |
+ // Locate the navigated TabContents. |
+ TabContents* tab_contents = NULL; |
+ switch (disposition) { |
+ case CURRENT_TAB: |
+ case NEW_FOREGROUND_TAB: |
+ tab_contents = browser()->GetSelectedTabContents(); |
+ break; |
+ case NEW_BACKGROUND_TAB: |
+ tab_contents = |
+ browser()->GetTabContentsAt(browser()->active_index() + 1); |
+ break; |
+ default: |
+ ASSERT_TRUE(false) << "Unsupported creation disposition"; |
+ } |
+ ASSERT_TRUE(tab_contents); |
+ |
bool display_test_result = false; |
ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
tab_contents->render_view_host(), L"", |
@@ -707,14 +710,6 @@ |
NavigateToDestURL(); |
} |
-// Checks that the visibility API works when the prerender is quickly opened |
-// in a new tab before it stops loading. |
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityQuickSwitch) { |
- PrerenderTestURL("files/prerender/prerender_visibility_quick.html", |
- FINAL_STATUS_USED, 0); |
- NavigateToDestURL(); |
-} |
- |
// Checks that the visibility API works when opening a page in a new hidden |
// tab. |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityBackgroundTab) { |
@@ -724,15 +719,6 @@ |
NavigateToDestURLWithDisposition(NEW_BACKGROUND_TAB); |
} |
-// Checks that the visibility API works when opening a page in a new hidden |
-// tab, which is switched to before it stops loading. |
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
- PrerenderVisibilityBackgroundTabQuickSwitch) { |
- PrerenderTestURL("files/prerender/prerender_visibility_hidden_quick.html", |
- FINAL_STATUS_USED, 0); |
- NavigateToDestURLWithDisposition(NEW_BACKGROUND_TAB); |
-} |
- |
// Checks that the visibility API works when opening a page in a new foreground |
// tab. |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityForegroundTab) { |
@@ -742,15 +728,6 @@ |
NavigateToDestURLWithDisposition(NEW_FOREGROUND_TAB); |
} |
-// Checks that the visibility API works when the prerender is quickly opened |
-// in a new tab foreground before it stops loading. |
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
- PrerenderVisibilityForegroundTabQuickSwitch) { |
- PrerenderTestURL("files/prerender/prerender_visibility_quick.html", |
- FINAL_STATUS_USED, 0); |
- NavigateToDestURL(); |
-} |
- |
// Checks that the prerendering of a page is canceled correctly when a |
// Javascript alert is called. |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAlertBeforeOnload) { |