Chromium Code Reviews| Index: chrome/browser/prerender/prerender_browsertest.cc |
| diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc |
| index bfed1d6fa6cb2ada28b9e1939fbd2e04030d93e0..585b0e61da987df276f17d2198659196f2cc592e 100644 |
| --- a/chrome/browser/prerender/prerender_browsertest.cc |
| +++ b/chrome/browser/prerender/prerender_browsertest.cc |
| @@ -49,6 +49,18 @@ std::string CreateServerRedirect(const std::string& dest_url) { |
| return kServerRedirectBase + dest_url; |
| } |
| +// Returns true iff the final status is one in which the prerendered |
| +// page should pre prerendered correctly. The page still may not be used. |
|
cbentzel
2011/05/04 17:10:15
Nit: prerender correctly rather than pre prerender
Shishir
2011/05/05 23:09:54
Done.
|
| +bool ShouldRenderPrerenderedPageCorrectly(FinalStatus status) { |
| + switch (status) { |
| + case FINAL_STATUS_USED: |
| + case FINAL_STATUS_WINDOW_OPENER: |
| + return true; |
| + default: |
| + return false; |
| + } |
| +} |
| + |
| // PrerenderContents that stops the UI message loop on DidStopLoading(). |
| class TestPrerenderContents : public PrerenderContents { |
| public: |
| @@ -101,7 +113,7 @@ class TestPrerenderContents : public PrerenderContents { |
| virtual void DidStopLoading() OVERRIDE { |
| PrerenderContents::DidStopLoading(); |
| ++number_of_loads_; |
| - if (expected_final_status_ == FINAL_STATUS_USED && |
| + if (ShouldRenderPrerenderedPageCorrectly(expected_final_status_) && |
| number_of_loads_ >= expected_number_of_loads_) { |
| MessageLoopForUI::current()->Quit(); |
| } else if (expected_final_status_ == FINAL_STATUS_RENDERER_CRASHED) { |
| @@ -217,6 +229,14 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
| NavigateToURLImpl(dest_url_); |
| } |
| + void OpenDestUrlInNewWindowViaJs() const { |
| + OpenDestUrlInNewWindowViaJsImpl(); |
| + } |
| + |
| + void OpenDestUrlInNewWindowViaClick() const { |
| + OpenDestUrlInNewWindowViaClickImpl(); |
| + } |
| + |
| // Should be const but test_server()->GetURL(...) is not const. |
| void NavigateToURL(const std::string& dest_html_file) { |
| GURL dest_url = test_server()->GetURL(dest_html_file); |
| @@ -307,29 +327,49 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
| static_cast<TestPrerenderContents*>( |
| prerender_manager()->FindEntry(dest_url_)); |
| - switch (expected_final_status) { |
| - case FINAL_STATUS_USED: { |
| - ASSERT_TRUE(prerender_contents != NULL); |
| - |
| - if (call_javascript_) { |
| - // Check if page behaves as expected while in prerendered state. |
| - bool prerender_test_result = false; |
| - ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
| - prerender_contents->render_view_host(), L"", |
| - L"window.domAutomationController.send(DidPrerenderPass())", |
| - &prerender_test_result)); |
| - EXPECT_TRUE(prerender_test_result); |
| - } |
| - break; |
| + if (ShouldRenderPrerenderedPageCorrectly(expected_final_status)) { |
| + ASSERT_TRUE(prerender_contents != NULL); |
| + |
| + if (call_javascript_) { |
| + // Check if page behaves as expected while in prerendered state. |
| + bool prerender_test_result = false; |
| + ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
| + prerender_contents->render_view_host(), L"", |
| + L"window.domAutomationController.send(DidPrerenderPass())", |
| + &prerender_test_result)); |
| + EXPECT_TRUE(prerender_test_result); |
| } |
| - default: |
| - // In the failure case, we should have removed dest_url_ from the |
| - // prerender_manager. |
| - EXPECT_TRUE(prerender_contents == NULL); |
| - break; |
| + } else { |
| + // In the failure case, we should have removed dest_url_ from the |
| + // prerender_manager. |
| + EXPECT_TRUE(prerender_contents == NULL); |
| } |
| } |
| + void OpenDestUrlInNewWindowViaClickImpl() const { |
| + // Make sure in navigating we have a URL to use in the PrerenderManager. |
| + EXPECT_TRUE(prerender_manager()->FindEntry(dest_url_) != NULL); |
| + |
| + bool click_prerendered_link_result = false; |
| + ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
| + browser()->GetSelectedTabContents()->render_view_host(), L"", |
| + L"window.domAutomationController.send(ClickOpenPrerenderedLinkInNewWindow())", |
| + &click_prerendered_link_result)); |
| + EXPECT_TRUE(click_prerendered_link_result); |
| + } |
| + |
| + void OpenDestUrlInNewWindowViaJsImpl() const { |
| + // Make sure in navigating we have a URL to use in the PrerenderManager. |
| + EXPECT_TRUE(prerender_manager()->FindEntry(dest_url_) != NULL); |
| + |
| + bool open_window_result = false; |
| + ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
| + browser()->GetSelectedTabContents()->render_view_host(), L"", |
| + L"window.domAutomationController.send(JsOpenPrerenderedLinkInNewWindow())", |
| + &open_window_result)); |
| + EXPECT_TRUE(open_window_result); |
| + } |
| + |
| void NavigateToURLImpl(const GURL& dest_url) const { |
| // Make sure in navigating we have a URL to use in the PrerenderManager. |
| EXPECT_TRUE(prerender_manager()->FindEntry(dest_url_) != NULL); |
| @@ -886,4 +926,27 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrDelete) { |
| 1); |
| } |
| +// Checks that if a page is opened in a new window by javascript the |
| +// prerendered page is not used. |
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| + PrerenderWindowOpenerJsOpenInNewPageTest) { |
| + PrerenderTestURL("files/prerender/prerender_page.html", |
| + FINAL_STATUS_WINDOW_OPENER, |
| + 1); |
| + OpenDestUrlInNewWindowViaJs(); |
|
cbentzel
2011/05/04 17:10:15
Should these also do a normal NavigateToURL and ma
Shishir
2011/05/05 23:09:54
As discussed we dont use the prerendered page.
|
| +} |
| + |
| +// Checks that if a page is opened due to click on a href with target="_blank" |
| +// the prerendered page is not used. |
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| + PrerenderWindowOpenerClickOpenInNewPageTest) { |
| + PrerenderTestURL("files/prerender/prerender_page.html", |
| + FINAL_STATUS_WINDOW_OPENER, |
| + 1); |
| + OpenDestUrlInNewWindowViaClick(); |
| +} |
| + |
| +// TODO(shishir): Add a test for the case when the page having the |
| +// prerendering link already has an opener set. |
| + |
| } // namespace prerender |