Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <deque> | 5 #include <deque> |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "chrome/browser/prerender/prerender_contents.h" | 10 #include "chrome/browser/prerender/prerender_contents.h" |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 161 void PrerenderTestURL( | 161 void PrerenderTestURL( |
| 162 const std::string& html_file, | 162 const std::string& html_file, |
| 163 const std::deque<FinalStatus>& expected_final_status_queue, | 163 const std::deque<FinalStatus>& expected_final_status_queue, |
| 164 int total_navigations) { | 164 int total_navigations) { |
| 165 PrerenderTestURLImpl(html_file, | 165 PrerenderTestURLImpl(html_file, |
| 166 expected_final_status_queue, | 166 expected_final_status_queue, |
| 167 total_navigations); | 167 total_navigations); |
| 168 } | 168 } |
| 169 | 169 |
| 170 void NavigateToDestURL() const { | 170 void NavigateToDestURL() const { |
| 171 ui_test_utils::NavigateToURL(browser(), dest_url_); | 171 NavigateToURLImpl(dest_url_); |
| 172 } | |
| 172 | 173 |
| 173 // Make sure the PrerenderContents found earlier was used or removed | 174 // Should be const but test_server()->GetURL(...) is not const. |
| 174 EXPECT_TRUE(prerender_manager()->FindEntry(dest_url_) == NULL); | 175 void NavigateToURL(const std::string& dest_html_file) { |
| 175 | 176 GURL dest_url = test_server()->GetURL(dest_html_file); |
| 176 // Check if page behaved as expected when actually displayed. | 177 NavigateToURLImpl(dest_url); |
| 177 bool display_test_result = false; | |
| 178 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( | |
| 179 browser()->GetSelectedTabContents()->render_view_host(), L"", | |
| 180 L"window.domAutomationController.send(DidDisplayPass())", | |
| 181 &display_test_result)); | |
| 182 EXPECT_TRUE(display_test_result); | |
| 183 } | 178 } |
| 184 | 179 |
| 185 bool UrlIsInPrerenderManager(const std::string& html_file) { | 180 bool UrlIsInPrerenderManager(const std::string& html_file) { |
| 186 GURL dest_url = test_server()->GetURL(html_file); | 181 GURL dest_url = test_server()->GetURL(html_file); |
| 187 return (prerender_manager()->FindEntry(dest_url) != NULL); | 182 return (prerender_manager()->FindEntry(dest_url) != NULL); |
| 188 } | 183 } |
| 189 | 184 |
| 190 bool UrlIsInPrerenderManager(const GURL& url) { | 185 bool UrlIsInPrerenderManager(const GURL& url) { |
| 191 return (prerender_manager()->FindEntry(url) != NULL); | 186 return (prerender_manager()->FindEntry(url) != NULL); |
| 192 } | 187 } |
| 193 | 188 |
| 194 bool UrlIsPendingInPrerenderManager(const std::string& html_file) { | 189 bool UrlIsPendingInPrerenderManager(const std::string& html_file) { |
| 195 GURL dest_url = test_server()->GetURL(html_file); | 190 GURL dest_url = test_server()->GetURL(html_file); |
| 196 return (prerender_manager()->FindPendingEntry(dest_url) != NULL); | 191 return (prerender_manager()->FindPendingEntry(dest_url) != NULL); |
| 197 } | 192 } |
| 198 | 193 |
| 199 void set_use_https_src(bool use_https_src_server) { | 194 void set_use_https_src(bool use_https_src_server) { |
| 200 use_https_src_server_ = use_https_src_server; | 195 use_https_src_server_ = use_https_src_server; |
| 201 } | 196 } |
| 202 | 197 |
| 203 TaskManagerModel* model() const { | 198 TaskManagerModel* model() const { |
| 204 return TaskManager::GetInstance()->model(); | 199 return TaskManager::GetInstance()->model(); |
| 205 } | 200 } |
| 206 | 201 |
| 207 void set_dest_url(const GURL& dest_url) { dest_url_ = dest_url; } | |
| 208 | |
| 209 private: | 202 private: |
| 210 void PrerenderTestURLImpl( | 203 void PrerenderTestURLImpl( |
| 211 const std::string& html_file, | 204 const std::string& html_file, |
| 212 const std::deque<FinalStatus>& expected_final_status_queue, | 205 const std::deque<FinalStatus>& expected_final_status_queue, |
| 213 int total_navigations) { | 206 int total_navigations) { |
| 214 ASSERT_TRUE(test_server()->Start()); | 207 ASSERT_TRUE(test_server()->Start()); |
| 215 dest_url_ = test_server()->GetURL(html_file); | 208 dest_url_ = test_server()->GetURL(html_file); |
| 216 | 209 |
| 217 std::vector<net::TestServer::StringPair> replacement_text; | 210 std::vector<net::TestServer::StringPair> replacement_text; |
| 218 replacement_text.push_back( | 211 replacement_text.push_back( |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 272 break; | 265 break; |
| 273 } | 266 } |
| 274 default: | 267 default: |
| 275 // In the failure case, we should have removed dest_url_ from the | 268 // In the failure case, we should have removed dest_url_ from the |
| 276 // prerender_manager. | 269 // prerender_manager. |
| 277 EXPECT_TRUE(prerender_contents == NULL); | 270 EXPECT_TRUE(prerender_contents == NULL); |
| 278 break; | 271 break; |
| 279 } | 272 } |
| 280 } | 273 } |
| 281 | 274 |
| 275 void NavigateToURLImpl(const GURL& dest_url) const { | |
| 276 // Make sure in navigating we have a URL to use in the PrerenderManager. | |
| 277 EXPECT_TRUE(prerender_manager()->FindEntry(dest_url_) != NULL); | |
| 278 | |
| 279 ui_test_utils::NavigateToURL(browser(), dest_url); | |
| 280 | |
| 281 // Make sure the PrerenderContents found earlier was used or removed. | |
| 282 EXPECT_TRUE(prerender_manager()->FindEntry(dest_url_) == NULL); | |
| 283 | |
| 284 // Check if page behaved as expected when actually displayed. | |
| 285 bool display_test_result = false; | |
| 286 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( | |
| 287 browser()->GetSelectedTabContents()->render_view_host(), L"", | |
| 288 L"window.domAutomationController.send(DidDisplayPass())", | |
| 289 &display_test_result)); | |
| 290 EXPECT_TRUE(display_test_result); | |
| 291 } | |
| 292 | |
| 282 PrerenderManager* prerender_manager() const { | 293 PrerenderManager* prerender_manager() const { |
| 283 Profile* profile = browser()->GetSelectedTabContents()->profile(); | 294 Profile* profile = browser()->GetSelectedTabContents()->profile(); |
| 284 PrerenderManager* prerender_manager = profile->GetPrerenderManager(); | 295 PrerenderManager* prerender_manager = profile->GetPrerenderManager(); |
| 285 return prerender_manager; | 296 return prerender_manager; |
| 286 } | 297 } |
| 287 | 298 |
| 288 WaitForLoadPrerenderContentsFactory* prc_factory_; | 299 WaitForLoadPrerenderContentsFactory* prc_factory_; |
| 289 GURL dest_url_; | 300 GURL dest_url_; |
| 290 bool use_https_src_server_; | 301 bool use_https_src_server_; |
| 291 }; | 302 }; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 355 | 366 |
| 356 // Checks that client-issued redirects work with prerendering. | 367 // Checks that client-issued redirects work with prerendering. |
| 357 // This version navigates to the final destination page, rather than the | 368 // This version navigates to the final destination page, rather than the |
| 358 // page which does the redirection. | 369 // page which does the redirection. |
| 359 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 370 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 360 PrerenderClientRedirectNavigateToSecond) { | 371 PrerenderClientRedirectNavigateToSecond) { |
| 361 PrerenderTestURL( | 372 PrerenderTestURL( |
| 362 CreateClientRedirect("files/prerender/prerender_page.html"), | 373 CreateClientRedirect("files/prerender/prerender_page.html"), |
| 363 FINAL_STATUS_USED, | 374 FINAL_STATUS_USED, |
| 364 2); | 375 2); |
| 365 set_dest_url(test_server()->GetURL("files/prerender/prerender_page.html")); | 376 NavigateToURL("files/prerender/prerender_page.html"); |
| 366 NavigateToDestURL(); | |
| 367 } | 377 } |
| 368 | 378 |
| 369 // Checks that client-issued redirects to an https page will cancel prerenders. | 379 // Checks that client-issued redirects to an https page will cancel prerenders. |
| 370 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClientRedirectToHttps) { | 380 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClientRedirectToHttps) { |
| 371 net::TestServer https_server(net::TestServer::TYPE_HTTPS, | 381 net::TestServer https_server(net::TestServer::TYPE_HTTPS, |
| 372 FilePath(FILE_PATH_LITERAL("chrome/test/data"))); | 382 FilePath(FILE_PATH_LITERAL("chrome/test/data"))); |
| 373 ASSERT_TRUE(https_server.Start()); | 383 ASSERT_TRUE(https_server.Start()); |
| 374 GURL https_url = https_server.GetURL("files/prerender/prerender_page.html"); | 384 GURL https_url = https_server.GetURL("files/prerender/prerender_page.html"); |
| 375 PrerenderTestURL(CreateClientRedirect(https_url.spec()), | 385 PrerenderTestURL(CreateClientRedirect(https_url.spec()), |
| 376 FINAL_STATUS_HTTPS, | 386 FINAL_STATUS_HTTPS, |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 434 // Checks that server-issued redirects work with prerendering. | 444 // Checks that server-issued redirects work with prerendering. |
| 435 // This version navigates to the final destination page, rather than the | 445 // This version navigates to the final destination page, rather than the |
| 436 // page which does the redirection. | 446 // page which does the redirection. |
| 437 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 447 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 438 PrerenderServerRedirectNavigateToSecond) { | 448 PrerenderServerRedirectNavigateToSecond) { |
| 439 std::string redirect_path; | 449 std::string redirect_path; |
| 440 PrerenderTestURL( | 450 PrerenderTestURL( |
| 441 CreateServerRedirect("files/prerender/prerender_page.html"), | 451 CreateServerRedirect("files/prerender/prerender_page.html"), |
| 442 FINAL_STATUS_USED, | 452 FINAL_STATUS_USED, |
| 443 1); | 453 1); |
| 444 set_dest_url(test_server()->GetURL("files/prerender/prerender_page.html")); | 454 NavigateToURL("files/prerender/prerender_page.html"); |
| 445 NavigateToDestURL(); | |
| 446 } | 455 } |
| 447 | 456 |
| 448 // TODO(cbentzel): Add server-redirect-to-https test. http://crbug.com/79182 | 457 // TODO(cbentzel): Add server-redirect-to-https test. http://crbug.com/79182 |
| 449 | 458 |
| 450 // Checks that server-issued redirects within an iframe in a prerendered | 459 // Checks that server-issued redirects within an iframe in a prerendered |
| 451 // page will not count as an "alias" for the prerendered page. | 460 // page will not count as an "alias" for the prerendered page. |
| 452 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderServerRedirectInIframe) { | 461 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderServerRedirectInIframe) { |
| 453 std::string redirect_path = CreateServerRedirect( | 462 std::string redirect_path = CreateServerRedirect( |
| 454 "/files/prerender/prerender_embedded_content.html"); | 463 "/files/prerender/prerender_embedded_content.html"); |
| 455 std::vector<net::TestServer::StringPair> replacement_text; | 464 std::vector<net::TestServer::StringPair> replacement_text; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 535 // Checks that popups on a prerendered page cause cancellation. | 544 // Checks that popups on a prerendered page cause cancellation. |
| 536 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPopup) { | 545 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPopup) { |
| 537 PrerenderTestURL("files/prerender/prerender_popup.html", | 546 PrerenderTestURL("files/prerender/prerender_popup.html", |
| 538 FINAL_STATUS_CREATE_NEW_WINDOW, | 547 FINAL_STATUS_CREATE_NEW_WINDOW, |
| 539 1); | 548 1); |
| 540 } | 549 } |
| 541 | 550 |
| 542 | 551 |
| 543 | 552 |
| 544 // Checks that renderers using excessive memory will be terminated. | 553 // Checks that renderers using excessive memory will be terminated. |
| 545 // Disabled, http://crbug.com/80324. | 554 // Disabled, http://crbug.com/80324. |
|
mmenke
2011/04/25 17:56:47
While you're here anyways...Could you please fix t
| |
| 546 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 555 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 547 DISABLED_PrerenderExcessiveMemory) { | 556 DISABLED_PrerenderExcessiveMemory) { |
| 548 PrerenderTestURL("files/prerender/prerender_excessive_memory.html", | 557 PrerenderTestURL("files/prerender/prerender_excessive_memory.html", |
| 549 FINAL_STATUS_MEMORY_LIMIT_EXCEEDED, | 558 FINAL_STATUS_MEMORY_LIMIT_EXCEEDED, |
| 550 1); | 559 1); |
| 551 } | 560 } |
| 552 | 561 |
| 553 // Checks that we don't prerender in an infinite loop. | 562 // Checks that we don't prerender in an infinite loop. |
| 554 // Disabled, http://crbug.com/77323. | 563 // Disabled, http://crbug.com/77323. |
| 555 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderInfiniteLoop) { | 564 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderInfiniteLoop) { |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 664 } | 673 } |
| 665 | 674 |
| 666 // Checks that scripts can retrieve the correct window size while prerendering. | 675 // Checks that scripts can retrieve the correct window size while prerendering. |
| 667 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowSize) { | 676 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowSize) { |
| 668 PrerenderTestURL("files/prerender/prerender_size.html", | 677 PrerenderTestURL("files/prerender/prerender_size.html", |
| 669 FINAL_STATUS_USED, | 678 FINAL_STATUS_USED, |
| 670 1); | 679 1); |
| 671 NavigateToDestURL(); | 680 NavigateToDestURL(); |
| 672 } | 681 } |
| 673 | 682 |
| 683 // Checks that we correctly use a prerendered page when navigating to a | |
| 684 // fragment. | |
| 685 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageNavigateFragment) { | |
| 686 PrerenderTestURL("files/prerender/prerender_fragment.html", | |
| 687 FINAL_STATUS_USED, | |
| 688 1); | |
| 689 NavigateToURL("files/prerender/prerender_fragment.html#fragment"); | |
| 690 } | |
| 691 | |
| 692 // Checks that we correctly use a prerendered page when we prerender a fragment | |
| 693 // but navigate to the main page. | |
| 694 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderFragmentNavigatePage) { | |
| 695 PrerenderTestURL("files/prerender/prerender_page.html#fragment", | |
| 696 FINAL_STATUS_USED, | |
| 697 1); | |
| 698 NavigateToURL("files/prerender/prerender_page.html"); | |
| 699 } | |
| 700 | |
| 701 // Checks that we correctly use a prerendered page when we prerender a fragment | |
| 702 // but navigate to a different fragment on the same page. | |
| 703 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | |
| 704 PrerenderFragmentNavigateFragment) { | |
| 705 PrerenderTestURL("files/prerender/prerender_fragment.html#other_fragment", | |
| 706 FINAL_STATUS_USED, | |
| 707 1); | |
| 708 NavigateToURL("files/prerender/prerender_fragment.html#fragment"); | |
| 709 } | |
| 674 } // namespace prerender | 710 } // namespace prerender |
| OLD | NEW |