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

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

Issue 15041004: Replace PruneAllButActive with PruneAllButVisible. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Change to CHECK. Created 7 years, 6 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_manager.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include <vector> 6 #include <vector>
7 7
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/path_service.h" 9 #include "base/path_service.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 #include "content/public/browser/web_contents.h" 52 #include "content/public/browser/web_contents.h"
53 #include "content/public/common/url_constants.h" 53 #include "content/public/common/url_constants.h"
54 #include "content/public/test/browser_test_utils.h" 54 #include "content/public/test/browser_test_utils.h"
55 #include "content/public/test/test_navigation_observer.h" 55 #include "content/public/test/test_navigation_observer.h"
56 #include "content/public/test/test_utils.h" 56 #include "content/public/test/test_utils.h"
57 #include "googleurl/src/gurl.h" 57 #include "googleurl/src/gurl.h"
58 #include "grit/generated_resources.h" 58 #include "grit/generated_resources.h"
59 #include "net/dns/mock_host_resolver.h" 59 #include "net/dns/mock_host_resolver.h"
60 #include "net/url_request/url_request_context.h" 60 #include "net/url_request/url_request_context.h"
61 #include "net/url_request/url_request_context_getter.h" 61 #include "net/url_request/url_request_context_getter.h"
62 #include "net/url_request/url_request_filter.h"
63 #include "net/url_request/url_request_job.h"
62 #include "ui/base/l10n/l10n_util.h" 64 #include "ui/base/l10n/l10n_util.h"
63 65
64 using content::BrowserThread; 66 using content::BrowserThread;
65 using content::DevToolsAgentHost; 67 using content::DevToolsAgentHost;
66 using content::DevToolsClientHost; 68 using content::DevToolsClientHost;
67 using content::DevToolsManager; 69 using content::DevToolsManager;
68 using content::NavigationController; 70 using content::NavigationController;
69 using content::OpenURLParams; 71 using content::OpenURLParams;
70 using content::Referrer; 72 using content::Referrer;
71 using content::RenderViewHost; 73 using content::RenderViewHost;
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 class RestorePrerenderMode { 574 class RestorePrerenderMode {
573 public: 575 public:
574 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) { 576 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) {
575 } 577 }
576 578
577 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); } 579 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); }
578 private: 580 private:
579 PrerenderManager::PrerenderManagerMode prev_mode_; 581 PrerenderManager::PrerenderManagerMode prev_mode_;
580 }; 582 };
581 583
584 // URLRequestJob (and associated handler) which never starts.
585 class NeverStartURLRequestJob : public net::URLRequestJob {
586 public:
587 NeverStartURLRequestJob(net::URLRequest* request,
588 net::NetworkDelegate* network_delegate)
589 : net::URLRequestJob(request, network_delegate) {
590 }
591
592 virtual void Start() OVERRIDE {}
593
594 private:
595 virtual ~NeverStartURLRequestJob() {}
596 };
597
598 class NeverStartProtocolHandler
599 : public net::URLRequestJobFactory::ProtocolHandler {
600 public:
601 NeverStartProtocolHandler() {}
602 virtual ~NeverStartProtocolHandler() {}
603
604 virtual net::URLRequestJob* MaybeCreateJob(
605 net::URLRequest* request,
606 net::NetworkDelegate* network_delegate) const OVERRIDE {
607 return new NeverStartURLRequestJob(request, network_delegate);
608 }
609 };
610
611 void CreateNeverStartProtocolHandlerOnIO(const GURL& url) {
612 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
613 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> never_respond_handler(
614 new NeverStartProtocolHandler());
615 net::URLRequestFilter::GetInstance()->AddUrlProtocolHandler(
616 url, never_respond_handler.Pass());
617 }
618
582 } // namespace 619 } // namespace
583 620
584 class PrerenderBrowserTest : virtual public InProcessBrowserTest { 621 class PrerenderBrowserTest : virtual public InProcessBrowserTest {
585 public: 622 public:
586 PrerenderBrowserTest() 623 PrerenderBrowserTest()
587 : autostart_test_server_(true), 624 : autostart_test_server_(true),
588 prerender_contents_factory_(NULL), 625 prerender_contents_factory_(NULL),
589 #if defined(FULL_SAFE_BROWSING) 626 #if defined(FULL_SAFE_BROWSING)
590 safe_browsing_factory_(new TestSafeBrowsingServiceFactory()), 627 safe_browsing_factory_(new TestSafeBrowsingServiceFactory()),
591 #endif 628 #endif
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 int expected_number_of_loads) { 731 int expected_number_of_loads) {
695 std::deque<FinalStatus> expected_final_status_queue(1, 732 std::deque<FinalStatus> expected_final_status_queue(1,
696 expected_final_status); 733 expected_final_status);
697 PrerenderTestURLImpl(prerender_url, destination_url, 734 PrerenderTestURLImpl(prerender_url, destination_url,
698 expected_final_status_queue, 735 expected_final_status_queue,
699 expected_number_of_loads, 736 expected_number_of_loads,
700 false); 737 false);
701 } 738 }
702 739
703 void NavigateToDestURL() const { 740 void NavigateToDestURL() const {
704 NavigateToDestURLWithDisposition(CURRENT_TAB); 741 NavigateToDestURLWithDisposition(CURRENT_TAB, true);
705 } 742 }
706 743
707 // Opens the url in a new tab, with no opener. 744 // Opens the url in a new tab, with no opener.
708 void NavigateToDestURLWithDisposition( 745 void NavigateToDestURLWithDisposition(
709 WindowOpenDisposition disposition) const { 746 WindowOpenDisposition disposition,
710 NavigateToURLImpl(dest_url_, disposition); 747 bool expect_swap_to_succeed) const {
748 NavigateToURLImpl(dest_url_, disposition, expect_swap_to_succeed);
711 } 749 }
712 750
713 void OpenDestURLViaClick() const { 751 void OpenDestURLViaClick() const {
714 OpenDestURLWithJSImpl("Click()"); 752 OpenDestURLWithJSImpl("Click()");
715 } 753 }
716 754
717 void OpenDestURLViaClickTarget() const { 755 void OpenDestURLViaClickTarget() const {
718 OpenDestURLWithJSImpl("ClickTarget()"); 756 OpenDestURLWithJSImpl("ClickTarget()");
719 } 757 }
720 758
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 bool js_result; 849 bool js_result;
812 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 850 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
813 tab, 851 tab,
814 "window.domAutomationController.send(DidBackToOriginalPagePass())", 852 "window.domAutomationController.send(DidBackToOriginalPagePass())",
815 &js_result)); 853 &js_result));
816 EXPECT_TRUE(js_result); 854 EXPECT_TRUE(js_result);
817 } 855 }
818 856
819 void NavigateToURL(const std::string& dest_html_file) const { 857 void NavigateToURL(const std::string& dest_html_file) const {
820 GURL dest_url = test_server()->GetURL(dest_html_file); 858 GURL dest_url = test_server()->GetURL(dest_html_file);
821 NavigateToURLImpl(dest_url, CURRENT_TAB); 859 NavigateToURLImpl(dest_url, CURRENT_TAB, true);
822 } 860 }
823 861
824 bool UrlIsInPrerenderManager(const std::string& html_file) const { 862 bool UrlIsInPrerenderManager(const std::string& html_file) const {
825 return UrlIsInPrerenderManager(test_server()->GetURL(html_file)); 863 return UrlIsInPrerenderManager(test_server()->GetURL(html_file));
826 } 864 }
827 865
828 bool UrlIsInPrerenderManager(const GURL& url) const { 866 bool UrlIsInPrerenderManager(const GURL& url) const {
829 return GetPrerenderManager()->FindPrerenderData( 867 return GetPrerenderManager()->FindPrerenderData(
830 url, GetSessionStorageNamespace()) != NULL; 868 url, GetSessionStorageNamespace()) != NULL;
831 } 869 }
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
1078 // In the failure case, we should have removed |dest_url_| from the 1116 // In the failure case, we should have removed |dest_url_| from the
1079 // prerender_manager. We ignore dummy PrerenderContents (as indicated 1117 // prerender_manager. We ignore dummy PrerenderContents (as indicated
1080 // by not having started), and PrerenderContents that are expected to 1118 // by not having started), and PrerenderContents that are expected to
1081 // be left in the manager until the test finishes. 1119 // be left in the manager until the test finishes.
1082 EXPECT_TRUE(prerender_contents == NULL || 1120 EXPECT_TRUE(prerender_contents == NULL ||
1083 !prerender_contents->prerendering_has_started()); 1121 !prerender_contents->prerendering_has_started());
1084 } 1122 }
1085 } 1123 }
1086 1124
1087 void NavigateToURLImpl(const GURL& dest_url, 1125 void NavigateToURLImpl(const GURL& dest_url,
1088 WindowOpenDisposition disposition) const { 1126 WindowOpenDisposition disposition,
1127 bool expect_swap_to_succeed) const {
1089 ASSERT_NE(static_cast<PrerenderManager*>(NULL), GetPrerenderManager()); 1128 ASSERT_NE(static_cast<PrerenderManager*>(NULL), GetPrerenderManager());
1090 // Make sure in navigating we have a URL to use in the PrerenderManager. 1129 // Make sure in navigating we have a URL to use in the PrerenderManager.
1091 ASSERT_NE(static_cast<PrerenderContents*>(NULL), GetPrerenderContents()); 1130 ASSERT_NE(static_cast<PrerenderContents*>(NULL), GetPrerenderContents());
1092 1131
1093 // If opening the page in a background tab, it won't be shown when swapped 1132 // If opening the page in a background tab, it won't be shown when swapped
1094 // in. 1133 // in.
1095 if (disposition == NEW_BACKGROUND_TAB) 1134 if (disposition == NEW_BACKGROUND_TAB)
1096 GetPrerenderContents()->set_should_be_shown(false); 1135 GetPrerenderContents()->set_should_be_shown(false);
1097 1136
1098 scoped_ptr<content::WindowedNotificationObserver> page_load_observer; 1137 scoped_ptr<content::WindowedNotificationObserver> page_load_observer;
(...skipping 12 matching lines...) Expand all
1111 } 1150 }
1112 } 1151 }
1113 1152
1114 // Navigate to the prerendered URL, but don't run the message loop. Browser 1153 // Navigate to the prerendered URL, but don't run the message loop. Browser
1115 // issued navigations to prerendered pages will synchronously swap in the 1154 // issued navigations to prerendered pages will synchronously swap in the
1116 // prerendered page. 1155 // prerendered page.
1117 ui_test_utils::NavigateToURLWithDisposition( 1156 ui_test_utils::NavigateToURLWithDisposition(
1118 current_browser(), dest_url, disposition, 1157 current_browser(), dest_url, disposition,
1119 ui_test_utils::BROWSER_TEST_NONE); 1158 ui_test_utils::BROWSER_TEST_NONE);
1120 1159
1121 // Make sure the PrerenderContents found earlier was used or removed. 1160 // Make sure the PrerenderContents found earlier was used or removed,
1122 EXPECT_EQ(static_cast<PrerenderContents*>(NULL), GetPrerenderContents()); 1161 // unless we expect the swap in to fail.
1162 EXPECT_EQ(expect_swap_to_succeed, !GetPrerenderContents());
1123 1163
1124 if (call_javascript_ && web_contents) { 1164 if (call_javascript_ && web_contents && expect_swap_to_succeed) {
1125 if (page_load_observer.get()) 1165 if (page_load_observer.get())
1126 page_load_observer->Wait(); 1166 page_load_observer->Wait();
1127 1167
1128 bool display_test_result = false; 1168 bool display_test_result = false;
1129 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 1169 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
1130 web_contents, 1170 web_contents,
1131 "window.domAutomationController.send(DidDisplayPass())", 1171 "window.domAutomationController.send(DidDisplayPass())",
1132 &display_test_result)); 1172 &display_test_result));
1133 EXPECT_TRUE(display_test_result); 1173 EXPECT_TRUE(display_test_result);
1134 } 1174 }
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
1358 } 1398 }
1359 1399
1360 // Checks that the visibility API works. 1400 // Checks that the visibility API works.
1361 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibility) { 1401 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibility) {
1362 PrerenderTestURL("files/prerender/prerender_visibility.html", 1402 PrerenderTestURL("files/prerender/prerender_visibility.html",
1363 FINAL_STATUS_USED, 1403 FINAL_STATUS_USED,
1364 1); 1404 1);
1365 NavigateToDestURL(); 1405 NavigateToDestURL();
1366 } 1406 }
1367 1407
1368 // Checks that the visibility API works when the prerender is quickly opened 1408 // Checks that the prerendering of a page is canceled correctly if we try to
1369 // in a new tab before it stops loading. 1409 // swap it in before it commits.
1370 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityQuickSwitch) { 1410 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNoCommitNoSwap) {
1371 PrerenderTestURL("files/prerender/prerender_visibility_quick.html", 1411 // Navigate to a page that triggers a prerender for a URL that never commits.
1372 FINAL_STATUS_USED, 0); 1412 const GURL kNoCommitUrl("http://never-respond.example.com");
1373 NavigateToDestURL(); 1413 BrowserThread::PostTask(
1414 BrowserThread::IO, FROM_HERE,
1415 base::Bind(&CreateNeverStartProtocolHandlerOnIO, kNoCommitUrl));
1416 PrerenderTestURL(kNoCommitUrl,
1417 FINAL_STATUS_CANCELLED,
1418 0);
1419
1420 // Navigate to the URL, but assume the contents won't be swapped in.
1421 NavigateToDestURLWithDisposition(CURRENT_TAB, false);
1422
1423 // Confirm that the prerendered version of the URL is not swapped in,
1424 // since it never committed.
1425 EXPECT_TRUE(UrlIsInPrerenderManager(kNoCommitUrl));
1426
1427 // Post a task to cancel all the prerenders, so that we don't wait further.
1428 base::MessageLoop::current()->PostTask(
1429 FROM_HERE, base::Bind(&CancelAllPrerenders, GetPrerenderManager()));
1430 content::RunMessageLoop();
1374 } 1431 }
1375 1432
1376 // Checks that the prerendering of a page is canceled correctly when a 1433 // Checks that the prerendering of a page is canceled correctly when a
1377 // Javascript alert is called. 1434 // Javascript alert is called.
1378 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAlertBeforeOnload) { 1435 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAlertBeforeOnload) {
1379 PrerenderTestURL("files/prerender/prerender_alert_before_onload.html", 1436 PrerenderTestURL("files/prerender/prerender_alert_before_onload.html",
1380 FINAL_STATUS_JAVASCRIPT_ALERT, 1437 FINAL_STATUS_JAVASCRIPT_ALERT,
1381 1); 1438 1);
1382 } 1439 }
1383 1440
(...skipping 1404 matching lines...) Expand 10 before | Expand all | Expand 10 after
2788 // Checks that non-http/https main page redirects cancel the prerender. 2845 // Checks that non-http/https main page redirects cancel the prerender.
2789 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2846 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2790 PrerenderCancelMainFrameRedirectUnsupportedScheme) { 2847 PrerenderCancelMainFrameRedirectUnsupportedScheme) {
2791 GURL url = test_server()->GetURL( 2848 GURL url = test_server()->GetURL(
2792 CreateServerRedirect("invalidscheme://www.google.com/test.html")); 2849 CreateServerRedirect("invalidscheme://www.google.com/test.html"));
2793 PrerenderTestURL(url, FINAL_STATUS_UNSUPPORTED_SCHEME, 1); 2850 PrerenderTestURL(url, FINAL_STATUS_UNSUPPORTED_SCHEME, 1);
2794 NavigateToDestURL(); 2851 NavigateToDestURL();
2795 } 2852 }
2796 2853
2797 } // namespace prerender 2854 } // namespace prerender
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698