Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(97)

Side by Side Diff: chrome/browser/prerender/prerender_browsertest.cc

Issue 6880139: Changing URL match method to support fragments. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Replace _refresh.html with CreateClientRedirect. Ensure location is correct." Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_contents.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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/77870.
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/80324.
555 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderInfiniteLoop) { 564 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderInfiniteLoop) {
556 const char* const kHtmlFileA = "prerender_infinite_a.html"; 565 const char* const kHtmlFileA = "prerender_infinite_a.html";
557 const char* const kHtmlFileB = "prerender_infinite_b.html"; 566 const char* const kHtmlFileB = "prerender_infinite_b.html";
558 567
559 std::deque<FinalStatus> expected_final_status_queue; 568 std::deque<FinalStatus> expected_final_status_queue;
560 expected_final_status_queue.push_back(FINAL_STATUS_USED); 569 expected_final_status_queue.push_back(FINAL_STATUS_USED);
561 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); 570 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING);
562 571
563 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); 572 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1);
564 573
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 }
710
711 // Checks that we correctly use a prerendered page when the page uses meta
712 // http-equiv to refresh to a fragment on the same page.
713 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
714 PrerenderClientRedirectToFragment) {
715 PrerenderTestURL(
716 CreateClientRedirect("files/prerender/prerender_fragment.html#fragment"),
717 FINAL_STATUS_USED,
718 2);
719 NavigateToURL(
720 CreateClientRedirect("files/prerender/prerender_fragment.html"));
721 }
722
723 // Checks that we correctly use a prerendered page when the page uses JS to set
724 // the window.location.hash to a fragment on the same page.
725 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
726 PrerenderPageChangeFragmentLocationHash) {
727 PrerenderTestURL("files/prerender/prerender_fragment_location_hash.html",
728 FINAL_STATUS_USED,
729 1);
730 NavigateToURL("files/prerender/prerender_fragment_location_hash.html");
731 }
732
674 } // namespace prerender 733 } // namespace prerender
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_contents.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698