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

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

Issue 136583007: Refactor prerender_browsertests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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/ui/webui/net_internals/net_internals_ui_browsertest.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/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 case FINAL_STATUS_DEVTOOLS_ATTACHED: 150 case FINAL_STATUS_DEVTOOLS_ATTACHED:
151 case FINAL_STATUS_PAGE_BEING_CAPTURED: 151 case FINAL_STATUS_PAGE_BEING_CAPTURED:
152 case FINAL_STATUS_NAVIGATION_UNCOMMITTED: 152 case FINAL_STATUS_NAVIGATION_UNCOMMITTED:
153 case FINAL_STATUS_WOULD_HAVE_BEEN_USED: 153 case FINAL_STATUS_WOULD_HAVE_BEEN_USED:
154 return false; 154 return false;
155 default: 155 default:
156 return true; 156 return true;
157 } 157 }
158 } 158 }
159 159
160 // Convenience function to wait for a title. Handles the case when the
161 // WebContents already has the expected title.
162 void WaitForASCIITitle(WebContents* web_contents,
163 const char* expected_title_ascii) {
164 base::string16 expected_title = base::ASCIIToUTF16(expected_title_ascii);
165 if (web_contents->GetTitle() == expected_title)
166 return;
167 content::TitleWatcher title_watcher(web_contents, expected_title);
168 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
169 }
170
160 // Waits for the destruction of a RenderProcessHost's IPC channel. 171 // Waits for the destruction of a RenderProcessHost's IPC channel.
161 // Used to make sure the PrerenderLinkManager's OnChannelClosed function has 172 // Used to make sure the PrerenderLinkManager's OnChannelClosed function has
162 // been called, before checking its state. 173 // been called, before checking its state.
163 class ChannelDestructionWatcher { 174 class ChannelDestructionWatcher {
164 public: 175 public:
165 ChannelDestructionWatcher() : channel_destroyed_(false) { 176 ChannelDestructionWatcher() : channel_destroyed_(false) {
166 } 177 }
167 178
168 ~ChannelDestructionWatcher() { 179 ~ChannelDestructionWatcher() {
169 } 180 }
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 380
370 virtual void AddPendingPrerender( 381 virtual void AddPendingPrerender(
371 scoped_ptr<PendingPrerenderInfo> pending_prerender_info) OVERRIDE { 382 scoped_ptr<PendingPrerenderInfo> pending_prerender_info) OVERRIDE {
372 PrerenderContents::AddPendingPrerender(pending_prerender_info.Pass()); 383 PrerenderContents::AddPendingPrerender(pending_prerender_info.Pass());
373 if (expected_pending_prerenders_ > 0 && 384 if (expected_pending_prerenders_ > 0 &&
374 pending_prerender_count() == expected_pending_prerenders_) { 385 pending_prerender_count() == expected_pending_prerenders_) {
375 base::MessageLoop::current()->Quit(); 386 base::MessageLoop::current()->Quit();
376 } 387 }
377 } 388 }
378 389
379 virtual WebContents* CreateWebContents(
380 content::SessionStorageNamespace* session_storage_namespace) OVERRIDE {
mmenke 2014/01/17 22:00:38 PrerenderContents::CreateWebContents need no longe
davidben 2014/01/17 22:32:04 Ooh, forgot about that. Done.
381 WebContents* web_contents = PrerenderContents::CreateWebContents(
382 session_storage_namespace);
383 // Create a ready title watcher. (May or may not be used.)
384 base::string16 ready_title = base::ASCIIToUTF16(kReadyTitle);
385 ready_title_watcher_.reset(new content::TitleWatcher(
386 web_contents, ready_title));
387 return web_contents;
388 }
389
390 void WaitForPrerenderToHaveReadyTitle() {
391 base::string16 ready_title = base::ASCIIToUTF16(kReadyTitle);
392 ASSERT_EQ(ready_title, ready_title_watcher_->WaitAndGetTitle());
393 }
394
395 // Waits until the prerender has |expected_pending_prerenders| pending 390 // Waits until the prerender has |expected_pending_prerenders| pending
396 // prerenders. 391 // prerenders.
397 void WaitForPendingPrerenders(size_t expected_pending_prerenders) { 392 void WaitForPendingPrerenders(size_t expected_pending_prerenders) {
398 if (pending_prerender_count() < expected_pending_prerenders) { 393 if (pending_prerender_count() < expected_pending_prerenders) {
399 expected_pending_prerenders_ = expected_pending_prerenders; 394 expected_pending_prerenders_ = expected_pending_prerenders;
400 content::RunMessageLoop(); 395 content::RunMessageLoop();
401 expected_pending_prerenders_ = 0; 396 expected_pending_prerenders_ = 0;
402 } 397 }
403 398
404 EXPECT_EQ(expected_pending_prerenders, pending_prerender_count()); 399 EXPECT_EQ(expected_pending_prerenders, pending_prerender_count());
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 // Set to true when the prerendering RenderWidget is shown, after having been 452 // Set to true when the prerendering RenderWidget is shown, after having been
458 // hidden. 453 // hidden.
459 bool was_shown_; 454 bool was_shown_;
460 // Expected final value of was_shown_. Defaults to true for 455 // Expected final value of was_shown_. Defaults to true for
461 // FINAL_STATUS_USED, and false otherwise. 456 // FINAL_STATUS_USED, and false otherwise.
462 bool should_be_shown_; 457 bool should_be_shown_;
463 458
464 // Total number of pending prerenders we're currently waiting for. Zero 459 // Total number of pending prerenders we're currently waiting for. Zero
465 // indicates we currently aren't waiting for any. 460 // indicates we currently aren't waiting for any.
466 size_t expected_pending_prerenders_; 461 size_t expected_pending_prerenders_;
467
468 // Will wait for the title of the prerendered page to turn to "READY".
469 scoped_ptr<content::TitleWatcher> ready_title_watcher_;
470 }; 462 };
471 463
472 // A handle to a TestPrerenderContents whose lifetime is under the caller's 464 // A handle to a TestPrerenderContents whose lifetime is under the caller's
473 // control. A PrerenderContents may be destroyed at any point. This allows 465 // control. A PrerenderContents may be destroyed at any point. This allows
474 // tracking the final status, etc. 466 // tracking the final status, etc.
475 class TestPrerender : public PrerenderContents::Observer, 467 class TestPrerender : public PrerenderContents::Observer,
476 public base::SupportsWeakPtr<TestPrerender> { 468 public base::SupportsWeakPtr<TestPrerender> {
477 public: 469 public:
478 TestPrerender() 470 TestPrerender()
479 : contents_(NULL), 471 : contents_(NULL),
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
873 865
874 // Many of these tests are flaky. See http://crbug.com/249179 866 // Many of these tests are flaky. See http://crbug.com/249179
875 class PrerenderBrowserTest : virtual public InProcessBrowserTest { 867 class PrerenderBrowserTest : virtual public InProcessBrowserTest {
876 public: 868 public:
877 PrerenderBrowserTest() 869 PrerenderBrowserTest()
878 : autostart_test_server_(true), 870 : autostart_test_server_(true),
879 prerender_contents_factory_(NULL), 871 prerender_contents_factory_(NULL),
880 #if defined(FULL_SAFE_BROWSING) 872 #if defined(FULL_SAFE_BROWSING)
881 safe_browsing_factory_(new TestSafeBrowsingServiceFactory()), 873 safe_browsing_factory_(new TestSafeBrowsingServiceFactory()),
882 #endif 874 #endif
883 use_https_src_server_(false),
884 call_javascript_(true), 875 call_javascript_(true),
885 check_load_events_(true), 876 check_load_events_(true),
886 loader_path_("files/prerender/prerender_loader.html"), 877 loader_path_("files/prerender/prerender_loader.html"),
887 explicitly_set_browser_(NULL) {} 878 explicitly_set_browser_(NULL) {}
888 879
889 virtual ~PrerenderBrowserTest() {} 880 virtual ~PrerenderBrowserTest() {}
890 881
891 content::SessionStorageNamespace* GetSessionStorageNamespace() const { 882 content::SessionStorageNamespace* GetSessionStorageNamespace() const {
892 WebContents* web_contents = 883 WebContents* web_contents = GetActiveWebContents();
893 current_browser()->tab_strip_model()->GetActiveWebContents();
894 if (!web_contents) 884 if (!web_contents)
895 return NULL; 885 return NULL;
896 return web_contents->GetController().GetDefaultSessionStorageNamespace(); 886 return web_contents->GetController().GetDefaultSessionStorageNamespace();
897 } 887 }
898 888
899 virtual void SetUp() OVERRIDE { 889 virtual void SetUp() OVERRIDE {
900 // TODO(danakj): The GPU Video Decoder needs real GL bindings. 890 // TODO(danakj): The GPU Video Decoder needs real GL bindings.
901 // crbug.com/269087 891 // crbug.com/269087
902 UseRealGLBindings(); 892 UseRealGLBindings();
903 893
(...skipping 29 matching lines...) Expand all
933 923
934 virtual void SetUpOnMainThread() OVERRIDE { 924 virtual void SetUpOnMainThread() OVERRIDE {
935 current_browser()->profile()->GetPrefs()->SetBoolean( 925 current_browser()->profile()->GetPrefs()->SetBoolean(
936 prefs::kPromptForDownload, false); 926 prefs::kPromptForDownload, false);
937 IncreasePrerenderMemory(); 927 IncreasePrerenderMemory();
938 if (autostart_test_server_) 928 if (autostart_test_server_)
939 ASSERT_TRUE(test_server()->Start()); 929 ASSERT_TRUE(test_server()->Start());
940 ChromeResourceDispatcherHostDelegate:: 930 ChromeResourceDispatcherHostDelegate::
941 SetExternalProtocolHandlerDelegateForTesting( 931 SetExternalProtocolHandlerDelegateForTesting(
942 &external_protocol_handler_delegate_); 932 &external_protocol_handler_delegate_);
933
934 PrerenderManager* prerender_manager = GetPrerenderManager();
935 CHECK(prerender_manager);
936 prerender_manager->mutable_config().rate_limit_enabled = false;
937 CHECK(prerender_contents_factory_ == NULL);
938 prerender_contents_factory_ = new TestPrerenderContentsFactory;
939 prerender_manager->SetPrerenderContentsFactory(prerender_contents_factory_);
940 }
941
942 // Convenience function to get the currently active WebContents in
943 // current_browser().
944 WebContents* GetActiveWebContents() const {
945 return current_browser()->tab_strip_model()->GetActiveWebContents();
943 } 946 }
944 947
945 // Overload for a single expected final status 948 // Overload for a single expected final status
946 scoped_ptr<TestPrerender> PrerenderTestURL( 949 scoped_ptr<TestPrerender> PrerenderTestURL(
947 const std::string& html_file, 950 const std::string& html_file,
948 FinalStatus expected_final_status, 951 FinalStatus expected_final_status,
949 int expected_number_of_loads) { 952 int expected_number_of_loads) {
950 return PrerenderTestURL(html_file, 953 GURL url = test_server()->GetURL(html_file);
954 return PrerenderTestURL(url,
951 expected_final_status, 955 expected_final_status,
952 expected_number_of_loads, 956 expected_number_of_loads);
953 false);
954 }
955
956 scoped_ptr<TestPrerender> PrerenderTestURL(
957 const std::string& html_file,
958 FinalStatus expected_final_status,
959 int expected_number_of_loads,
960 bool prerender_should_wait_for_ready_title) {
961 std::vector<FinalStatus> expected_final_status_queue(
962 1, expected_final_status);
963 std::vector<TestPrerender*> prerenders;
964 PrerenderTestURL(
965 html_file,
966 expected_final_status_queue,
967 expected_number_of_loads,
968 prerender_should_wait_for_ready_title).release(&prerenders);
969 CHECK_EQ(1u, prerenders.size());
970 return scoped_ptr<TestPrerender>(prerenders[0]);
971 }
972
973 ScopedVector<TestPrerender> PrerenderTestURL(
974 const std::string& html_file,
975 const std::vector<FinalStatus>& expected_final_status_queue,
976 int expected_number_of_loads,
977 bool prerender_should_wait_for_ready_title) {
978 GURL url = test_server()->GetURL(html_file);
979 return PrerenderTestURLImpl(url, url,
980 expected_final_status_queue,
981 expected_number_of_loads,
982 prerender_should_wait_for_ready_title);
983 } 957 }
984 958
985 ScopedVector<TestPrerender> PrerenderTestURL( 959 ScopedVector<TestPrerender> PrerenderTestURL(
986 const std::string& html_file, 960 const std::string& html_file,
987 const std::vector<FinalStatus>& expected_final_status_queue, 961 const std::vector<FinalStatus>& expected_final_status_queue,
988 int expected_number_of_loads) { 962 int expected_number_of_loads) {
989 return PrerenderTestURL(html_file, expected_final_status_queue, 963 GURL url = test_server()->GetURL(html_file);
990 expected_number_of_loads, false); 964 return PrerenderTestURLImpl(url,
965 expected_final_status_queue,
966 expected_number_of_loads);
991 } 967 }
992 968
993 scoped_ptr<TestPrerender> PrerenderTestURL( 969 scoped_ptr<TestPrerender> PrerenderTestURL(
994 const GURL& url, 970 const GURL& url,
995 FinalStatus expected_final_status, 971 FinalStatus expected_final_status,
996 int expected_number_of_loads) { 972 int expected_number_of_loads) {
997 std::vector<FinalStatus> expected_final_status_queue( 973 std::vector<FinalStatus> expected_final_status_queue(
998 1, expected_final_status); 974 1, expected_final_status);
999 std::vector<TestPrerender*> prerenders; 975 std::vector<TestPrerender*> prerenders;
1000 PrerenderTestURLImpl(url, url, 976 PrerenderTestURLImpl(url,
1001 expected_final_status_queue, 977 expected_final_status_queue,
1002 expected_number_of_loads, 978 expected_number_of_loads).release(&prerenders);
1003 false).release(&prerenders);
1004 CHECK_EQ(1u, prerenders.size()); 979 CHECK_EQ(1u, prerenders.size());
1005 return scoped_ptr<TestPrerender>(prerenders[0]); 980 return scoped_ptr<TestPrerender>(prerenders[0]);
1006 } 981 }
1007
1008 scoped_ptr<TestPrerender> PrerenderTestURL(
1009 const GURL& prerender_url,
1010 const GURL& destination_url,
1011 FinalStatus expected_final_status,
1012 int expected_number_of_loads) {
1013 std::vector<FinalStatus> expected_final_status_queue(
1014 1, expected_final_status);
1015 std::vector<TestPrerender*> prerenders;
1016 PrerenderTestURLImpl(prerender_url, destination_url,
1017 expected_final_status_queue,
1018 expected_number_of_loads,
1019 false).release(&prerenders);
1020 CHECK_EQ(1u, prerenders.size());
1021 return scoped_ptr<TestPrerender>(prerenders[0]);
1022 }
1023 982
1024 void NavigateToDestURL() const { 983 void NavigateToDestURL() const {
1025 NavigateToDestURLWithDisposition(CURRENT_TAB, true); 984 NavigateToDestURLWithDisposition(CURRENT_TAB, true);
1026 } 985 }
1027 986
1028 // Opens the url in a new tab, with no opener. 987 // Opens the url in a new tab, with no opener.
1029 void NavigateToDestURLWithDisposition( 988 void NavigateToDestURLWithDisposition(
1030 WindowOpenDisposition disposition, 989 WindowOpenDisposition disposition,
1031 bool expect_swap_to_succeed) const { 990 bool expect_swap_to_succeed) const {
1032 NavigateToURLWithParams( 991 NavigateToURLWithParams(
1033 content::OpenURLParams(dest_url_, Referrer(), disposition, 992 content::OpenURLParams(dest_url_, Referrer(), disposition,
1034 content::PAGE_TRANSITION_TYPED, false), 993 content::PAGE_TRANSITION_TYPED, false),
1035 expect_swap_to_succeed); 994 expect_swap_to_succeed);
1036 } 995 }
1037 996
1038 void NavigateToDestUrlAndWaitForPassTitle() {
1039 base::string16 expected_title = base::ASCIIToUTF16(kPassTitle);
1040 content::TitleWatcher title_watcher(
1041 GetPrerenderContents()->prerender_contents(),
1042 expected_title);
1043 NavigateToDestURL();
1044 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
1045 }
1046
1047 void NavigateToURL(const std::string& dest_html_file) const { 997 void NavigateToURL(const std::string& dest_html_file) const {
1048 NavigateToURLWithDisposition(dest_html_file, CURRENT_TAB, true); 998 NavigateToURLWithDisposition(dest_html_file, CURRENT_TAB, true);
1049 } 999 }
1050 1000
1051 void NavigateToURLWithDisposition(const std::string& dest_html_file, 1001 void NavigateToURLWithDisposition(const std::string& dest_html_file,
1052 WindowOpenDisposition disposition, 1002 WindowOpenDisposition disposition,
1053 bool expect_swap_to_succeed) const { 1003 bool expect_swap_to_succeed) const {
1054 GURL dest_url = test_server()->GetURL(dest_html_file); 1004 GURL dest_url = test_server()->GetURL(dest_html_file);
1055 NavigateToURLWithDisposition(dest_url, disposition, expect_swap_to_succeed); 1005 NavigateToURLWithDisposition(dest_url, disposition, expect_swap_to_succeed);
1056 } 1006 }
1057 1007
1058 void NavigateToURLWithDisposition(const GURL& dest_url, 1008 void NavigateToURLWithDisposition(const GURL& dest_url,
1059 WindowOpenDisposition disposition, 1009 WindowOpenDisposition disposition,
1060 bool expect_swap_to_succeed) const { 1010 bool expect_swap_to_succeed) const {
1061 NavigateToURLWithParams( 1011 NavigateToURLWithParams(
1062 content::OpenURLParams(dest_url, Referrer(), disposition, 1012 content::OpenURLParams(dest_url, Referrer(), disposition,
1063 content::PAGE_TRANSITION_TYPED, false), 1013 content::PAGE_TRANSITION_TYPED, false),
1064 expect_swap_to_succeed); 1014 expect_swap_to_succeed);
1065 } 1015 }
1066 1016
1067 void NavigateToURLWithParams(const content::OpenURLParams& params, 1017 void NavigateToURLWithParams(const content::OpenURLParams& params,
1068 bool expect_swap_to_succeed) const { 1018 bool expect_swap_to_succeed) const {
1069 NavigateToURLImpl(params, expect_swap_to_succeed); 1019 NavigateToURLImpl(params, expect_swap_to_succeed);
1070 } 1020 }
1071 1021
1072 void OpenDestURLViaClick() const { 1022 void OpenDestURLViaClick() const {
1073 OpenDestURLWithJSImpl("Click()", false); 1023 OpenURLViaClick(dest_url_);
1024 }
mmenke 2014/01/17 22:00:38 nit: +line break?
davidben 2014/01/17 22:32:04 Done.
1025 void OpenURLViaClick(const GURL& url) const {
1026 OpenURLWithJSImpl("Click", url, false);
1074 } 1027 }
1075 1028
1076 void OpenDestURLViaClickTarget() const { 1029 void OpenDestURLViaClickTarget() const {
1077 OpenDestURLWithJSImpl("ClickTarget()", true); 1030 OpenURLWithJSImpl("ClickTarget", dest_url_, true);
1078 } 1031 }
1079 1032
1080 void OpenDestURLViaClickNewWindow() const { 1033 void OpenDestURLViaClickNewWindow() const {
1081 OpenDestURLWithJSImpl("ShiftClick()", true); 1034 OpenURLWithJSImpl("ShiftClick", dest_url_, true);
1082 } 1035 }
1083 1036
1084 void OpenDestURLViaClickNewForegroundTab() const { 1037 void OpenDestURLViaClickNewForegroundTab() const {
1085 #if defined(OS_MACOSX) 1038 #if defined(OS_MACOSX)
1086 OpenDestURLWithJSImpl("MetaShiftClick()", true); 1039 OpenURLWithJSImpl("MetaShiftClick", dest_url_, true);
1087 #else 1040 #else
1088 OpenDestURLWithJSImpl("CtrlShiftClick()", true); 1041 OpenURLWithJSImpl("CtrlShiftClick", dest_url_, true);
1089 #endif 1042 #endif
1090 } 1043 }
1091 1044
1092 void OpenDestURLViaClickNewBackgroundTab() const { 1045 void OpenDestURLViaClickNewBackgroundTab() const {
1093 TestPrerenderContents* prerender_contents = GetPrerenderContents();
1094 ASSERT_TRUE(prerender_contents != NULL);
1095 prerender_contents->set_should_be_shown(false);
1096 #if defined(OS_MACOSX) 1046 #if defined(OS_MACOSX)
1097 OpenDestURLWithJSImpl("MetaClick()", true); 1047 OpenURLWithJSImpl("MetaClick", dest_url_, true);
1098 #else 1048 #else
1099 OpenDestURLWithJSImpl("CtrlClick()", true); 1049 OpenURLWithJSImpl("CtrlClick", dest_url_, true);
1100 #endif 1050 #endif
1101 } 1051 }
1102 1052
1103 void OpenDestURLViaWindowOpen() const { 1053 void OpenDestURLViaWindowOpen() const {
1104 OpenDestURLWithJSImpl("WindowOpen()", true); 1054 OpenURLWithJSImpl("WindowOpen", dest_url_, true);
1105 } 1055 }
1106 1056
1107 void RemoveLinkElement(int i) const { 1057 void RemoveLinkElement(int i) const {
1108 current_browser()->tab_strip_model()->GetActiveWebContents()-> 1058 GetActiveWebContents()->GetRenderViewHost()->ExecuteJavascriptInWebFrame(
1109 GetRenderViewHost()->ExecuteJavascriptInWebFrame(
1110 base::string16(), 1059 base::string16(),
1111 base::ASCIIToUTF16(base::StringPrintf("RemoveLinkElement(%d)", i))); 1060 base::ASCIIToUTF16(base::StringPrintf("RemoveLinkElement(%d)", i)));
1112 } 1061 }
1113 1062
1114 void ClickToNextPageAfterPrerender() { 1063 void ClickToNextPageAfterPrerender() {
1115 content::WindowedNotificationObserver new_page_observer( 1064 content::WindowedNotificationObserver new_page_observer(
1116 content::NOTIFICATION_NAV_ENTRY_COMMITTED, 1065 content::NOTIFICATION_NAV_ENTRY_COMMITTED,
1117 content::NotificationService::AllSources()); 1066 content::NotificationService::AllSources());
1118 RenderViewHost* render_view_host = current_browser()->tab_strip_model()-> 1067 RenderViewHost* render_view_host =
1119 GetActiveWebContents()->GetRenderViewHost(); 1068 GetActiveWebContents()->GetRenderViewHost();
1120 render_view_host->ExecuteJavascriptInWebFrame( 1069 render_view_host->ExecuteJavascriptInWebFrame(
1121 base::string16(), 1070 base::string16(),
1122 base::ASCIIToUTF16("ClickOpenLink()")); 1071 base::ASCIIToUTF16("ClickOpenLink()"));
1123 new_page_observer.Wait(); 1072 new_page_observer.Wait();
1124 } 1073 }
1125 1074
1126 void NavigateToNextPageAfterPrerender() const { 1075 void NavigateToNextPageAfterPrerender() const {
1127 ui_test_utils::NavigateToURL( 1076 ui_test_utils::NavigateToURL(
1128 current_browser(), 1077 current_browser(),
1129 test_server()->GetURL("files/prerender/prerender_page.html")); 1078 test_server()->GetURL("files/prerender/prerender_page.html"));
1130 } 1079 }
1131 1080
1132 // Called after the prerendered page has been navigated to and then away from. 1081 // Called after the prerendered page has been navigated to and then away from.
1133 // Navigates back through the history to the prerendered page. 1082 // Navigates back through the history to the prerendered page.
1134 void GoBackToPrerender() { 1083 void GoBackToPrerender() {
1135 content::WindowedNotificationObserver back_nav_observer( 1084 content::WindowedNotificationObserver back_nav_observer(
1136 content::NOTIFICATION_NAV_ENTRY_COMMITTED, 1085 content::NOTIFICATION_NAV_ENTRY_COMMITTED,
1137 content::NotificationService::AllSources()); 1086 content::NotificationService::AllSources());
1138 chrome::GoBack(current_browser(), CURRENT_TAB); 1087 chrome::GoBack(current_browser(), CURRENT_TAB);
1139 back_nav_observer.Wait(); 1088 back_nav_observer.Wait();
1140 bool original_prerender_page = false; 1089 bool original_prerender_page = false;
1141 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 1090 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
1142 current_browser()->tab_strip_model()->GetActiveWebContents(), 1091 GetActiveWebContents(),
1143 "window.domAutomationController.send(IsOriginalPrerenderPage())", 1092 "window.domAutomationController.send(IsOriginalPrerenderPage())",
1144 &original_prerender_page)); 1093 &original_prerender_page));
1145 EXPECT_TRUE(original_prerender_page); 1094 EXPECT_TRUE(original_prerender_page);
1146 } 1095 }
1147 1096
1148 // Goes back to the page that was active before the prerender was swapped 1097 // Goes back to the page that was active before the prerender was swapped
1149 // in. This must be called when the prerendered page is the current page 1098 // in. This must be called when the prerendered page is the current page
1150 // in the active tab. 1099 // in the active tab.
1151 void GoBackToPageBeforePrerender() { 1100 void GoBackToPageBeforePrerender() {
1152 WebContents* tab = 1101 WebContents* tab = GetActiveWebContents();
1153 current_browser()->tab_strip_model()->GetActiveWebContents();
1154 ASSERT_TRUE(tab); 1102 ASSERT_TRUE(tab);
1155 EXPECT_FALSE(tab->IsLoading()); 1103 EXPECT_FALSE(tab->IsLoading());
1156 TestNavigationObserver back_nav_observer(tab); 1104 TestNavigationObserver back_nav_observer(tab);
1157 chrome::GoBack(current_browser(), CURRENT_TAB); 1105 chrome::GoBack(current_browser(), CURRENT_TAB);
1158 back_nav_observer.Wait(); 1106 back_nav_observer.Wait();
1159 bool js_result; 1107 bool js_result;
1160 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 1108 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
1161 tab, 1109 tab,
1162 "window.domAutomationController.send(DidBackToOriginalPagePass())", 1110 "window.domAutomationController.send(DidBackToOriginalPagePass())",
1163 &js_result)); 1111 &js_result));
1164 EXPECT_TRUE(js_result); 1112 EXPECT_TRUE(js_result);
1165 } 1113 }
1166 1114
1167 bool UrlIsInPrerenderManager(const std::string& html_file) const { 1115 bool UrlIsInPrerenderManager(const std::string& html_file) const {
1168 return UrlIsInPrerenderManager(test_server()->GetURL(html_file)); 1116 return UrlIsInPrerenderManager(test_server()->GetURL(html_file));
1169 } 1117 }
1170 1118
1171 bool UrlIsInPrerenderManager(const GURL& url) const { 1119 bool UrlIsInPrerenderManager(const GURL& url) const {
1172 return GetPrerenderManager()->FindPrerenderData( 1120 return GetPrerenderManager()->FindPrerenderData(
1173 url, GetSessionStorageNamespace()) != NULL; 1121 url, GetSessionStorageNamespace()) != NULL;
1174 } 1122 }
1175 1123
1176 void set_use_https_src(bool use_https_src_server) { 1124 void UseHttpsSrcServer() {
1177 use_https_src_server_ = use_https_src_server; 1125 if (https_src_server_)
1126 return;
1127 https_src_server_.reset(
1128 new net::SpawnedTestServer(
1129 net::SpawnedTestServer::TYPE_HTTPS,
1130 net::SpawnedTestServer::kLocalhost,
1131 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))));
1132 CHECK(https_src_server_->Start());
1178 } 1133 }
1179 1134
1180 void DisableJavascriptCalls() { 1135 void DisableJavascriptCalls() {
1181 call_javascript_ = false; 1136 call_javascript_ = false;
1182 } 1137 }
1183 1138
1184 void DisableLoadEventCheck() { 1139 void DisableLoadEventCheck() {
1185 check_load_events_ = false; 1140 check_load_events_ = false;
1186 } 1141 }
1187 1142
(...skipping 14 matching lines...) Expand all
1202 return prerender_link_manager; 1157 return prerender_link_manager;
1203 } 1158 }
1204 1159
1205 bool DidReceivePrerenderStartEventForLinkNumber(int index) const { 1160 bool DidReceivePrerenderStartEventForLinkNumber(int index) const {
1206 bool received_prerender_started; 1161 bool received_prerender_started;
1207 std::string expression = base::StringPrintf( 1162 std::string expression = base::StringPrintf(
1208 "window.domAutomationController.send(Boolean(" 1163 "window.domAutomationController.send(Boolean("
1209 "receivedPrerenderStartEvents[%d]))", index); 1164 "receivedPrerenderStartEvents[%d]))", index);
1210 1165
1211 CHECK(content::ExecuteScriptAndExtractBool( 1166 CHECK(content::ExecuteScriptAndExtractBool(
1212 current_browser()->tab_strip_model()->GetActiveWebContents(), 1167 GetActiveWebContents(),
1213 expression, 1168 expression,
1214 &received_prerender_started)); 1169 &received_prerender_started));
1215 return received_prerender_started; 1170 return received_prerender_started;
1216 } 1171 }
1217 1172
1218 int GetPrerenderLoadEventCountForLinkNumber(int index) const { 1173 int GetPrerenderLoadEventCountForLinkNumber(int index) const {
1219 int load_event_count; 1174 int load_event_count;
1220 std::string expression = base::StringPrintf( 1175 std::string expression = base::StringPrintf(
1221 "window.domAutomationController.send(" 1176 "window.domAutomationController.send("
1222 "receivedPrerenderLoadEvents[%d] || 0)", index); 1177 "receivedPrerenderLoadEvents[%d] || 0)", index);
1223 1178
1224 CHECK(content::ExecuteScriptAndExtractInt( 1179 CHECK(content::ExecuteScriptAndExtractInt(
1225 current_browser()->tab_strip_model()->GetActiveWebContents(), 1180 GetActiveWebContents(),
1226 expression, 1181 expression,
1227 &load_event_count)); 1182 &load_event_count));
1228 return load_event_count; 1183 return load_event_count;
1229 } 1184 }
1230 1185
1231 bool DidReceivePrerenderStopEventForLinkNumber(int index) const { 1186 bool DidReceivePrerenderStopEventForLinkNumber(int index) const {
1232 bool received_prerender_stopped; 1187 bool received_prerender_stopped;
1233 std::string expression = base::StringPrintf( 1188 std::string expression = base::StringPrintf(
1234 "window.domAutomationController.send(Boolean(" 1189 "window.domAutomationController.send(Boolean("
1235 "receivedPrerenderStopEvents[%d]))", index); 1190 "receivedPrerenderStopEvents[%d]))", index);
1236 1191
1237 CHECK(content::ExecuteScriptAndExtractBool( 1192 CHECK(content::ExecuteScriptAndExtractBool(
1238 current_browser()->tab_strip_model()->GetActiveWebContents(), 1193 GetActiveWebContents(),
1239 expression, 1194 expression,
1240 &received_prerender_stopped)); 1195 &received_prerender_stopped));
1241 return received_prerender_stopped; 1196 return received_prerender_stopped;
1242 } 1197 }
1243 1198
1244 bool HadPrerenderEventErrors() const { 1199 bool HadPrerenderEventErrors() const {
1245 bool had_prerender_event_errors; 1200 bool had_prerender_event_errors;
1246 CHECK(content::ExecuteScriptAndExtractBool( 1201 CHECK(content::ExecuteScriptAndExtractBool(
1247 current_browser()->tab_strip_model()->GetActiveWebContents(), 1202 GetActiveWebContents(),
1248 "window.domAutomationController.send(Boolean(" 1203 "window.domAutomationController.send(Boolean("
1249 " hadPrerenderEventErrors))", 1204 " hadPrerenderEventErrors))",
1250 &had_prerender_event_errors)); 1205 &had_prerender_event_errors));
1251 return had_prerender_event_errors; 1206 return had_prerender_event_errors;
1252 } 1207 }
1253 1208
1254 // Asserting on this can result in flaky tests. PrerenderHandles are 1209 // Asserting on this can result in flaky tests. PrerenderHandles are
1255 // removed from the PrerenderLinkManager when the prerender is canceled from 1210 // removed from the PrerenderLinkManager when the prerender is canceled from
1256 // the browser, when the prerenders are cancelled from the renderer process, 1211 // the browser, when the prerenders are cancelled from the renderer process,
1257 // or the channel for the renderer process is closed on the IO thread. In the 1212 // or the channel for the renderer process is closed on the IO thread. In the
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1351 return false; 1306 return false;
1352 return display_test_result; 1307 return display_test_result;
1353 } 1308 }
1354 1309
1355 protected: 1310 protected:
1356 bool autostart_test_server_; 1311 bool autostart_test_server_;
1357 1312
1358 private: 1313 private:
1359 ScopedVector<TestPrerender> PrerenderTestURLImpl( 1314 ScopedVector<TestPrerender> PrerenderTestURLImpl(
1360 const GURL& prerender_url, 1315 const GURL& prerender_url,
1361 const GURL& destination_url,
1362 const std::vector<FinalStatus>& expected_final_status_queue, 1316 const std::vector<FinalStatus>& expected_final_status_queue,
1363 int expected_number_of_loads, 1317 int expected_number_of_loads) {
1364 bool prerender_should_wait_for_ready_title) { 1318 dest_url_ = prerender_url;
mmenke 2014/01/17 22:00:38 Wonder if we should just get rid of this in anothe
davidben 2014/01/17 22:32:04 'this' being the dest_url_ line? Well there's also
mmenke 2014/01/21 17:16:10 Yea, 'this' being get rid of dest_url_ completely.
1365 dest_url_ = destination_url;
1366 1319
1367 std::vector<net::SpawnedTestServer::StringPair> replacement_text; 1320 std::vector<net::SpawnedTestServer::StringPair> replacement_text;
1368 replacement_text.push_back( 1321 replacement_text.push_back(
1369 make_pair("REPLACE_WITH_PRERENDER_URL", prerender_url.spec())); 1322 make_pair("REPLACE_WITH_PRERENDER_URL", prerender_url.spec()));
1370 replacement_text.push_back(
1371 make_pair("REPLACE_WITH_DESTINATION_URL", destination_url.spec()));
1372 std::string replacement_path; 1323 std::string replacement_path;
1373 CHECK(net::SpawnedTestServer::GetFilePathWithReplacements( 1324 CHECK(net::SpawnedTestServer::GetFilePathWithReplacements(
1374 loader_path_, 1325 loader_path_,
1375 replacement_text, 1326 replacement_text,
1376 &replacement_path)); 1327 &replacement_path));
1377 1328
1378 const net::SpawnedTestServer* src_server = test_server(); 1329 const net::SpawnedTestServer* src_server = test_server();
1379 scoped_ptr<net::SpawnedTestServer> https_src_server; 1330 if (https_src_server_)
1380 if (use_https_src_server_) { 1331 src_server = https_src_server_.get();
mmenke 2014/01/17 22:00:38 Good idea...scoping here does seem like it was a w
1381 https_src_server.reset(
1382 new net::SpawnedTestServer(
1383 net::SpawnedTestServer::TYPE_HTTPS,
1384 net::SpawnedTestServer::kLocalhost,
1385 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))));
1386 CHECK(https_src_server->Start());
1387 src_server = https_src_server.get();
1388 }
1389 GURL loader_url = src_server->GetURL(replacement_path + 1332 GURL loader_url = src_server->GetURL(replacement_path +
1390 loader_query_and_fragment_); 1333 loader_query_and_fragment_);
1391 1334
1392 PrerenderManager* prerender_manager = GetPrerenderManager();
1393 CHECK(prerender_manager);
1394 prerender_manager->mutable_config().rate_limit_enabled = false;
1395 CHECK(prerender_contents_factory_ == NULL);
1396 prerender_contents_factory_ = new TestPrerenderContentsFactory;
1397 prerender_manager->SetPrerenderContentsFactory(prerender_contents_factory_);
1398
1399 VLOG(1) << "Running test with queue length " << 1335 VLOG(1) << "Running test with queue length " <<
1400 expected_final_status_queue.size(); 1336 expected_final_status_queue.size();
1401 CHECK(!expected_final_status_queue.empty()); 1337 CHECK(!expected_final_status_queue.empty());
1402 ScopedVector<TestPrerender> prerenders; 1338 ScopedVector<TestPrerender> prerenders;
1403 for (size_t i = 0; i < expected_final_status_queue.size(); i++) { 1339 for (size_t i = 0; i < expected_final_status_queue.size(); i++) {
1404 prerenders.push_back( 1340 prerenders.push_back(
1405 prerender_contents_factory_->ExpectPrerenderContents( 1341 prerender_contents_factory_->ExpectPrerenderContents(
1406 expected_final_status_queue[i]).release()); 1342 expected_final_status_queue[i]).release());
1407 } 1343 }
1408 1344
(...skipping 12 matching lines...) Expand all
1421 EXPECT_TRUE(DidReceivePrerenderStopEventForLinkNumber(0)); 1357 EXPECT_TRUE(DidReceivePrerenderStopEventForLinkNumber(0));
1422 } else { 1358 } else {
1423 // Otherwise, check that it prerendered correctly. 1359 // Otherwise, check that it prerendered correctly.
1424 TestPrerenderContents* prerender_contents = prerenders[0]->contents(); 1360 TestPrerenderContents* prerender_contents = prerenders[0]->contents();
1425 1361
1426 CHECK_NE(static_cast<PrerenderContents*>(NULL), prerender_contents); 1362 CHECK_NE(static_cast<PrerenderContents*>(NULL), prerender_contents);
1427 EXPECT_EQ(FINAL_STATUS_MAX, prerender_contents->final_status()); 1363 EXPECT_EQ(FINAL_STATUS_MAX, prerender_contents->final_status());
1428 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1364 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1429 1365
1430 if (call_javascript_) { 1366 if (call_javascript_) {
1431 // Wait for the prerendered page to change title to signal it is ready
1432 // if required.
1433 if (prerender_should_wait_for_ready_title)
1434 prerender_contents->WaitForPrerenderToHaveReadyTitle();
1435
1436 // Check if page behaves as expected while in prerendered state. 1367 // Check if page behaves as expected while in prerendered state.
1437 EXPECT_TRUE(DidPrerenderPass(prerender_contents->prerender_contents())); 1368 EXPECT_TRUE(DidPrerenderPass(
1369 prerenders[0]->contents()->prerender_contents()));
mmenke 2014/01/17 22:00:38 prerenders[0]->contents() is just prerender_conten
davidben 2014/01/17 22:32:04 Oh, hrm, I must have just done that blindly withou
1438 } 1370 }
1439 } 1371 }
1440 1372
1441 // Test that the referring page received the right start and load events. 1373 // Test that the referring page received the right start and load events.
1442 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1374 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1443 if (check_load_events_) { 1375 if (check_load_events_) {
1444 EXPECT_EQ(expected_number_of_loads, prerenders[0]->number_of_loads()); 1376 EXPECT_EQ(expected_number_of_loads, prerenders[0]->number_of_loads());
1445 EXPECT_EQ(expected_number_of_loads, 1377 EXPECT_EQ(expected_number_of_loads,
1446 GetPrerenderLoadEventCountForLinkNumber(0)); 1378 GetPrerenderLoadEventCountForLinkNumber(0));
1447 } 1379 }
1448 EXPECT_FALSE(HadPrerenderEventErrors()); 1380 EXPECT_FALSE(HadPrerenderEventErrors());
1449 1381
1450 return prerenders.Pass(); 1382 return prerenders.Pass();
1451 } 1383 }
1452 1384
1453 void NavigateToURLImpl(const content::OpenURLParams& params, 1385 void NavigateToURLImpl(const content::OpenURLParams& params,
1454 bool expect_swap_to_succeed) const { 1386 bool expect_swap_to_succeed) const {
1455 ASSERT_NE(static_cast<PrerenderManager*>(NULL), GetPrerenderManager()); 1387 ASSERT_NE(static_cast<PrerenderManager*>(NULL), GetPrerenderManager());
1456 // Make sure in navigating we have a URL to use in the PrerenderManager. 1388 // Make sure in navigating we have a URL to use in the PrerenderManager.
1457 ASSERT_NE(static_cast<PrerenderContents*>(NULL), GetPrerenderContents()); 1389 ASSERT_NE(static_cast<PrerenderContents*>(NULL), GetPrerenderContents());
1458 1390
1459 // If opening the page in a background tab, it won't be shown when swapped
1460 // in.
1461 if (params.disposition == NEW_BACKGROUND_TAB)
1462 GetPrerenderContents()->set_should_be_shown(false);
1463
1464 WebContents* web_contents = GetPrerenderContents()->prerender_contents(); 1391 WebContents* web_contents = GetPrerenderContents()->prerender_contents();
1465 1392
1466 // Navigate and wait for either the load to finish normally or for a swap to 1393 // Navigate and wait for either the load to finish normally or for a swap to
1467 // occur. 1394 // occur.
1468 // TODO(davidben): The only handles CURRENT_TAB navigations, which is the 1395 // TODO(davidben): The only handles CURRENT_TAB navigations, which is the
1469 // only case tested or prerendered right now. 1396 // only case tested or prerendered right now.
1470 CHECK_EQ(CURRENT_TAB, params.disposition); 1397 CHECK_EQ(CURRENT_TAB, params.disposition);
1471 NavigationOrSwapObserver swap_observer( 1398 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(),
1472 current_browser()->tab_strip_model(), 1399 GetActiveWebContents());
1473 current_browser()->tab_strip_model()->GetActiveWebContents());
1474 WebContents* target_web_contents = current_browser()->OpenURL(params); 1400 WebContents* target_web_contents = current_browser()->OpenURL(params);
1475 swap_observer.Wait(); 1401 swap_observer.Wait();
1476 1402
1477 if (web_contents && expect_swap_to_succeed) { 1403 if (web_contents && expect_swap_to_succeed) {
1478 EXPECT_EQ(web_contents, target_web_contents); 1404 EXPECT_EQ(web_contents, target_web_contents);
1479 if (call_javascript_) 1405 if (call_javascript_)
1480 EXPECT_TRUE(DidDisplayPass(web_contents)); 1406 EXPECT_TRUE(DidDisplayPass(web_contents));
1481 } 1407 }
1482 } 1408 }
1483 1409
1484 // Opens the prerendered page using javascript functions in the loader 1410 // Opens the prerendered page using javascript functions in the loader
1485 // page. |javascript_function_name| should be a 0 argument function which is 1411 // page. |javascript_function_name| should be a 0 argument function which is
1486 // invoked. |new_web_contents| is true if the navigation is expected to 1412 // invoked. |new_web_contents| is true if the navigation is expected to
1487 // happen in a new WebContents via OpenURL. 1413 // happen in a new WebContents via OpenURL.
1488 void OpenDestURLWithJSImpl(const std::string& javascript_function_name, 1414 void OpenURLWithJSImpl(const std::string& javascript_function_name,
1489 bool new_web_contents) const { 1415 const GURL& url,
1490 TestPrerenderContents* prerender_contents = GetPrerenderContents(); 1416 bool new_web_contents) const {
mmenke 2014/01/17 22:00:38 Can we make GetPrerenderContents() private now?
davidben 2014/01/17 22:32:04 Done.
1491 ASSERT_NE(static_cast<PrerenderContents*>(NULL), prerender_contents); 1417 WebContents* web_contents = GetActiveWebContents();
1492 1418 RenderViewHost* render_view_host =
1493 WebContents* web_contents = current_browser()->tab_strip_model()-> 1419 GetActiveWebContents()->GetRenderViewHost();
1494 GetActiveWebContents(); 1420 std::string javascript = base::StringPrintf(
1495 RenderViewHost* render_view_host = web_contents->GetRenderViewHost(); 1421 "%s('%s')", javascript_function_name.c_str(), url.spec().c_str());
1496 1422
1497 if (new_web_contents) { 1423 if (new_web_contents) {
1498 NewTabNavigationOrSwapObserver observer; 1424 NewTabNavigationOrSwapObserver observer;
1499 render_view_host->ExecuteJavascriptInWebFrame( 1425 render_view_host->ExecuteJavascriptInWebFrame(
1500 base::string16(), base::ASCIIToUTF16(javascript_function_name)); 1426 base::string16(), base::ASCIIToUTF16(javascript));
1501 observer.Wait(); 1427 observer.Wait();
1502 } else { 1428 } else {
1503 NavigationOrSwapObserver observer(current_browser()->tab_strip_model(), 1429 NavigationOrSwapObserver observer(current_browser()->tab_strip_model(),
1504 web_contents); 1430 web_contents);
1505 render_view_host->ExecuteJavascriptInWebFrame( 1431 render_view_host->ExecuteJavascriptInWebFrame(
1506 base::string16(), base::ASCIIToUTF16(javascript_function_name)); 1432 base::string16(), base::ASCIIToUTF16(javascript));
1507 observer.Wait(); 1433 observer.Wait();
1508 } 1434 }
1509 } 1435 }
1510 1436
1511 TestPrerenderContentsFactory* prerender_contents_factory_; 1437 TestPrerenderContentsFactory* prerender_contents_factory_;
1512 #if defined(FULL_SAFE_BROWSING) 1438 #if defined(FULL_SAFE_BROWSING)
1513 scoped_ptr<TestSafeBrowsingServiceFactory> safe_browsing_factory_; 1439 scoped_ptr<TestSafeBrowsingServiceFactory> safe_browsing_factory_;
1514 #endif 1440 #endif
1515 NeverRunsExternalProtocolHandlerDelegate external_protocol_handler_delegate_; 1441 NeverRunsExternalProtocolHandlerDelegate external_protocol_handler_delegate_;
1516 GURL dest_url_; 1442 GURL dest_url_;
1517 bool use_https_src_server_; 1443 scoped_ptr<net::SpawnedTestServer> https_src_server_;
1518 bool call_javascript_; 1444 bool call_javascript_;
1519 bool check_load_events_; 1445 bool check_load_events_;
1520 std::string loader_path_; 1446 std::string loader_path_;
1521 std::string loader_query_and_fragment_; 1447 std::string loader_query_and_fragment_;
1522 Browser* explicitly_set_browser_; 1448 Browser* explicitly_set_browser_;
1523 }; 1449 };
1524 1450
1525 // Checks that a page is correctly prerendered in the case of a 1451 // Checks that a page is correctly prerendered in the case of a
1526 // <link rel=prerender> tag and then loaded into a tab in response to a 1452 // <link rel=prerender> tag and then loaded into a tab in response to a
1527 // navigation. 1453 // navigation.
1528 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { 1454 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) {
1529 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); 1455 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
1530 1456
1531 ChannelDestructionWatcher channel_close_watcher; 1457 ChannelDestructionWatcher channel_close_watcher;
1532 channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> 1458 channel_close_watcher.WatchChannel(
1533 GetActiveWebContents()->GetRenderProcessHost()); 1459 GetActiveWebContents()->GetRenderProcessHost());
1534 NavigateToDestURL(); 1460 NavigateToDestURL();
1535 channel_close_watcher.WaitForChannelClose(); 1461 channel_close_watcher.WaitForChannelClose();
1536 1462
1537 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); 1463 ASSERT_TRUE(IsEmptyPrerenderLinkManager());
1538 } 1464 }
1539 1465
1540 // Checks that pending prerenders launch and receive proper event treatment. 1466 // Checks that pending prerenders launch and receive proper event treatment.
1541 // Disabled due to http://crbug.com/167792 1467 // Disabled due to http://crbug.com/167792
1542 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderPagePending) { 1468 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderPagePending) {
1543 std::vector<FinalStatus> expected_final_status_queue; 1469 std::vector<FinalStatus> expected_final_status_queue;
1544 expected_final_status_queue.push_back(FINAL_STATUS_USED); 1470 expected_final_status_queue.push_back(FINAL_STATUS_USED);
1545 expected_final_status_queue.push_back(FINAL_STATUS_USED); 1471 expected_final_status_queue.push_back(FINAL_STATUS_USED);
1546 PrerenderTestURL("files/prerender/prerender_page_pending.html", 1472 PrerenderTestURL("files/prerender/prerender_page_pending.html",
1547 expected_final_status_queue, 1); 1473 expected_final_status_queue, 1);
1548 1474
1549 ChannelDestructionWatcher first_channel_close_watcher; 1475 ChannelDestructionWatcher first_channel_close_watcher;
1550 1476
1551 first_channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> 1477 first_channel_close_watcher.WatchChannel(
1552 GetActiveWebContents()->GetRenderProcessHost()); 1478 GetActiveWebContents()->GetRenderProcessHost());
1553 NavigateToDestURL(); 1479 NavigateToDestURL();
1554 // NavigateToDestURL doesn't run a message loop. Normally that's fine, but in 1480 // NavigateToDestURL doesn't run a message loop. Normally that's fine, but in
1555 // this case, we need the pending prerenders to start. 1481 // this case, we need the pending prerenders to start.
1556 content::RunMessageLoop(); 1482 content::RunMessageLoop();
1557 first_channel_close_watcher.WaitForChannelClose(); 1483 first_channel_close_watcher.WaitForChannelClose();
1558 1484
1559 const GURL prerender_page_url = 1485 const GURL prerender_page_url =
1560 test_server()->GetURL("files/prerender/prerender_page.html"); 1486 test_server()->GetURL("files/prerender/prerender_page.html");
1561 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 1487 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
1562 EXPECT_NE(static_cast<TestPrerenderContents*>(NULL), 1488 EXPECT_NE(static_cast<TestPrerenderContents*>(NULL),
1563 GetPrerenderContentsFor(prerender_page_url)); 1489 GetPrerenderContentsFor(prerender_page_url));
1564 1490
1565 // Now navigate to our target page. 1491 // Now navigate to our target page.
1566 ChannelDestructionWatcher second_channel_close_watcher; 1492 ChannelDestructionWatcher second_channel_close_watcher;
1567 second_channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> 1493 second_channel_close_watcher.WatchChannel(
1568 GetActiveWebContents()->GetRenderProcessHost()); 1494 GetActiveWebContents()->GetRenderProcessHost());
1569 ui_test_utils::NavigateToURLWithDisposition( 1495 ui_test_utils::NavigateToURLWithDisposition(
1570 current_browser(), prerender_page_url, CURRENT_TAB, 1496 current_browser(), prerender_page_url, CURRENT_TAB,
1571 ui_test_utils::BROWSER_TEST_NONE); 1497 ui_test_utils::BROWSER_TEST_NONE);
1572 second_channel_close_watcher.WaitForChannelClose(); 1498 second_channel_close_watcher.WaitForChannelClose();
1573 1499
1574 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 1500 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
1575 } 1501 }
1576 1502
1577 // Checks that pending prerenders which are canceled before they are launched 1503 // Checks that pending prerenders which are canceled before they are launched
1578 // never get started. 1504 // never get started.
1579 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovesPending) { 1505 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovesPending) {
1580 PrerenderTestURL("files/prerender/prerender_page_removes_pending.html", 1506 PrerenderTestURL("files/prerender/prerender_page_removes_pending.html",
1581 FINAL_STATUS_USED, 1); 1507 FINAL_STATUS_USED, 1);
1582 1508
1583 ChannelDestructionWatcher channel_close_watcher; 1509 ChannelDestructionWatcher channel_close_watcher;
1584 channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> 1510 channel_close_watcher.WatchChannel(
1585 GetActiveWebContents()->GetRenderProcessHost()); 1511 GetActiveWebContents()->GetRenderProcessHost());
1586 NavigateToDestURL(); 1512 NavigateToDestURL();
1587 channel_close_watcher.WaitForChannelClose(); 1513 channel_close_watcher.WaitForChannelClose();
1588 1514
1589 EXPECT_FALSE(DidReceivePrerenderStartEventForLinkNumber(1)); 1515 EXPECT_FALSE(DidReceivePrerenderStartEventForLinkNumber(1));
1590 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1516 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1591 EXPECT_FALSE(HadPrerenderEventErrors()); 1517 EXPECT_FALSE(HadPrerenderEventErrors());
1592 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* 1518 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
1593 // calls did a thread/process hop to the renderer which insured pending 1519 // calls did a thread/process hop to the renderer which insured pending
1594 // renderer events have arrived. 1520 // renderer events have arrived.
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1671 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1597 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1672 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); 1598 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
1673 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1599 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1674 EXPECT_FALSE(HadPrerenderEventErrors()); 1600 EXPECT_FALSE(HadPrerenderEventErrors());
1675 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* 1601 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
1676 // calls did a thread/process hop to the renderer which insured pending 1602 // calls did a thread/process hop to the renderer which insured pending
1677 // renderer events have arrived. 1603 // renderer events have arrived.
1678 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 1604 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
1679 1605
1680 ChannelDestructionWatcher channel_close_watcher; 1606 ChannelDestructionWatcher channel_close_watcher;
1681 channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> 1607 channel_close_watcher.WatchChannel(
1682 GetActiveWebContents()->GetRenderProcessHost()); 1608 GetActiveWebContents()->GetRenderProcessHost());
1683 NavigateToDestURL(); 1609 NavigateToDestURL();
1684 channel_close_watcher.WaitForChannelClose(); 1610 channel_close_watcher.WaitForChannelClose();
1685 1611
1686 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 1612 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
1687 } 1613 }
1688 1614
1615 class PrerenderIncognitoBrowserTest : public PrerenderBrowserTest {
1616 public:
1617 virtual void SetUpOnMainThread() OVERRIDE {
1618 Profile* normal_profile = current_browser()->profile();
1619 set_browser(ui_test_utils::OpenURLOffTheRecord(
1620 normal_profile, GURL("about:blank")));
1621 PrerenderBrowserTest::SetUpOnMainThread();
1622 }
1623 };
1624
1689 // Checks that prerendering works in incognito mode. 1625 // Checks that prerendering works in incognito mode.
1690 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderIncognito) { 1626 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) {
1691 Profile* normal_profile = current_browser()->profile();
1692 set_browser(
1693 ui_test_utils::OpenURLOffTheRecord(normal_profile, GURL("about:blank")));
1694 // Increase memory expectations on the incognito PrerenderManager.
1695 IncreasePrerenderMemory();
1696 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); 1627 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
1697 NavigateToDestURL(); 1628 NavigateToDestURL();
1698 } 1629 }
mmenke 2014/01/17 22:00:38 optional: Suggest moving this test and its fixtur
davidben 2014/01/17 22:32:04 Done.
1699 1630
1700 // Checks that the visibility API works. 1631 // Checks that the visibility API works.
1701 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 1632 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1702 DISABLED_PrerenderVisibility) { 1633 DISABLED_PrerenderVisibility) {
1703 PrerenderTestURL("files/prerender/prerender_visibility.html", 1634 PrerenderTestURL("files/prerender/prerender_visibility.html",
1704 FINAL_STATUS_USED, 1635 FINAL_STATUS_USED,
1705 1); 1636 1);
1706 NavigateToDestURL(); 1637 NavigateToDestURL();
1707 } 1638 }
1708 1639
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1816 NavigateToDestURL(); 1747 NavigateToDestURL();
1817 1748
1818 1749
1819 // Run this check again. When we try to load aa ppapi plugin, the 1750 // Run this check again. When we try to load aa ppapi plugin, the
1820 // "loadstart" event is asynchronously posted to a message loop. 1751 // "loadstart" event is asynchronously posted to a message loop.
1821 // It's possible that earlier call could have been run before the 1752 // It's possible that earlier call could have been run before the
1822 // the "loadstart" event was posted. 1753 // the "loadstart" event was posted.
1823 // TODO(mmenke): While this should reliably fail on regressions, the 1754 // TODO(mmenke): While this should reliably fail on regressions, the
1824 // reliability depends on the specifics of ppapi plugin 1755 // reliability depends on the specifics of ppapi plugin
1825 // loading. It would be great if we could avoid that. 1756 // loading. It would be great if we could avoid that.
1826 WebContents* web_contents = 1757 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents()));
1827 browser()->tab_strip_model()->GetActiveWebContents();
1828 EXPECT_TRUE(DidDisplayPass(web_contents));
1829 } 1758 }
1830 1759
1831 // Checks that plugins in an iframe are not loaded while a page is 1760 // Checks that plugins in an iframe are not loaded while a page is
1832 // being preloaded, but are loaded when the page is displayed. 1761 // being preloaded, but are loaded when the page is displayed.
1833 #if defined(USE_AURA) && !defined(OS_WIN) 1762 #if defined(USE_AURA) && !defined(OS_WIN)
1834 // http://crbug.com/103496 1763 // http://crbug.com/103496
1835 #define MAYBE_PrerenderIframeDelayLoadPlugin \ 1764 #define MAYBE_PrerenderIframeDelayLoadPlugin \
1836 DISABLED_PrerenderIframeDelayLoadPlugin 1765 DISABLED_PrerenderIframeDelayLoadPlugin
1837 #elif defined(OS_MACOSX) 1766 #elif defined(OS_MACOSX)
1838 // http://crbug.com/100514 1767 // http://crbug.com/100514
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1906 1835
1907 // Checks that client-issued redirects work with prerendering. 1836 // Checks that client-issued redirects work with prerendering.
1908 // This version navigates to the final destination page, rather than the 1837 // This version navigates to the final destination page, rather than the
1909 // page which does the redirection via a mouse click. 1838 // page which does the redirection via a mouse click.
1910 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 1839 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1911 DISABLED_PrerenderClientRedirectNavigateToSecondViaClick) { 1840 DISABLED_PrerenderClientRedirectNavigateToSecondViaClick) {
1912 GURL prerender_url = test_server()->GetURL( 1841 GURL prerender_url = test_server()->GetURL(
1913 CreateClientRedirect("files/prerender/prerender_page.html")); 1842 CreateClientRedirect("files/prerender/prerender_page.html"));
1914 GURL destination_url = test_server()->GetURL( 1843 GURL destination_url = test_server()->GetURL(
1915 "files/prerender/prerender_page.html"); 1844 "files/prerender/prerender_page.html");
1916 PrerenderTestURL(prerender_url, destination_url, FINAL_STATUS_USED, 2); 1845 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 2);
1917 OpenDestURLViaClick(); 1846 OpenURLViaClick(destination_url);
1918 } 1847 }
1919 1848
1920 // Checks that a prerender for an https will prevent a prerender from happening. 1849 // Checks that a prerender for an https will prevent a prerender from happening.
1921 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHttps) { 1850 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHttps) {
1922 net::SpawnedTestServer https_server( 1851 net::SpawnedTestServer https_server(
1923 net::SpawnedTestServer::TYPE_HTTPS, net::SpawnedTestServer::kLocalhost, 1852 net::SpawnedTestServer::TYPE_HTTPS, net::SpawnedTestServer::kLocalhost,
1924 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); 1853 base::FilePath(FILE_PATH_LITERAL("chrome/test/data")));
1925 ASSERT_TRUE(https_server.Start()); 1854 ASSERT_TRUE(https_server.Start());
1926 GURL https_url = https_server.GetURL("files/prerender/prerender_page.html"); 1855 GURL https_url = https_server.GetURL("files/prerender/prerender_page.html");
1927 PrerenderTestURL(https_url, 1856 PrerenderTestURL(https_url,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
2012 1941
2013 // Checks that server-issued redirects work with prerendering. 1942 // Checks that server-issued redirects work with prerendering.
2014 // This version navigates to the final destination page, rather than the 1943 // This version navigates to the final destination page, rather than the
2015 // page which does the redirection via a mouse click. 1944 // page which does the redirection via a mouse click.
2016 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 1945 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2017 PrerenderServerRedirectNavigateToSecondViaClick) { 1946 PrerenderServerRedirectNavigateToSecondViaClick) {
2018 GURL prerender_url = test_server()->GetURL( 1947 GURL prerender_url = test_server()->GetURL(
2019 CreateServerRedirect("files/prerender/prerender_page.html")); 1948 CreateServerRedirect("files/prerender/prerender_page.html"));
2020 GURL destination_url = test_server()->GetURL( 1949 GURL destination_url = test_server()->GetURL(
2021 "files/prerender/prerender_page.html"); 1950 "files/prerender/prerender_page.html");
2022 PrerenderTestURL(prerender_url, destination_url, FINAL_STATUS_USED, 1); 1951 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 1);
2023 OpenDestURLViaClick(); 1952 OpenURLViaClick(destination_url);
2024 } 1953 }
2025 1954
2026 // Checks that server-issued redirects from an http to an https 1955 // Checks that server-issued redirects from an http to an https
2027 // location will cancel prerendering. 1956 // location will cancel prerendering.
2028 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 1957 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2029 PrerenderServerRedirectToHttps) { 1958 PrerenderServerRedirectToHttps) {
2030 net::SpawnedTestServer https_server( 1959 net::SpawnedTestServer https_server(
2031 net::SpawnedTestServer::TYPE_HTTPS, net::SpawnedTestServer::kLocalhost, 1960 net::SpawnedTestServer::TYPE_HTTPS, net::SpawnedTestServer::kLocalhost,
2032 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); 1961 base::FilePath(FILE_PATH_LITERAL("chrome/test/data")));
2033 ASSERT_TRUE(https_server.Start()); 1962 ASSERT_TRUE(https_server.Start());
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
2111 PrerenderTestURL("files/prerender/prerender_referrer.html", 2040 PrerenderTestURL("files/prerender/prerender_referrer.html",
2112 FINAL_STATUS_USED, 2041 FINAL_STATUS_USED,
2113 1); 2042 1);
2114 NavigateToDestURL(); 2043 NavigateToDestURL();
2115 } 2044 }
2116 2045
2117 // Checks that the referrer is not set when prerendering and the source page is 2046 // Checks that the referrer is not set when prerendering and the source page is
2118 // HTTPS. 2047 // HTTPS.
2119 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2048 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2120 PrerenderNoSSLReferrer) { 2049 PrerenderNoSSLReferrer) {
2121 set_use_https_src(true); 2050 UseHttpsSrcServer();
2122 PrerenderTestURL("files/prerender/prerender_no_referrer.html", 2051 PrerenderTestURL("files/prerender/prerender_no_referrer.html",
2123 FINAL_STATUS_USED, 2052 FINAL_STATUS_USED,
2124 1); 2053 1);
2125 NavigateToDestURL(); 2054 NavigateToDestURL();
2126 } 2055 }
2127 2056
2128 // Checks that the referrer is set when prerendering is cancelled. 2057 // Checks that the referrer is set when prerendering is cancelled.
2129 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelReferrer) { 2058 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelReferrer) {
2130 scoped_ptr<TestContentBrowserClient> test_content_browser_client( 2059 scoped_ptr<TestContentBrowserClient> test_content_browser_client(
2131 new TestContentBrowserClient); 2060 new TestContentBrowserClient);
2132 content::ContentBrowserClient* original_browser_client = 2061 content::ContentBrowserClient* original_browser_client =
2133 content::SetBrowserClientForTesting(test_content_browser_client.get()); 2062 content::SetBrowserClientForTesting(test_content_browser_client.get());
2134 2063
2135 PrerenderTestURL("files/prerender/prerender_referrer.html", 2064 PrerenderTestURL("files/prerender/prerender_referrer.html",
2136 FINAL_STATUS_CANCELLED, 2065 FINAL_STATUS_CANCELLED,
2137 1); 2066 1);
2138 OpenDestURLViaClick(); 2067 OpenDestURLViaClick();
2139 2068
2140 bool display_test_result = false; 2069 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents()));
2141 WebContents* web_contents =
2142 browser()->tab_strip_model()->GetActiveWebContents();
2143 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
2144 web_contents,
2145 "window.domAutomationController.send(DidDisplayPass())",
2146 &display_test_result));
2147 EXPECT_TRUE(display_test_result);
2148 2070
2149 content::SetBrowserClientForTesting(original_browser_client); 2071 content::SetBrowserClientForTesting(original_browser_client);
2150 } 2072 }
2151 2073
2152 // Checks that popups on a prerendered page cause cancellation. 2074 // Checks that popups on a prerendered page cause cancellation.
2153 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPopup) { 2075 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPopup) {
2154 PrerenderTestURL("files/prerender/prerender_popup.html", 2076 PrerenderTestURL("files/prerender/prerender_popup.html",
2155 FINAL_STATUS_CREATE_NEW_WINDOW, 2077 FINAL_STATUS_CREATE_NEW_WINDOW,
2156 0); 2078 0);
2157 } 2079 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2189 // TODO(gavinp,sreeram): Fix http://crbug.com/145248 and deflake this test. 2111 // TODO(gavinp,sreeram): Fix http://crbug.com/145248 and deflake this test.
2190 // Checks that we don't prerender in an infinite loop. 2112 // Checks that we don't prerender in an infinite loop.
2191 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderInfiniteLoop) { 2113 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderInfiniteLoop) {
2192 const char* const kHtmlFileA = "files/prerender/prerender_infinite_a.html"; 2114 const char* const kHtmlFileA = "files/prerender/prerender_infinite_a.html";
2193 const char* const kHtmlFileB = "files/prerender/prerender_infinite_b.html"; 2115 const char* const kHtmlFileB = "files/prerender/prerender_infinite_b.html";
2194 2116
2195 std::vector<FinalStatus> expected_final_status_queue; 2117 std::vector<FinalStatus> expected_final_status_queue;
2196 expected_final_status_queue.push_back(FINAL_STATUS_USED); 2118 expected_final_status_queue.push_back(FINAL_STATUS_USED);
2197 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); 2119 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING);
2198 2120
2199 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); 2121 ScopedVector<TestPrerender> prerenders =
2200 ASSERT_TRUE(GetPrerenderContents()); 2122 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1);
2201 GetPrerenderContents()->WaitForPendingPrerenders(1u); 2123 ASSERT_TRUE(prerenders[0]->contents());
2124 prerenders[0]->contents()->WaitForPendingPrerenders(1u);
2202 2125
2203 // Next url should be in pending list but not an active entry. 2126 // Next url should be in pending list but not an active entry.
2204 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileB)); 2127 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileB));
2205 2128
2206 NavigateToDestURL(); 2129 NavigateToDestURL();
2207 2130
2208 // Make sure the PrerenderContents for the next url is now in the manager 2131 // Make sure the PrerenderContents for the next url is now in the manager
2209 // and not pending. 2132 // and not pending.
2210 EXPECT_TRUE(UrlIsInPrerenderManager(kHtmlFileB)); 2133 EXPECT_TRUE(UrlIsInPrerenderManager(kHtmlFileB));
2211 } 2134 }
(...skipping 13 matching lines...) Expand all
2225 // This test is conceptually simplest if concurrency is at two, since we 2148 // This test is conceptually simplest if concurrency is at two, since we
2226 // don't have to worry about which of kHtmlFileB or kHtmlFileC gets evicted. 2149 // don't have to worry about which of kHtmlFileB or kHtmlFileC gets evicted.
2227 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; 2150 GetPrerenderManager()->mutable_config().max_link_concurrency = 2;
2228 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; 2151 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2;
2229 2152
2230 std::vector<FinalStatus> expected_final_status_queue; 2153 std::vector<FinalStatus> expected_final_status_queue;
2231 expected_final_status_queue.push_back(FINAL_STATUS_USED); 2154 expected_final_status_queue.push_back(FINAL_STATUS_USED);
2232 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); 2155 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING);
2233 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); 2156 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING);
2234 2157
2235 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); 2158 ScopedVector<TestPrerender> prerenders =
2236 ASSERT_TRUE(GetPrerenderContents()); 2159 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1);
2237 GetPrerenderContents()->WaitForPendingPrerenders(2u); 2160 ASSERT_TRUE(prerenders[0]->contents());
2161 prerenders[0]->contents()->WaitForPendingPrerenders(2u);
2238 2162
2239 // Next url should be in pending list but not an active entry. 2163 // Next url should be in pending list but not an active entry.
2240 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileB)); 2164 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileB));
2241 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileC)); 2165 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileC));
2242 2166
2243 NavigateToDestURL(); 2167 NavigateToDestURL();
2244 2168
2245 // Make sure the PrerenderContents for the next urls are now in the manager 2169 // Make sure the PrerenderContents for the next urls are now in the manager
2246 // and not pending. One and only one of the URLs (the last seen) should be the 2170 // and not pending. One and only one of the URLs (the last seen) should be the
2247 // active entry. 2171 // active entry.
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
2312 // We may have deleted the prerender tab, but the swapped in tab should be 2236 // We may have deleted the prerender tab, but the swapped in tab should be
2313 // active. 2237 // active.
2314 EXPECT_GE(num_tabs_with_prerender_page_title, 1); 2238 EXPECT_GE(num_tabs_with_prerender_page_title, 1);
2315 EXPECT_LE(num_tabs_with_prerender_page_title, 2); 2239 EXPECT_LE(num_tabs_with_prerender_page_title, 2);
2316 } 2240 }
2317 2241
2318 // Checks that audio loads are deferred on prerendering. 2242 // Checks that audio loads are deferred on prerendering.
2319 // Times out under AddressSanitizer, see http://crbug.com/108402 2243 // Times out under AddressSanitizer, see http://crbug.com/108402
2320 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderHTML5Audio) { 2244 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderHTML5Audio) {
2321 PrerenderTestURL("files/prerender/prerender_html5_audio.html", 2245 PrerenderTestURL("files/prerender/prerender_html5_audio.html",
2322 FINAL_STATUS_USED, 2246 FINAL_STATUS_USED,
2323 1); 2247 1);
2324 NavigateToDestUrlAndWaitForPassTitle(); 2248 NavigateToDestURL();
2249 WaitForASCIITitle(GetActiveWebContents(), kPassTitle);
2325 } 2250 }
2326 2251
2327 // Checks that audio loads are deferred on prerendering and played back when 2252 // Checks that audio loads are deferred on prerendering and played back when
2328 // the prerender is swapped in if autoplay is set. 2253 // the prerender is swapped in if autoplay is set.
2329 // Periodically fails on chrome-os. See http://crbug.com/145263 2254 // Periodically fails on chrome-os. See http://crbug.com/145263
2330 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2255 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2331 DISABLED_PrerenderHTML5AudioAutoplay) { 2256 DISABLED_PrerenderHTML5AudioAutoplay) {
2332 PrerenderTestURL("files/prerender/prerender_html5_audio_autoplay.html", 2257 PrerenderTestURL("files/prerender/prerender_html5_audio_autoplay.html",
2333 FINAL_STATUS_USED, 2258 FINAL_STATUS_USED,
2334 1); 2259 1);
2335 NavigateToDestUrlAndWaitForPassTitle(); 2260 NavigateToDestURL();
2261 WaitForASCIITitle(GetActiveWebContents(), kPassTitle);
2336 } 2262 }
2337 2263
2338 // Checks that audio loads are deferred on prerendering and played back when 2264 // Checks that audio loads are deferred on prerendering and played back when
2339 // the prerender is swapped in if js starts playing. 2265 // the prerender is swapped in if js starts playing.
2340 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2266 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2341 DISABLED_PrerenderHTML5AudioJsplay) { 2267 DISABLED_PrerenderHTML5AudioJsplay) {
2342 PrerenderTestURL("files/prerender/prerender_html5_audio_jsplay.html", 2268 PrerenderTestURL("files/prerender/prerender_html5_audio_jsplay.html",
2343 FINAL_STATUS_USED, 2269 FINAL_STATUS_USED,
2344 1); 2270 1);
2345 NavigateToDestUrlAndWaitForPassTitle(); 2271 NavigateToDestURL();
2272 WaitForASCIITitle(GetActiveWebContents(), kPassTitle);
2346 } 2273 }
2347 2274
2348 // Checks that video loads are deferred on prerendering. 2275 // Checks that video loads are deferred on prerendering.
2349 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderHTML5Video) { 2276 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderHTML5Video) {
2350 PrerenderTestURL("files/prerender/prerender_html5_video.html", 2277 PrerenderTestURL("files/prerender/prerender_html5_video.html",
2351 FINAL_STATUS_USED, 2278 FINAL_STATUS_USED,
2352 1); 2279 1);
2353 NavigateToDestUrlAndWaitForPassTitle(); 2280 NavigateToDestURL();
2281 WaitForASCIITitle(GetActiveWebContents(), kPassTitle);
2354 } 2282 }
2355 2283
2356 // Checks that video tags inserted by javascript are deferred and played 2284 // Checks that video tags inserted by javascript are deferred and played
2357 // correctly on swap in. 2285 // correctly on swap in.
2358 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2286 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2359 DISABLED_PrerenderHTML5VideoJs) { 2287 DISABLED_PrerenderHTML5VideoJs) {
2360 PrerenderTestURL("files/prerender/prerender_html5_video_script.html", 2288 PrerenderTestURL("files/prerender/prerender_html5_video_script.html",
2361 FINAL_STATUS_USED, 2289 FINAL_STATUS_USED,
2362 1); 2290 1);
2363 NavigateToDestUrlAndWaitForPassTitle(); 2291 NavigateToDestURL();
2292 WaitForASCIITitle(GetActiveWebContents(), kPassTitle);
2364 } 2293 }
2365 2294
2366 // Checks for correct network events by using a busy sleep the javascript. 2295 // Checks for correct network events by using a busy sleep the javascript.
2367 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2296 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2368 DISABLED_PrerenderHTML5VideoNetwork) { 2297 DISABLED_PrerenderHTML5VideoNetwork) {
2369 PrerenderTestURL("files/prerender/prerender_html5_video_network.html", 2298 DisableJavascriptCalls();
2370 FINAL_STATUS_USED, 2299 scoped_ptr<TestPrerender> prerender =
2371 1, 2300 PrerenderTestURL("files/prerender/prerender_html5_video_network.html",
2372 true); 2301 FINAL_STATUS_USED,
2373 NavigateToDestUrlAndWaitForPassTitle(); 2302 1);
2303 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle);
2304 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents()));
2305 NavigateToDestURL();
2306 WaitForASCIITitle(GetActiveWebContents(), kPassTitle);
2374 } 2307 }
2375 2308
2376 // Checks that scripts can retrieve the correct window size while prerendering. 2309 // Checks that scripts can retrieve the correct window size while prerendering.
2377 #if defined(TOOLKIT_VIEWS) 2310 #if defined(TOOLKIT_VIEWS)
2378 // TODO(beng): Widget hierarchy split causes this to fail http://crbug.com/82363 2311 // TODO(beng): Widget hierarchy split causes this to fail http://crbug.com/82363
2379 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderWindowSize) { 2312 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderWindowSize) {
2380 #else 2313 #else
2381 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowSize) { 2314 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowSize) {
2382 #endif 2315 #endif
2383 PrerenderTestURL("files/prerender/prerender_size.html", 2316 PrerenderTestURL("files/prerender/prerender_size.html",
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
2861 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderLocalStorageWrite) { 2794 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderLocalStorageWrite) {
2862 PrerenderTestURL("files/prerender/prerender_localstorage_write.html", 2795 PrerenderTestURL("files/prerender/prerender_localstorage_write.html",
2863 FINAL_STATUS_USED, 2796 FINAL_STATUS_USED,
2864 1); 2797 1);
2865 NavigateToDestURL(); 2798 NavigateToDestURL();
2866 } 2799 }
2867 2800
2868 // Checks that the favicon is properly loaded on prerender. 2801 // Checks that the favicon is properly loaded on prerender.
2869 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2802 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2870 DISABLED_PrerenderFavicon) { 2803 DISABLED_PrerenderFavicon) {
2871 PrerenderTestURL("files/prerender/prerender_favicon.html", 2804 scoped_ptr<TestPrerender> prerender =
2872 FINAL_STATUS_USED, 2805 PrerenderTestURL("files/prerender/prerender_favicon.html",
2873 1); 2806 FINAL_STATUS_USED,
2874 TestPrerenderContents* prerender_contents = GetPrerenderContents(); 2807 1);
2875 ASSERT_TRUE(prerender_contents != NULL); 2808 ASSERT_TRUE(prerender->contents());
2876 content::WindowedNotificationObserver favicon_update_watcher( 2809 content::WindowedNotificationObserver favicon_update_watcher(
2877 chrome::NOTIFICATION_FAVICON_UPDATED, 2810 chrome::NOTIFICATION_FAVICON_UPDATED,
2878 content::Source<WebContents>(prerender_contents->prerender_contents())); 2811 content::Source<WebContents>(
2812 prerender->contents()->prerender_contents()));
2879 NavigateToDestURL(); 2813 NavigateToDestURL();
2880 favicon_update_watcher.Wait(); 2814 favicon_update_watcher.Wait();
2881 } 2815 }
2882 2816
2883 // Checks that when a prerendered page is swapped in to a referring page, the 2817 // Checks that when a prerendered page is swapped in to a referring page, the
2884 // unload handlers on the referring page are executed. 2818 // unload handlers on the referring page are executed.
2885 // Fails about 50% on CrOS, 5-10% on linux, win, mac. http://crbug.com/128986 2819 // Fails about 50% on CrOS, 5-10% on linux, win, mac. http://crbug.com/128986
2886 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderUnload) { 2820 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderUnload) {
2887 set_loader_path("files/prerender/prerender_loader_with_unload.html"); 2821 set_loader_path("files/prerender/prerender_loader_with_unload.html");
2888 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); 2822 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2933 2867
2934 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelAll) { 2868 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelAll) {
2935 scoped_ptr<TestPrerender> prerender = 2869 scoped_ptr<TestPrerender> prerender =
2936 PrerenderTestURL("files/prerender/prerender_page.html", 2870 PrerenderTestURL("files/prerender/prerender_page.html",
2937 FINAL_STATUS_CANCELLED, 2871 FINAL_STATUS_CANCELLED,
2938 1); 2872 1);
2939 2873
2940 GetPrerenderManager()->CancelAllPrerenders(); 2874 GetPrerenderManager()->CancelAllPrerenders();
2941 prerender->WaitForStop(); 2875 prerender->WaitForStop();
2942 2876
2943 EXPECT_TRUE(GetPrerenderContents() == NULL); 2877 EXPECT_FALSE(prerender->contents());
2944 } 2878 }
2945 2879
2946 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEvents) { 2880 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEvents) {
2947 scoped_ptr<TestPrerender> prerender = 2881 scoped_ptr<TestPrerender> prerender =
2948 PrerenderTestURL("files/prerender/prerender_page.html", 2882 PrerenderTestURL("files/prerender/prerender_page.html",
2949 FINAL_STATUS_CANCELLED, 1); 2883 FINAL_STATUS_CANCELLED, 1);
2950 2884
2951 GetPrerenderManager()->CancelAllPrerenders(); 2885 GetPrerenderManager()->CancelAllPrerenders();
2952 prerender->WaitForStop(); 2886 prerender->WaitForStop();
2953 2887
2954 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 2888 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
2955 EXPECT_TRUE(DidReceivePrerenderStopEventForLinkNumber(0)); 2889 EXPECT_TRUE(DidReceivePrerenderStopEventForLinkNumber(0));
2956 EXPECT_FALSE(HadPrerenderEventErrors()); 2890 EXPECT_FALSE(HadPrerenderEventErrors());
2957 } 2891 }
2958 2892
2959 // Cancels the prerender of a page with its own prerender. The second prerender 2893 // Cancels the prerender of a page with its own prerender. The second prerender
2960 // should never be started. 2894 // should never be started.
2961 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2895 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2962 PrerenderCancelPrerenderWithPrerender) { 2896 PrerenderCancelPrerenderWithPrerender) {
2963 scoped_ptr<TestPrerender> prerender = 2897 scoped_ptr<TestPrerender> prerender =
2964 PrerenderTestURL("files/prerender/prerender_infinite_a.html", 2898 PrerenderTestURL("files/prerender/prerender_infinite_a.html",
2965 FINAL_STATUS_CANCELLED, 2899 FINAL_STATUS_CANCELLED,
2966 1); 2900 1);
2967 2901
2968 GetPrerenderManager()->CancelAllPrerenders(); 2902 GetPrerenderManager()->CancelAllPrerenders();
2969 prerender->WaitForStop(); 2903 prerender->WaitForStop();
2970 2904
2971 EXPECT_TRUE(GetPrerenderContents() == NULL); 2905 EXPECT_FALSE(prerender->contents());
2972 } 2906 }
2973 2907
2974 // Prerendering and history tests. 2908 // Prerendering and history tests.
2975 // The prerendered page is navigated to in several ways [navigate via 2909 // The prerendered page is navigated to in several ways [navigate via
2976 // omnibox, click on link, key-modified click to open in background tab, etc], 2910 // omnibox, click on link, key-modified click to open in background tab, etc],
2977 // followed by a navigation to another page from the prerendered page, followed 2911 // followed by a navigation to another page from the prerendered page, followed
2978 // by a back navigation. 2912 // by a back navigation.
2979 2913
2980 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2914 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2981 DISABLED_PrerenderNavigateClickGoBack) { 2915 DISABLED_PrerenderNavigateClickGoBack) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
3030 2964
3031 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewForegroundTab) { 2965 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewForegroundTab) {
3032 PrerenderTestURL("files/prerender/prerender_page_with_link.html", 2966 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
3033 FINAL_STATUS_WINDOW_OPENER, 2967 FINAL_STATUS_WINDOW_OPENER,
3034 1); 2968 1);
3035 OpenDestURLViaClickNewForegroundTab(); 2969 OpenDestURLViaClickNewForegroundTab();
3036 } 2970 }
3037 2971
3038 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2972 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
3039 DISABLED_PrerenderClickNewBackgroundTab) { 2973 DISABLED_PrerenderClickNewBackgroundTab) {
3040 PrerenderTestURL("files/prerender/prerender_page_with_link.html", 2974 scoped_ptr<TestPrerender> prerender =
3041 FINAL_STATUS_APP_TERMINATING, 2975 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
3042 1); 2976 FINAL_STATUS_APP_TERMINATING,
2977 1);
2978 ASSERT_TRUE(prerender->contents());
2979 prerender->contents()->set_should_be_shown(false);
3043 OpenDestURLViaClickNewBackgroundTab(); 2980 OpenDestURLViaClickNewBackgroundTab();
3044 } 2981 }
3045 2982
3046 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2983 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
3047 NavigateToPrerenderedPageWhenDevToolsAttached) { 2984 NavigateToPrerenderedPageWhenDevToolsAttached) {
3048 DisableJavascriptCalls(); 2985 DisableJavascriptCalls();
3049 WebContents* web_contents = 2986 WebContents* web_contents =
3050 current_browser()->tab_strip_model()->GetActiveWebContents(); 2987 current_browser()->tab_strip_model()->GetActiveWebContents();
3051 scoped_refptr<DevToolsAgentHost> agent(DevToolsAgentHost::GetOrCreateFor( 2988 scoped_refptr<DevToolsAgentHost> agent(DevToolsAgentHost::GetOrCreateFor(
3052 web_contents->GetRenderViewHost())); 2989 web_contents->GetRenderViewHost()));
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
3137 set_loader_path("files/prerender/prerender_loader_with_referrer_policy.html"); 3074 set_loader_path("files/prerender/prerender_loader_with_referrer_policy.html");
3138 PrerenderTestURL("files/prerender/prerender_referrer_policy.html", 3075 PrerenderTestURL("files/prerender/prerender_referrer_policy.html",
3139 FINAL_STATUS_USED, 3076 FINAL_STATUS_USED,
3140 1); 3077 1);
3141 NavigateToDestURL(); 3078 NavigateToDestURL();
3142 } 3079 }
3143 3080
3144 // Checks that the referrer policy is used when prerendering on HTTPS. 3081 // Checks that the referrer policy is used when prerendering on HTTPS.
3145 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 3082 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
3146 PrerenderSSLReferrerPolicy) { 3083 PrerenderSSLReferrerPolicy) {
3147 set_use_https_src(true); 3084 UseHttpsSrcServer();
3148 set_loader_path("files/prerender/prerender_loader_with_referrer_policy.html"); 3085 set_loader_path("files/prerender/prerender_loader_with_referrer_policy.html");
3149 PrerenderTestURL("files/prerender/prerender_referrer_policy.html", 3086 PrerenderTestURL("files/prerender/prerender_referrer_policy.html",
3150 FINAL_STATUS_USED, 3087 FINAL_STATUS_USED,
3151 1); 3088 1);
3152 NavigateToDestURL(); 3089 NavigateToDestURL();
3153 } 3090 }
3154 3091
3155 // Checks that the referrer policy is used when prerendering is cancelled. 3092 // Checks that the referrer policy is used when prerendering is cancelled.
3156 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelReferrerPolicy) { 3093 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelReferrerPolicy) {
3157 scoped_ptr<TestContentBrowserClient> test_content_browser_client( 3094 scoped_ptr<TestContentBrowserClient> test_content_browser_client(
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
3353 GURL url = test_server()->GetURL( 3290 GURL url = test_server()->GetURL(
3354 CreateServerRedirect("invalidscheme://www.google.com/test.html")); 3291 CreateServerRedirect("invalidscheme://www.google.com/test.html"));
3355 PrerenderTestURL(url, FINAL_STATUS_UNSUPPORTED_SCHEME, 0); 3292 PrerenderTestURL(url, FINAL_STATUS_UNSUPPORTED_SCHEME, 0);
3356 } 3293 }
3357 3294
3358 // Checks that media source video loads are deferred on prerendering. 3295 // Checks that media source video loads are deferred on prerendering.
3359 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5MediaSourceVideo) { 3296 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5MediaSourceVideo) {
3360 PrerenderTestURL("files/prerender/prerender_html5_video_media_source.html", 3297 PrerenderTestURL("files/prerender/prerender_html5_video_media_source.html",
3361 FINAL_STATUS_USED, 3298 FINAL_STATUS_USED,
3362 1); 3299 1);
3363 NavigateToDestUrlAndWaitForPassTitle(); 3300 NavigateToDestURL();
3301 WaitForASCIITitle(GetActiveWebContents(), kPassTitle);
3364 } 3302 }
3365 3303
3366 // Checks that a prerender that creates an audio stream (via a WebAudioDevice) 3304 // Checks that a prerender that creates an audio stream (via a WebAudioDevice)
3367 // is cancelled. 3305 // is cancelled.
3368 // http://crbug.com/261489 3306 // http://crbug.com/261489
3369 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderWebAudioDevice) { 3307 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderWebAudioDevice) {
3370 PrerenderTestURL("files/prerender/prerender_web_audio_device.html", 3308 PrerenderTestURL("files/prerender/prerender_web_audio_device.html",
3371 FINAL_STATUS_CREATING_AUDIO_STREAM, 1); 3309 FINAL_STATUS_CREATING_AUDIO_STREAM, 1);
3372 } 3310 }
3373 3311
3374 // Checks that prerenders do not swap in to WebContents being captured. 3312 // Checks that prerenders do not swap in to WebContents being captured.
3375 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCapturedWebContents) { 3313 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCapturedWebContents) {
3376 PrerenderTestURL("files/prerender/prerender_page.html", 3314 PrerenderTestURL("files/prerender/prerender_page.html",
3377 FINAL_STATUS_PAGE_BEING_CAPTURED, 1); 3315 FINAL_STATUS_PAGE_BEING_CAPTURED, 1);
3378 WebContents* web_contents = 3316 WebContents* web_contents = GetActiveWebContents();
3379 current_browser()->tab_strip_model()->GetActiveWebContents();
3380 web_contents->IncrementCapturerCount(); 3317 web_contents->IncrementCapturerCount();
3381 NavigateToDestURLWithDisposition(CURRENT_TAB, false); 3318 NavigateToDestURLWithDisposition(CURRENT_TAB, false);
3382 web_contents->DecrementCapturerCount(); 3319 web_contents->DecrementCapturerCount();
3383 } 3320 }
3384 3321
3385 // Checks that prerenders are aborted on cross-process navigation from 3322 // Checks that prerenders are aborted on cross-process navigation from
3386 // a server redirect. 3323 // a server redirect.
3387 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 3324 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
3388 PrerenderCrossProcessServerRedirect) { 3325 PrerenderCrossProcessServerRedirect) {
3389 // Force everything to be a process swap. 3326 // Force everything to be a process swap.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
3434 GetPrerenderManager()->CancelAllPrerenders(); 3371 GetPrerenderManager()->CancelAllPrerenders();
3435 prerenders[1]->WaitForStop(); 3372 prerenders[1]->WaitForStop();
3436 3373
3437 // Check the referring page only got one copy of the event. 3374 // Check the referring page only got one copy of the event.
3438 EXPECT_FALSE(HadPrerenderEventErrors()); 3375 EXPECT_FALSE(HadPrerenderEventErrors());
3439 } 3376 }
3440 3377
3441 // Checks that a deferred redirect to an image is not loaded until the 3378 // Checks that a deferred redirect to an image is not loaded until the
3442 // page is visible. 3379 // page is visible.
3443 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { 3380 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) {
3444 // We do NOT wait for a load event, as the image will block the 3381 DisableJavascriptCalls();
3445 // load. Instead, wait for the title to change. 3382
3383 // The prerender will not completely load until after the swap, so wait for a
3384 // title change before calling DidPrerenderPass.
3446 scoped_ptr<TestPrerender> prerender = 3385 scoped_ptr<TestPrerender> prerender =
3447 PrerenderTestURL("files/prerender/prerender_deferred_image.html", 3386 PrerenderTestURL(
3448 FINAL_STATUS_USED, 0, true); 3387 "files/prerender/prerender_deferred_image.html",
3449 3388 FINAL_STATUS_USED, 0);
3450 // The prerender hasn't loaded yet because its image is deferred. 3389 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle);
3390 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents()));
3451 EXPECT_EQ(0, prerender->number_of_loads()); 3391 EXPECT_EQ(0, prerender->number_of_loads());
3452 3392
3453 // Navigate, waiting for both the swap and an extra load from the prerender. 3393 // Navigate, waiting for both the swap and an extra load from the prerender.
3454 // The swap happens before the load, so |prerender->WaitForLoads(1)| doesn't 3394 // The swap happens before the load, so |prerender->WaitForLoads(1)| doesn't
3455 // work. 3395 // work.
3456 content::WindowedNotificationObserver page_load_observer( 3396 content::WindowedNotificationObserver page_load_observer(
3457 content::NOTIFICATION_LOAD_STOP, 3397 content::NOTIFICATION_LOAD_STOP,
3458 content::Source<NavigationController>( 3398 content::Source<NavigationController>(
3459 &prerender->contents()->prerender_contents()->GetController())); 3399 &prerender->contents()->prerender_contents()->GetController()));
3460 NavigationOrSwapObserver swap_observer( 3400 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(),
3461 current_browser()->tab_strip_model(), 3401 GetActiveWebContents());
3462 current_browser()->tab_strip_model()->GetActiveWebContents());
3463 ui_test_utils::NavigateToURLWithDisposition( 3402 ui_test_utils::NavigateToURLWithDisposition(
3464 current_browser(), dest_url(), CURRENT_TAB, 3403 current_browser(), dest_url(), CURRENT_TAB,
3465 ui_test_utils::BROWSER_TEST_NONE); 3404 ui_test_utils::BROWSER_TEST_NONE);
3466 swap_observer.Wait(); 3405 swap_observer.Wait();
3467 page_load_observer.Wait(); 3406 page_load_observer.Wait();
3468 3407
3469 // The prerender never observed the final load. 3408 // The prerender never observed the final load.
3470 EXPECT_EQ(0, prerender->number_of_loads()); 3409 EXPECT_EQ(0, prerender->number_of_loads());
3471 3410
3472 // Now check DidDisplayPass. 3411 // Now check DidDisplayPass.
3473 EXPECT_TRUE(DidDisplayPass( 3412 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents()));
3474 current_browser()->tab_strip_model()->GetActiveWebContents()));
3475 } 3413 }
3476 3414
3477 // Checks that a deferred redirect to an image is not loaded until the 3415 // Checks that a deferred redirect to an image is not loaded until the
3478 // page is visible, even after another redirect. 3416 // page is visible, even after another redirect.
3479 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 3417 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
3480 PrerenderDeferredImageAfterRedirect) { 3418 PrerenderDeferredImageAfterRedirect) {
3481 // We do NOT wait for a load event, as the image will block the 3419 DisableJavascriptCalls();
3482 // load. Instead, wait for the title to change. 3420
3421 // The prerender will not completely load until after the swap, so wait for a
3422 // title change before calling DidPrerenderPass.
3483 scoped_ptr<TestPrerender> prerender = 3423 scoped_ptr<TestPrerender> prerender =
3484 PrerenderTestURL( 3424 PrerenderTestURL(
3485 "files/prerender/prerender_deferred_image.html#double_redirect", 3425 "files/prerender/prerender_deferred_image.html",
3486 FINAL_STATUS_USED, 0, true); 3426 FINAL_STATUS_USED, 0);
3487 3427 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle);
3488 // The prerender hasn't loaded yet because its image is deferred. 3428 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents()));
3489 EXPECT_EQ(0, prerender->number_of_loads()); 3429 EXPECT_EQ(0, prerender->number_of_loads());
3490 3430
3491 // Navigate, waiting for both the swap and an extra load from the prerender. 3431 // Navigate, waiting for both the swap and an extra load from the prerender.
3492 // The swap happens before the load, so |prerender->WaitForLoads(1)| doesn't 3432 // The swap happens before the load, so |prerender->WaitForLoads(1)| doesn't
3493 // work. 3433 // work.
3494 content::WindowedNotificationObserver page_load_observer( 3434 content::WindowedNotificationObserver page_load_observer(
3495 content::NOTIFICATION_LOAD_STOP, 3435 content::NOTIFICATION_LOAD_STOP,
3496 content::Source<NavigationController>( 3436 content::Source<NavigationController>(
3497 &prerender->contents()->prerender_contents()->GetController())); 3437 &prerender->contents()->prerender_contents()->GetController()));
3498 NavigationOrSwapObserver swap_observer( 3438 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(),
3499 current_browser()->tab_strip_model(), 3439 GetActiveWebContents());
3500 current_browser()->tab_strip_model()->GetActiveWebContents());
3501 ui_test_utils::NavigateToURLWithDisposition( 3440 ui_test_utils::NavigateToURLWithDisposition(
3502 current_browser(), dest_url(), CURRENT_TAB, 3441 current_browser(), dest_url(), CURRENT_TAB,
3503 ui_test_utils::BROWSER_TEST_NONE); 3442 ui_test_utils::BROWSER_TEST_NONE);
3504 swap_observer.Wait(); 3443 swap_observer.Wait();
3505 page_load_observer.Wait(); 3444 page_load_observer.Wait();
3506 3445
3507 // The prerender never observed the final load. 3446 // The prerender never observed the final load.
3508 EXPECT_EQ(0, prerender->number_of_loads()); 3447 EXPECT_EQ(0, prerender->number_of_loads());
3509 3448
3510 // Now check DidDisplayPass. 3449 // Now check DidDisplayPass.
3511 EXPECT_TRUE(DidDisplayPass( 3450 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents()));
3512 current_browser()->tab_strip_model()->GetActiveWebContents()));
3513 } 3451 }
3514 3452
3515 // Checks that deferred redirects in the main frame are followed. 3453 // Checks that deferred redirects in the main frame are followed.
3516 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredMainFrame) { 3454 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredMainFrame) {
3517 DisableJavascriptCalls(); 3455 DisableJavascriptCalls();
3518 PrerenderTestURL( 3456 PrerenderTestURL(
3519 "files/prerender/image-deferred.png", 3457 "files/prerender/image-deferred.png",
3520 FINAL_STATUS_USED, 1); 3458 FINAL_STATUS_USED, 1);
3521 NavigateToDestURL(); 3459 NavigateToDestURL();
3522 } 3460 }
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
3590 3528
3591 // Now navigate in the new tab. Set expect_swap_to_succeed to false because 3529 // Now navigate in the new tab. Set expect_swap_to_succeed to false because
3592 // the swap does not occur synchronously. 3530 // the swap does not occur synchronously.
3593 // 3531 //
3594 // TODO(davidben): When all swaps become asynchronous, remove the OpenURL 3532 // TODO(davidben): When all swaps become asynchronous, remove the OpenURL
3595 // return value assertion and let this go through the usual successful-swap 3533 // return value assertion and let this go through the usual successful-swap
3596 // codepath. 3534 // codepath.
3597 NavigateToDestURLWithDisposition(CURRENT_TAB, false); 3535 NavigateToDestURLWithDisposition(CURRENT_TAB, false);
3598 3536
3599 // Verify DidDisplayPass manually since the previous call skipped it. 3537 // Verify DidDisplayPass manually since the previous call skipped it.
3600 EXPECT_TRUE(DidDisplayPass( 3538 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents()));
3601 current_browser()->tab_strip_model()->GetActiveWebContents()));
3602 } 3539 }
3603 3540
3604 // Verify that session storage conflicts don't merge. 3541 // Verify that session storage conflicts don't merge.
3605 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSessionStorageConflict) { 3542 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSessionStorageConflict) {
3606 PrerenderTestURL("files/prerender/prerender_session_storage_conflict.html", 3543 PrerenderTestURL("files/prerender/prerender_session_storage_conflict.html",
3607 FINAL_STATUS_APP_TERMINATING, 1); 3544 FINAL_STATUS_APP_TERMINATING, 1);
3608 3545
3609 // Open a new tab to navigate in. 3546 // Open a new tab to navigate in.
3610 ui_test_utils::NavigateToURLWithDisposition( 3547 ui_test_utils::NavigateToURLWithDisposition(
3611 current_browser(), 3548 current_browser(),
3612 test_server()->GetURL("files/prerender/init_session_storage.html"), 3549 test_server()->GetURL("files/prerender/init_session_storage.html"),
3613 NEW_FOREGROUND_TAB, 3550 NEW_FOREGROUND_TAB,
3614 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 3551 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
3615 3552
3616 // Now navigate in the new tab. 3553 // Now navigate in the new tab.
3617 NavigateToDestURLWithDisposition(CURRENT_TAB, false); 3554 NavigateToDestURLWithDisposition(CURRENT_TAB, false);
3618 3555
3619 // Verify DidDisplayPass in the new tab. 3556 // Verify DidDisplayPass in the new tab.
3620 EXPECT_TRUE(DidDisplayPass( 3557 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents()));
3621 current_browser()->tab_strip_model()->GetActiveWebContents()));
3622 } 3558 }
3623 3559
3624 // Checks that prerenders honor |should_replace_current_entry|. 3560 // Checks that prerenders honor |should_replace_current_entry|.
3625 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReplaceCurrentEntry) { 3561 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReplaceCurrentEntry) {
3626 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); 3562 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
3627 3563
3628 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, 3564 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB,
3629 content::PAGE_TRANSITION_TYPED, false); 3565 content::PAGE_TRANSITION_TYPED, false);
3630 params.should_replace_current_entry = true; 3566 params.should_replace_current_entry = true;
3631 NavigateToURLWithParams(params, false); 3567 NavigateToURLWithParams(params, false);
3632 3568
3633 WebContents* web_contents = 3569 const NavigationController& controller =
3634 current_browser()->tab_strip_model()->GetActiveWebContents(); 3570 GetActiveWebContents()->GetController();
3635 const NavigationController& controller = web_contents->GetController();
3636 // First entry is about:blank, second is prerender_page.html. 3571 // First entry is about:blank, second is prerender_page.html.
3637 EXPECT_TRUE(controller.GetPendingEntry() == NULL); 3572 EXPECT_TRUE(controller.GetPendingEntry() == NULL);
3638 EXPECT_EQ(2, controller.GetEntryCount()); 3573 EXPECT_EQ(2, controller.GetEntryCount());
3639 EXPECT_EQ(GURL(content::kAboutBlankURL), 3574 EXPECT_EQ(GURL(content::kAboutBlankURL),
3640 controller.GetEntryAtIndex(0)->GetURL()); 3575 controller.GetEntryAtIndex(0)->GetURL());
3641 EXPECT_EQ(dest_url(), controller.GetEntryAtIndex(1)->GetURL()); 3576 EXPECT_EQ(dest_url(), controller.GetEntryAtIndex(1)->GetURL());
3642 } 3577 }
3643 3578
3644 } // namespace prerender 3579 } // namespace prerender
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/webui/net_internals/net_internals_ui_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698