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 9f7d78723166d2f20ab5fb6f2f1446413d16d250..705eb66ae7ab68b00fcd0308e37e8568b6696d98 100644 |
| --- a/chrome/browser/prerender/prerender_browsertest.cc |
| +++ b/chrome/browser/prerender/prerender_browsertest.cc |
| @@ -168,18 +168,13 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
| } |
| void NavigateToDestURL() const { |
| - ui_test_utils::NavigateToURL(browser(), dest_url_); |
| - |
| - // Make sure the PrerenderContents found earlier was used or removed |
| - EXPECT_TRUE(prerender_manager()->FindEntry(dest_url_) == NULL); |
| + NavigateToURLImpl(dest_url_); |
| + } |
| - // Check if page behaved as expected when actually displayed. |
| - bool display_test_result = false; |
| - ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
| - browser()->GetSelectedTabContents()->render_view_host(), L"", |
| - L"window.domAutomationController.send(DidDisplayPass())", |
| - &display_test_result)); |
| - EXPECT_TRUE(display_test_result); |
| + // 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); |
| + NavigateToURLImpl(dest_url); |
| } |
| bool UrlIsInPrerenderManager(const std::string& html_file) { |
| @@ -204,8 +199,6 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
| return TaskManager::GetInstance()->model(); |
| } |
| - void set_dest_url(const GURL& dest_url) { dest_url_ = dest_url; } |
| - |
| private: |
| void PrerenderTestURLImpl( |
| const std::string& html_file, |
| @@ -279,6 +272,24 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
| } |
| } |
| + 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); |
| + |
| + ui_test_utils::NavigateToURL(browser(), dest_url); |
| + |
| + // Make sure the PrerenderContents found earlier was used or removed. |
| + EXPECT_TRUE(prerender_manager()->FindEntry(dest_url_) == NULL); |
| + |
| + // Check if page behaved as expected when actually displayed. |
| + bool display_test_result = false; |
| + ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
| + browser()->GetSelectedTabContents()->render_view_host(), L"", |
| + L"window.domAutomationController.send(DidDisplayPass())", |
| + &display_test_result)); |
| + EXPECT_TRUE(display_test_result); |
| + } |
| + |
| PrerenderManager* prerender_manager() const { |
| Profile* profile = browser()->GetSelectedTabContents()->profile(); |
| PrerenderManager* prerender_manager = profile->GetPrerenderManager(); |
| @@ -362,8 +373,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| CreateClientRedirect("files/prerender/prerender_page.html"), |
| FINAL_STATUS_USED, |
| 2); |
| - set_dest_url(test_server()->GetURL("files/prerender/prerender_page.html")); |
| - NavigateToDestURL(); |
| + NavigateToURL("files/prerender/prerender_page.html"); |
| } |
| // Checks that client-issued redirects to an https page will cancel prerenders. |
| @@ -441,8 +451,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| CreateServerRedirect("files/prerender/prerender_page.html"), |
| FINAL_STATUS_USED, |
| 1); |
| - set_dest_url(test_server()->GetURL("files/prerender/prerender_page.html")); |
| - NavigateToDestURL(); |
| + NavigateToURL("files/prerender/prerender_page.html"); |
| } |
| // TODO(cbentzel): Add server-redirect-to-https test. http://crbug.com/79182 |
| @@ -542,7 +551,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPopup) { |
| // Checks that renderers using excessive memory will be terminated. |
| -// Disabled, http://crbug.com/80324. |
| +// Disabled, http://crbug.com/77870. |
| IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| DISABLED_PrerenderExcessiveMemory) { |
| PrerenderTestURL("files/prerender/prerender_excessive_memory.html", |
| @@ -551,7 +560,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| } |
| // Checks that we don't prerender in an infinite loop. |
| -// Disabled, http://crbug.com/77323. |
| +// Disabled, http://crbug.com/80324. |
| IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderInfiniteLoop) { |
| const char* const kHtmlFileA = "prerender_infinite_a.html"; |
| const char* const kHtmlFileB = "prerender_infinite_b.html"; |
| @@ -671,4 +680,52 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowSize) { |
| NavigateToDestURL(); |
| } |
| +// Checks that we correctly use a prerendered page when navigating to a |
| +// fragment. |
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageNavigateFragment) { |
| + PrerenderTestURL("files/prerender/prerender_fragment.html", |
| + FINAL_STATUS_USED, |
| + 1); |
| + NavigateToURL("files/prerender/prerender_fragment.html#fragment"); |
| +} |
| + |
| +// Checks that we correctly use a prerendered page when we prerender a fragment |
| +// but navigate to the main page. |
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderFragmentNavigatePage) { |
| + PrerenderTestURL("files/prerender/prerender_page.html#fragment", |
| + FINAL_STATUS_USED, |
| + 1); |
| + NavigateToURL("files/prerender/prerender_page.html"); |
| +} |
| + |
| +// Checks that we correctly use a prerendered page when we prerender a fragment |
| +// but navigate to a different fragment on the same page. |
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| + PrerenderFragmentNavigateFragment) { |
| + PrerenderTestURL("files/prerender/prerender_fragment.html#other_fragment", |
| + FINAL_STATUS_USED, |
| + 1); |
| + NavigateToURL("files/prerender/prerender_fragment.html#fragment"); |
| +} |
| + |
| +// Checks that we correctly use a prerendered page when the page uses meta |
| +// http-equiv to refresh to a fragment on the same page. |
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| + PrerenderPageChangeFragmentRefresh) { |
|
cbentzel
2011/04/25 19:49:48
Nit: I'd name something like PrerenderClientRedire
dominich
2011/04/25 20:17:15
Done.
|
| + PrerenderTestURL("files/prerender/prerender_fragment_refresh.html", |
|
cbentzel
2011/04/25 19:49:48
You may be able to just use CreateClientRedirect("
dominich
2011/04/25 20:17:15
Done.
|
| + FINAL_STATUS_USED, |
| + 2); |
| + NavigateToURL("files/prerender/prerender_fragment_refresh.html"); |
| +} |
| + |
| +// Checks that we correctly use a prerendered page when the page uses JS to set |
| +// the window.location.hash to a fragment on the same page. |
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| + PrerenderPageChangeFragmentLocationHash) { |
| + PrerenderTestURL("files/prerender/prerender_fragment_location_hash.html", |
| + FINAL_STATUS_USED, |
| + 1); |
| + NavigateToURL("files/prerender/prerender_fragment_location_hash.html"); |
|
cbentzel
2011/04/25 19:49:48
How are you guaranteed that location is being set
dominich
2011/04/25 20:17:15
Done.
|
| +} |
| + |
| } // namespace prerender |