| OLD | NEW |
| 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" |
| 11 #include "base/macros.h" | 11 #include "base/macros.h" |
| 12 #include "base/memory/ref_counted_memory.h" | 12 #include "base/memory/ref_counted_memory.h" |
| 13 #include "base/memory/scoped_vector.h" | 13 #include "base/memory/scoped_vector.h" |
| 14 #include "base/memory/weak_ptr.h" | 14 #include "base/memory/weak_ptr.h" |
| 15 #include "base/path_service.h" | 15 #include "base/path_service.h" |
| 16 #include "base/prefs/pref_service.h" | 16 #include "base/prefs/pref_service.h" |
| 17 #include "base/run_loop.h" | 17 #include "base/run_loop.h" |
| 18 #include "base/scoped_observer.h" | 18 #include "base/scoped_observer.h" |
| 19 #include "base/stl_util.h" | 19 #include "base/stl_util.h" |
| 20 #include "base/strings/string_split.h" |
| 20 #include "base/strings/string_util.h" | 21 #include "base/strings/string_util.h" |
| 21 #include "base/strings/stringprintf.h" | 22 #include "base/strings/stringprintf.h" |
| 22 #include "base/strings/utf_string_conversions.h" | 23 #include "base/strings/utf_string_conversions.h" |
| 23 #include "base/test/histogram_tester.h" | 24 #include "base/test/histogram_tester.h" |
| 24 #include "base/test/test_timeouts.h" | 25 #include "base/test/test_timeouts.h" |
| 25 #include "base/values.h" | 26 #include "base/values.h" |
| 26 #include "chrome/browser/browsing_data/browsing_data_helper.h" | 27 #include "chrome/browser/browsing_data/browsing_data_helper.h" |
| 27 #include "chrome/browser/browsing_data/browsing_data_remover.h" | 28 #include "chrome/browser/browsing_data/browsing_data_remover.h" |
| 28 #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h" | 29 #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h" |
| 29 #include "chrome/browser/chrome_content_browser_client.h" | 30 #include "chrome/browser/chrome_content_browser_client.h" |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 #include "extensions/common/constants.h" | 97 #include "extensions/common/constants.h" |
| 97 #include "extensions/common/extension_urls.h" | 98 #include "extensions/common/extension_urls.h" |
| 98 #include "extensions/common/manifest_handlers/mime_types_handler.h" | 99 #include "extensions/common/manifest_handlers/mime_types_handler.h" |
| 99 #include "extensions/common/switches.h" | 100 #include "extensions/common/switches.h" |
| 100 #include "extensions/test/result_catcher.h" | 101 #include "extensions/test/result_catcher.h" |
| 101 #include "net/base/escape.h" | 102 #include "net/base/escape.h" |
| 102 #include "net/cert/x509_certificate.h" | 103 #include "net/cert/x509_certificate.h" |
| 103 #include "net/dns/mock_host_resolver.h" | 104 #include "net/dns/mock_host_resolver.h" |
| 104 #include "net/ssl/client_cert_store.h" | 105 #include "net/ssl/client_cert_store.h" |
| 105 #include "net/ssl/ssl_cert_request_info.h" | 106 #include "net/ssl/ssl_cert_request_info.h" |
| 107 #include "net/ssl/ssl_server_config.h" |
| 108 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 109 #include "net/test/embedded_test_server/request_handler_util.h" |
| 106 #include "net/test/url_request/url_request_mock_http_job.h" | 110 #include "net/test/url_request/url_request_mock_http_job.h" |
| 107 #include "net/url_request/url_request_context.h" | 111 #include "net/url_request/url_request_context.h" |
| 108 #include "net/url_request/url_request_context_getter.h" | 112 #include "net/url_request/url_request_context_getter.h" |
| 109 #include "net/url_request/url_request_filter.h" | 113 #include "net/url_request/url_request_filter.h" |
| 110 #include "net/url_request/url_request_interceptor.h" | 114 #include "net/url_request/url_request_interceptor.h" |
| 111 #include "net/url_request/url_request_job.h" | 115 #include "net/url_request/url_request_job.h" |
| 112 #include "ppapi/shared_impl/ppapi_switches.h" | 116 #include "ppapi/shared_impl/ppapi_switches.h" |
| 113 #include "ui/base/l10n/l10n_util.h" | 117 #include "ui/base/l10n/l10n_util.h" |
| 114 #include "url/gurl.h" | 118 #include "url/gurl.h" |
| 115 | 119 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 ConnectionType GetCurrentConnectionType() const override { | 195 ConnectionType GetCurrentConnectionType() const override { |
| 192 return NetworkChangeNotifier::CONNECTION_4G; | 196 return NetworkChangeNotifier::CONNECTION_4G; |
| 193 } | 197 } |
| 194 }; | 198 }; |
| 195 | 199 |
| 196 // Constants used in the test HTML files. | 200 // Constants used in the test HTML files. |
| 197 const char* kReadyTitle = "READY"; | 201 const char* kReadyTitle = "READY"; |
| 198 const char* kPassTitle = "PASS"; | 202 const char* kPassTitle = "PASS"; |
| 199 | 203 |
| 200 std::string CreateClientRedirect(const std::string& dest_url) { | 204 std::string CreateClientRedirect(const std::string& dest_url) { |
| 201 const char* const kClientRedirectBase = "client-redirect?"; | 205 const char* const kClientRedirectBase = "/client-redirect?"; |
| 202 return kClientRedirectBase + net::EscapeQueryParamValue(dest_url, false); | 206 return kClientRedirectBase + net::EscapeQueryParamValue(dest_url, false); |
| 203 } | 207 } |
| 204 | 208 |
| 205 std::string CreateServerRedirect(const std::string& dest_url) { | 209 std::string CreateServerRedirect(const std::string& dest_url) { |
| 206 const char* const kServerRedirectBase = "server-redirect?"; | 210 const char* const kServerRedirectBase = "/server-redirect?"; |
| 207 return kServerRedirectBase + net::EscapeQueryParamValue(dest_url, false); | 211 return kServerRedirectBase + net::EscapeQueryParamValue(dest_url, false); |
| 208 } | 212 } |
| 209 | 213 |
| 210 // Clears the specified data using BrowsingDataRemover. | 214 // Clears the specified data using BrowsingDataRemover. |
| 211 void ClearBrowsingData(Browser* browser, int remove_mask) { | 215 void ClearBrowsingData(Browser* browser, int remove_mask) { |
| 212 BrowsingDataRemover* remover = | 216 BrowsingDataRemover* remover = |
| 213 BrowsingDataRemover::CreateForUnboundedRange(browser->profile()); | 217 BrowsingDataRemover::CreateForUnboundedRange(browser->profile()); |
| 214 BrowsingDataRemoverCompletionObserver observer(remover); | 218 BrowsingDataRemoverCompletionObserver observer(remover); |
| 215 remover->Remove(remove_mask, BrowsingDataHelper::UNPROTECTED_WEB); | 219 remover->Remove(remove_mask, BrowsingDataHelper::UNPROTECTED_WEB); |
| 216 observer.BlockUntilCompletion(); | 220 observer.BlockUntilCompletion(); |
| (...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1087 class PrerenderBrowserTest : virtual public InProcessBrowserTest { | 1091 class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
| 1088 public: | 1092 public: |
| 1089 PrerenderBrowserTest() | 1093 PrerenderBrowserTest() |
| 1090 : autostart_test_server_(true), | 1094 : autostart_test_server_(true), |
| 1091 prerender_contents_factory_(NULL), | 1095 prerender_contents_factory_(NULL), |
| 1092 #if defined(FULL_SAFE_BROWSING) | 1096 #if defined(FULL_SAFE_BROWSING) |
| 1093 safe_browsing_factory_(new TestSafeBrowsingServiceFactory()), | 1097 safe_browsing_factory_(new TestSafeBrowsingServiceFactory()), |
| 1094 #endif | 1098 #endif |
| 1095 call_javascript_(true), | 1099 call_javascript_(true), |
| 1096 check_load_events_(true), | 1100 check_load_events_(true), |
| 1097 loader_path_("files/prerender/prerender_loader.html"), | 1101 loader_path_("/prerender/prerender_loader.html"), |
| 1098 explicitly_set_browser_(NULL) {} | 1102 explicitly_set_browser_(NULL) { |
| 1103 } |
| 1099 | 1104 |
| 1100 ~PrerenderBrowserTest() override {} | 1105 ~PrerenderBrowserTest() override {} |
| 1101 | 1106 |
| 1102 content::SessionStorageNamespace* GetSessionStorageNamespace() const { | 1107 content::SessionStorageNamespace* GetSessionStorageNamespace() const { |
| 1103 WebContents* web_contents = GetActiveWebContents(); | 1108 WebContents* web_contents = GetActiveWebContents(); |
| 1104 if (!web_contents) | 1109 if (!web_contents) |
| 1105 return NULL; | 1110 return NULL; |
| 1106 return web_contents->GetController().GetDefaultSessionStorageNamespace(); | 1111 return web_contents->GetController().GetDefaultSessionStorageNamespace(); |
| 1107 } | 1112 } |
| 1108 | 1113 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1126 switches::kOverridePluginPowerSaverForTesting, "ignore-list"); | 1131 switches::kOverridePluginPowerSaverForTesting, "ignore-list"); |
| 1127 | 1132 |
| 1128 ASSERT_TRUE(ppapi::RegisterPowerSaverTestPlugin(command_line)); | 1133 ASSERT_TRUE(ppapi::RegisterPowerSaverTestPlugin(command_line)); |
| 1129 } | 1134 } |
| 1130 | 1135 |
| 1131 void SetUpOnMainThread() override { | 1136 void SetUpOnMainThread() override { |
| 1132 current_browser()->profile()->GetPrefs()->SetBoolean( | 1137 current_browser()->profile()->GetPrefs()->SetBoolean( |
| 1133 prefs::kPromptForDownload, false); | 1138 prefs::kPromptForDownload, false); |
| 1134 IncreasePrerenderMemory(); | 1139 IncreasePrerenderMemory(); |
| 1135 if (autostart_test_server_) | 1140 if (autostart_test_server_) |
| 1136 ASSERT_TRUE(test_server()->Start()); | 1141 ASSERT_TRUE(embedded_test_server()->Start()); |
| 1137 ChromeResourceDispatcherHostDelegate:: | 1142 ChromeResourceDispatcherHostDelegate:: |
| 1138 SetExternalProtocolHandlerDelegateForTesting( | 1143 SetExternalProtocolHandlerDelegateForTesting( |
| 1139 &external_protocol_handler_delegate_); | 1144 &external_protocol_handler_delegate_); |
| 1140 | 1145 |
| 1141 PrerenderManager* prerender_manager = GetPrerenderManager(); | 1146 PrerenderManager* prerender_manager = GetPrerenderManager(); |
| 1142 ASSERT_TRUE(prerender_manager); | 1147 ASSERT_TRUE(prerender_manager); |
| 1143 prerender_manager->mutable_config().rate_limit_enabled = false; | 1148 prerender_manager->mutable_config().rate_limit_enabled = false; |
| 1144 ASSERT_TRUE(prerender_contents_factory_ == NULL); | 1149 ASSERT_TRUE(prerender_contents_factory_ == NULL); |
| 1145 prerender_contents_factory_ = new TestPrerenderContentsFactory; | 1150 prerender_contents_factory_ = new TestPrerenderContentsFactory; |
| 1146 prerender_manager->SetPrerenderContentsFactory(prerender_contents_factory_); | 1151 prerender_manager->SetPrerenderContentsFactory(prerender_contents_factory_); |
| 1147 } | 1152 } |
| 1148 | 1153 |
| 1149 // Convenience function to get the currently active WebContents in | 1154 // Convenience function to get the currently active WebContents in |
| 1150 // current_browser(). | 1155 // current_browser(). |
| 1151 WebContents* GetActiveWebContents() const { | 1156 WebContents* GetActiveWebContents() const { |
| 1152 return current_browser()->tab_strip_model()->GetActiveWebContents(); | 1157 return current_browser()->tab_strip_model()->GetActiveWebContents(); |
| 1153 } | 1158 } |
| 1154 | 1159 |
| 1155 // Overload for a single expected final status | 1160 // Overload for a single expected final status |
| 1156 scoped_ptr<TestPrerender> PrerenderTestURL( | 1161 scoped_ptr<TestPrerender> PrerenderTestURL( |
| 1157 const std::string& html_file, | 1162 const std::string& html_file, |
| 1158 FinalStatus expected_final_status, | 1163 FinalStatus expected_final_status, |
| 1159 int expected_number_of_loads) { | 1164 int expected_number_of_loads) { |
| 1160 GURL url = test_server()->GetURL(html_file); | 1165 GURL url = embedded_test_server()->GetURL(html_file); |
| 1161 return PrerenderTestURL(url, | 1166 return PrerenderTestURL(url, |
| 1162 expected_final_status, | 1167 expected_final_status, |
| 1163 expected_number_of_loads); | 1168 expected_number_of_loads); |
| 1164 } | 1169 } |
| 1165 | 1170 |
| 1166 ScopedVector<TestPrerender> PrerenderTestURL( | 1171 ScopedVector<TestPrerender> PrerenderTestURL( |
| 1167 const std::string& html_file, | 1172 const std::string& html_file, |
| 1168 const std::vector<FinalStatus>& expected_final_status_queue, | 1173 const std::vector<FinalStatus>& expected_final_status_queue, |
| 1169 int expected_number_of_loads) { | 1174 int expected_number_of_loads) { |
| 1170 GURL url = test_server()->GetURL(html_file); | 1175 GURL url = embedded_test_server()->GetURL(html_file); |
| 1171 return PrerenderTestURLImpl(url, | 1176 return PrerenderTestURLImpl(url, |
| 1172 expected_final_status_queue, | 1177 expected_final_status_queue, |
| 1173 expected_number_of_loads); | 1178 expected_number_of_loads); |
| 1174 } | 1179 } |
| 1175 | 1180 |
| 1176 scoped_ptr<TestPrerender> PrerenderTestURL( | 1181 scoped_ptr<TestPrerender> PrerenderTestURL( |
| 1177 const GURL& url, | 1182 const GURL& url, |
| 1178 FinalStatus expected_final_status, | 1183 FinalStatus expected_final_status, |
| 1179 int expected_number_of_loads) { | 1184 int expected_number_of_loads) { |
| 1180 std::vector<FinalStatus> expected_final_status_queue( | 1185 std::vector<FinalStatus> expected_final_status_queue( |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1201 expect_swap_to_succeed); | 1206 expect_swap_to_succeed); |
| 1202 } | 1207 } |
| 1203 | 1208 |
| 1204 void NavigateToURL(const std::string& dest_html_file) const { | 1209 void NavigateToURL(const std::string& dest_html_file) const { |
| 1205 NavigateToURLWithDisposition(dest_html_file, CURRENT_TAB, true); | 1210 NavigateToURLWithDisposition(dest_html_file, CURRENT_TAB, true); |
| 1206 } | 1211 } |
| 1207 | 1212 |
| 1208 void NavigateToURLWithDisposition(const std::string& dest_html_file, | 1213 void NavigateToURLWithDisposition(const std::string& dest_html_file, |
| 1209 WindowOpenDisposition disposition, | 1214 WindowOpenDisposition disposition, |
| 1210 bool expect_swap_to_succeed) const { | 1215 bool expect_swap_to_succeed) const { |
| 1211 GURL dest_url = test_server()->GetURL(dest_html_file); | 1216 GURL dest_url = embedded_test_server()->GetURL(dest_html_file); |
| 1212 NavigateToURLWithDisposition(dest_url, disposition, expect_swap_to_succeed); | 1217 NavigateToURLWithDisposition(dest_url, disposition, expect_swap_to_succeed); |
| 1213 } | 1218 } |
| 1214 | 1219 |
| 1215 void NavigateToURLWithDisposition(const GURL& dest_url, | 1220 void NavigateToURLWithDisposition(const GURL& dest_url, |
| 1216 WindowOpenDisposition disposition, | 1221 WindowOpenDisposition disposition, |
| 1217 bool expect_swap_to_succeed) const { | 1222 bool expect_swap_to_succeed) const { |
| 1218 NavigateToURLWithParams( | 1223 NavigateToURLWithParams( |
| 1219 content::OpenURLParams(dest_url, Referrer(), disposition, | 1224 content::OpenURLParams(dest_url, Referrer(), disposition, |
| 1220 ui::PAGE_TRANSITION_TYPED, false), | 1225 ui::PAGE_TRANSITION_TYPED, false), |
| 1221 expect_swap_to_succeed); | 1226 expect_swap_to_succeed); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1271 TestNavigationObserver nav_observer(GetActiveWebContents()); | 1276 TestNavigationObserver nav_observer(GetActiveWebContents()); |
| 1272 RenderFrameHost* render_frame_host = GetActiveWebContents()->GetMainFrame(); | 1277 RenderFrameHost* render_frame_host = GetActiveWebContents()->GetMainFrame(); |
| 1273 render_frame_host->ExecuteJavaScriptForTests( | 1278 render_frame_host->ExecuteJavaScriptForTests( |
| 1274 base::ASCIIToUTF16("ClickOpenLink()")); | 1279 base::ASCIIToUTF16("ClickOpenLink()")); |
| 1275 nav_observer.Wait(); | 1280 nav_observer.Wait(); |
| 1276 } | 1281 } |
| 1277 | 1282 |
| 1278 void NavigateToNextPageAfterPrerender() const { | 1283 void NavigateToNextPageAfterPrerender() const { |
| 1279 ui_test_utils::NavigateToURL( | 1284 ui_test_utils::NavigateToURL( |
| 1280 current_browser(), | 1285 current_browser(), |
| 1281 test_server()->GetURL("files/prerender/prerender_page.html")); | 1286 embedded_test_server()->GetURL("/prerender/prerender_page.html")); |
| 1282 } | 1287 } |
| 1283 | 1288 |
| 1284 // Called after the prerendered page has been navigated to and then away from. | 1289 // Called after the prerendered page has been navigated to and then away from. |
| 1285 // Navigates back through the history to the prerendered page. | 1290 // Navigates back through the history to the prerendered page. |
| 1286 void GoBackToPrerender() { | 1291 void GoBackToPrerender() { |
| 1287 TestNavigationObserver back_nav_observer(GetActiveWebContents()); | 1292 TestNavigationObserver back_nav_observer(GetActiveWebContents()); |
| 1288 chrome::GoBack(current_browser(), CURRENT_TAB); | 1293 chrome::GoBack(current_browser(), CURRENT_TAB); |
| 1289 back_nav_observer.Wait(); | 1294 back_nav_observer.Wait(); |
| 1290 bool original_prerender_page = false; | 1295 bool original_prerender_page = false; |
| 1291 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( | 1296 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1307 back_nav_observer.Wait(); | 1312 back_nav_observer.Wait(); |
| 1308 bool js_result; | 1313 bool js_result; |
| 1309 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( | 1314 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
| 1310 tab, | 1315 tab, |
| 1311 "window.domAutomationController.send(DidBackToOriginalPagePass())", | 1316 "window.domAutomationController.send(DidBackToOriginalPagePass())", |
| 1312 &js_result)); | 1317 &js_result)); |
| 1313 EXPECT_TRUE(js_result); | 1318 EXPECT_TRUE(js_result); |
| 1314 } | 1319 } |
| 1315 | 1320 |
| 1316 bool UrlIsInPrerenderManager(const std::string& html_file) const { | 1321 bool UrlIsInPrerenderManager(const std::string& html_file) const { |
| 1317 return UrlIsInPrerenderManager(test_server()->GetURL(html_file)); | 1322 return UrlIsInPrerenderManager(embedded_test_server()->GetURL(html_file)); |
| 1318 } | 1323 } |
| 1319 | 1324 |
| 1320 bool UrlIsInPrerenderManager(const GURL& url) const { | 1325 bool UrlIsInPrerenderManager(const GURL& url) const { |
| 1321 return GetPrerenderManager()->FindPrerenderData( | 1326 return GetPrerenderManager()->FindPrerenderData( |
| 1322 url, GetSessionStorageNamespace()) != NULL; | 1327 url, GetSessionStorageNamespace()) != NULL; |
| 1323 } | 1328 } |
| 1324 | 1329 |
| 1325 void UseHttpsSrcServer() { | 1330 void UseHttpsSrcServer() { |
| 1326 if (https_src_server_) | 1331 if (https_src_server_) |
| 1327 return; | 1332 return; |
| 1328 https_src_server_.reset( | 1333 https_src_server_.reset( |
| 1329 new net::SpawnedTestServer( | 1334 new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS)); |
| 1330 net::SpawnedTestServer::TYPE_HTTPS, | 1335 https_src_server_->ServeFilesFromSourceDirectory("chrome/test/data"); |
| 1331 net::SpawnedTestServer::kLocalhost, | |
| 1332 base::FilePath(FILE_PATH_LITERAL("chrome/test/data")))); | |
| 1333 CHECK(https_src_server_->Start()); | 1336 CHECK(https_src_server_->Start()); |
| 1334 } | 1337 } |
| 1335 | 1338 |
| 1336 void DisableJavascriptCalls() { | 1339 void DisableJavascriptCalls() { |
| 1337 call_javascript_ = false; | 1340 call_javascript_ = false; |
| 1338 } | 1341 } |
| 1339 | 1342 |
| 1340 void DisableLoadEventCheck() { | 1343 void DisableLoadEventCheck() { |
| 1341 check_load_events_ = false; | 1344 check_load_events_ = false; |
| 1342 } | 1345 } |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1466 } | 1469 } |
| 1467 | 1470 |
| 1468 void set_loader_query(const std::string& query) { | 1471 void set_loader_query(const std::string& query) { |
| 1469 loader_query_ = query; | 1472 loader_query_ = query; |
| 1470 } | 1473 } |
| 1471 | 1474 |
| 1472 GURL GetCrossDomainTestUrl(const std::string& path) { | 1475 GURL GetCrossDomainTestUrl(const std::string& path) { |
| 1473 static const std::string secondary_domain = "www.foo.com"; | 1476 static const std::string secondary_domain = "www.foo.com"; |
| 1474 host_resolver()->AddRule(secondary_domain, "127.0.0.1"); | 1477 host_resolver()->AddRule(secondary_domain, "127.0.0.1"); |
| 1475 std::string url_str(base::StringPrintf( | 1478 std::string url_str(base::StringPrintf( |
| 1476 "http://%s:%d/%s", | 1479 "http://%s:%d/%s", secondary_domain.c_str(), |
| 1477 secondary_domain.c_str(), | 1480 embedded_test_server()->host_port_pair().port(), path.c_str())); |
| 1478 test_server()->host_port_pair().port(), | |
| 1479 path.c_str())); | |
| 1480 return GURL(url_str); | 1481 return GURL(url_str); |
| 1481 } | 1482 } |
| 1482 | 1483 |
| 1483 void set_browser(Browser* browser) { | 1484 void set_browser(Browser* browser) { |
| 1484 explicitly_set_browser_ = browser; | 1485 explicitly_set_browser_ = browser; |
| 1485 } | 1486 } |
| 1486 | 1487 |
| 1487 Browser* current_browser() const { | 1488 Browser* current_browser() const { |
| 1488 return explicitly_set_browser_ ? explicitly_set_browser_ : browser(); | 1489 return explicitly_set_browser_ ? explicitly_set_browser_ : browser(); |
| 1489 } | 1490 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1556 TestPrerenderContents* GetPrerenderContents() const { | 1557 TestPrerenderContents* GetPrerenderContents() const { |
| 1557 return GetPrerenderContentsFor(dest_url_); | 1558 return GetPrerenderContentsFor(dest_url_); |
| 1558 } | 1559 } |
| 1559 | 1560 |
| 1560 ScopedVector<TestPrerender> PrerenderTestURLImpl( | 1561 ScopedVector<TestPrerender> PrerenderTestURLImpl( |
| 1561 const GURL& prerender_url, | 1562 const GURL& prerender_url, |
| 1562 const std::vector<FinalStatus>& expected_final_status_queue, | 1563 const std::vector<FinalStatus>& expected_final_status_queue, |
| 1563 int expected_number_of_loads) { | 1564 int expected_number_of_loads) { |
| 1564 dest_url_ = prerender_url; | 1565 dest_url_ = prerender_url; |
| 1565 | 1566 |
| 1566 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 1567 base::StringPairs replacement_text; |
| 1567 replacement_text.push_back( | 1568 replacement_text.push_back( |
| 1568 make_pair("REPLACE_WITH_PRERENDER_URL", prerender_url.spec())); | 1569 make_pair("REPLACE_WITH_PRERENDER_URL", prerender_url.spec())); |
| 1569 std::string replacement_path; | 1570 std::string replacement_path; |
| 1570 CHECK(net::SpawnedTestServer::GetFilePathWithReplacements( | 1571 net::test_server::GetFilePathWithReplacements( |
| 1571 loader_path_, | 1572 loader_path_, replacement_text, &replacement_path); |
| 1572 replacement_text, | |
| 1573 &replacement_path)); | |
| 1574 | 1573 |
| 1575 const net::SpawnedTestServer* src_server = test_server(); | 1574 const net::EmbeddedTestServer* src_server = embedded_test_server(); |
| 1576 if (https_src_server_) | 1575 if (https_src_server_) |
| 1577 src_server = https_src_server_.get(); | 1576 src_server = https_src_server_.get(); |
| 1578 GURL loader_url = src_server->GetURL( | 1577 GURL loader_url = src_server->GetURL( |
| 1579 replacement_path + "&" + loader_query_); | 1578 replacement_path + "&" + loader_query_); |
| 1580 | 1579 |
| 1581 GURL::Replacements loader_replacements; | 1580 GURL::Replacements loader_replacements; |
| 1582 if (!loader_host_override_.empty()) | 1581 if (!loader_host_override_.empty()) |
| 1583 loader_replacements.SetHostStr(loader_host_override_); | 1582 loader_replacements.SetHostStr(loader_host_override_); |
| 1584 loader_url = loader_url.ReplaceComponents(loader_replacements); | 1583 loader_url = loader_url.ReplaceComponents(loader_replacements); |
| 1585 | 1584 |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1685 observer.Wait(); | 1684 observer.Wait(); |
| 1686 } | 1685 } |
| 1687 } | 1686 } |
| 1688 | 1687 |
| 1689 TestPrerenderContentsFactory* prerender_contents_factory_; | 1688 TestPrerenderContentsFactory* prerender_contents_factory_; |
| 1690 #if defined(FULL_SAFE_BROWSING) | 1689 #if defined(FULL_SAFE_BROWSING) |
| 1691 scoped_ptr<TestSafeBrowsingServiceFactory> safe_browsing_factory_; | 1690 scoped_ptr<TestSafeBrowsingServiceFactory> safe_browsing_factory_; |
| 1692 #endif | 1691 #endif |
| 1693 NeverRunsExternalProtocolHandlerDelegate external_protocol_handler_delegate_; | 1692 NeverRunsExternalProtocolHandlerDelegate external_protocol_handler_delegate_; |
| 1694 GURL dest_url_; | 1693 GURL dest_url_; |
| 1695 scoped_ptr<net::SpawnedTestServer> https_src_server_; | 1694 scoped_ptr<net::EmbeddedTestServer> https_src_server_; |
| 1696 bool call_javascript_; | 1695 bool call_javascript_; |
| 1697 bool check_load_events_; | 1696 bool check_load_events_; |
| 1698 std::string loader_host_override_; | 1697 std::string loader_host_override_; |
| 1699 std::string loader_path_; | 1698 std::string loader_path_; |
| 1700 std::string loader_query_; | 1699 std::string loader_query_; |
| 1701 Browser* explicitly_set_browser_; | 1700 Browser* explicitly_set_browser_; |
| 1702 base::HistogramTester histogram_tester_; | 1701 base::HistogramTester histogram_tester_; |
| 1703 }; | 1702 }; |
| 1704 | 1703 |
| 1705 // Checks that a page is correctly prerendered in the case of a | 1704 // Checks that a page is correctly prerendered in the case of a |
| 1706 // <link rel=prerender> tag and then loaded into a tab in response to a | 1705 // <link rel=prerender> tag and then loaded into a tab in response to a |
| 1707 // navigation. | 1706 // navigation. |
| 1708 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { | 1707 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { |
| 1709 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 1708 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 1710 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); | 1709 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); |
| 1711 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 1710 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 1712 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 1711 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 1713 histogram_tester().ExpectTotalCount( | 1712 histogram_tester().ExpectTotalCount( |
| 1714 "Prerender.none_PerceivedPLTMatchedComplete", 0); | 1713 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 1715 histogram_tester().ExpectTotalCount( | 1714 histogram_tester().ExpectTotalCount( |
| 1716 "Prerender.websame_PrerenderNotSwappedInPLT", 1); | 1715 "Prerender.websame_PrerenderNotSwappedInPLT", 1); |
| 1717 | 1716 |
| 1718 ChannelDestructionWatcher channel_close_watcher; | 1717 ChannelDestructionWatcher channel_close_watcher; |
| 1719 channel_close_watcher.WatchChannel( | 1718 channel_close_watcher.WatchChannel( |
| 1720 GetActiveWebContents()->GetRenderProcessHost()); | 1719 GetActiveWebContents()->GetRenderProcessHost()); |
| 1721 NavigateToDestURL(); | 1720 NavigateToDestURL(); |
| 1722 channel_close_watcher.WaitForChannelClose(); | 1721 channel_close_watcher.WaitForChannelClose(); |
| 1723 | 1722 |
| 1724 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 1723 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); |
| 1725 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", | 1724 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", |
| 1726 1); | 1725 1); |
| 1727 histogram_tester().ExpectTotalCount( | 1726 histogram_tester().ExpectTotalCount( |
| 1728 "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 1727 "Prerender.websame_PerceivedPLTMatchedComplete", 1); |
| 1729 | 1728 |
| 1730 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 1729 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1731 } | 1730 } |
| 1732 | 1731 |
| 1733 // Checks that cross-domain prerenders emit the correct histograms. | 1732 // Checks that cross-domain prerenders emit the correct histograms. |
| 1734 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageCrossDomain) { | 1733 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageCrossDomain) { |
| 1735 PrerenderTestURL(GetCrossDomainTestUrl("files/prerender/prerender_page.html"), | 1734 PrerenderTestURL(GetCrossDomainTestUrl("prerender/prerender_page.html"), |
| 1736 FINAL_STATUS_USED, 1); | 1735 FINAL_STATUS_USED, 1); |
| 1737 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 1736 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 1738 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 1737 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 1739 histogram_tester().ExpectTotalCount( | 1738 histogram_tester().ExpectTotalCount( |
| 1740 "Prerender.none_PerceivedPLTMatchedComplete", 0); | 1739 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 1741 histogram_tester().ExpectTotalCount( | 1740 histogram_tester().ExpectTotalCount( |
| 1742 "Prerender.webcross_PrerenderNotSwappedInPLT", 1); | 1741 "Prerender.webcross_PrerenderNotSwappedInPLT", 1); |
| 1743 | 1742 |
| 1744 NavigateToDestURL(); | 1743 NavigateToDestURL(); |
| 1745 histogram_tester().ExpectTotalCount("Prerender.webcross_PerceivedPLT", 1); | 1744 histogram_tester().ExpectTotalCount("Prerender.webcross_PerceivedPLT", 1); |
| 1746 histogram_tester().ExpectTotalCount("Prerender.webcross_PerceivedPLTMatched", | 1745 histogram_tester().ExpectTotalCount("Prerender.webcross_PerceivedPLTMatched", |
| 1747 1); | 1746 1); |
| 1748 histogram_tester().ExpectTotalCount( | 1747 histogram_tester().ExpectTotalCount( |
| 1749 "Prerender.webcross_PerceivedPLTMatchedComplete", 1); | 1748 "Prerender.webcross_PerceivedPLTMatchedComplete", 1); |
| 1750 } | 1749 } |
| 1751 | 1750 |
| 1752 // Checks that pending prerenders launch and receive proper event treatment. | 1751 // Checks that pending prerenders launch and receive proper event treatment. |
| 1753 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPagePending) { | 1752 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPagePending) { |
| 1754 scoped_ptr<TestPrerender> prerender = | 1753 scoped_ptr<TestPrerender> prerender = PrerenderTestURL( |
| 1755 PrerenderTestURL("files/prerender/prerender_page_pending.html", | 1754 "/prerender/prerender_page_pending.html", FINAL_STATUS_USED, 1); |
| 1756 FINAL_STATUS_USED, 1); | |
| 1757 | 1755 |
| 1758 // Navigate to the prerender. | 1756 // Navigate to the prerender. |
| 1759 scoped_ptr<TestPrerender> prerender2 = ExpectPrerender(FINAL_STATUS_USED); | 1757 scoped_ptr<TestPrerender> prerender2 = ExpectPrerender(FINAL_STATUS_USED); |
| 1760 NavigateToDestURL(); | 1758 NavigateToDestURL(); |
| 1761 // Abort early if the original prerender didn't swap, so as not to hang. | 1759 // Abort early if the original prerender didn't swap, so as not to hang. |
| 1762 ASSERT_FALSE(prerender->contents()); | 1760 ASSERT_FALSE(prerender->contents()); |
| 1763 | 1761 |
| 1764 // Wait for the new prerender to be ready. | 1762 // Wait for the new prerender to be ready. |
| 1765 prerender2->WaitForStart(); | 1763 prerender2->WaitForStart(); |
| 1766 prerender2->WaitForLoads(1); | 1764 prerender2->WaitForLoads(1); |
| 1767 | 1765 |
| 1768 const GURL prerender_page_url = | 1766 const GURL prerender_page_url = |
| 1769 test_server()->GetURL("files/prerender/prerender_page.html"); | 1767 embedded_test_server()->GetURL("/prerender/prerender_page.html"); |
| 1770 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | 1768 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
| 1771 EXPECT_NE(static_cast<TestPrerenderContents*>(NULL), | 1769 EXPECT_NE(static_cast<TestPrerenderContents*>(NULL), |
| 1772 GetPrerenderContentsFor(prerender_page_url)); | 1770 GetPrerenderContentsFor(prerender_page_url)); |
| 1773 | 1771 |
| 1774 // Now navigate to our target page. | 1772 // Now navigate to our target page. |
| 1775 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), | 1773 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), |
| 1776 GetActiveWebContents()); | 1774 GetActiveWebContents()); |
| 1777 ui_test_utils::NavigateToURLWithDisposition( | 1775 ui_test_utils::NavigateToURLWithDisposition( |
| 1778 current_browser(), prerender_page_url, CURRENT_TAB, | 1776 current_browser(), prerender_page_url, CURRENT_TAB, |
| 1779 ui_test_utils::BROWSER_TEST_NONE); | 1777 ui_test_utils::BROWSER_TEST_NONE); |
| 1780 swap_observer.Wait(); | 1778 swap_observer.Wait(); |
| 1781 | 1779 |
| 1782 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1780 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1783 } | 1781 } |
| 1784 | 1782 |
| 1785 // Checks that pending prerenders which are canceled before they are launched | 1783 // Checks that pending prerenders which are canceled before they are launched |
| 1786 // never get started. | 1784 // never get started. |
| 1787 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovesPending) { | 1785 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovesPending) { |
| 1788 PrerenderTestURL("files/prerender/prerender_page_removes_pending.html", | 1786 PrerenderTestURL("/prerender/prerender_page_removes_pending.html", |
| 1789 FINAL_STATUS_USED, 1); | 1787 FINAL_STATUS_USED, 1); |
| 1790 | 1788 |
| 1791 ChannelDestructionWatcher channel_close_watcher; | 1789 ChannelDestructionWatcher channel_close_watcher; |
| 1792 channel_close_watcher.WatchChannel( | 1790 channel_close_watcher.WatchChannel( |
| 1793 GetActiveWebContents()->GetRenderProcessHost()); | 1791 GetActiveWebContents()->GetRenderProcessHost()); |
| 1794 NavigateToDestURL(); | 1792 NavigateToDestURL(); |
| 1795 channel_close_watcher.WaitForChannelClose(); | 1793 channel_close_watcher.WaitForChannelClose(); |
| 1796 | 1794 |
| 1797 EXPECT_FALSE(DidReceivePrerenderStartEventForLinkNumber(1)); | 1795 EXPECT_FALSE(DidReceivePrerenderStartEventForLinkNumber(1)); |
| 1798 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); | 1796 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); |
| 1799 EXPECT_FALSE(HadPrerenderEventErrors()); | 1797 EXPECT_FALSE(HadPrerenderEventErrors()); |
| 1800 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* | 1798 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* |
| 1801 // calls did a thread/process hop to the renderer which insured pending | 1799 // calls did a thread/process hop to the renderer which insured pending |
| 1802 // renderer events have arrived. | 1800 // renderer events have arrived. |
| 1803 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 1801 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1804 } | 1802 } |
| 1805 | 1803 |
| 1806 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovingLink) { | 1804 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovingLink) { |
| 1807 scoped_ptr<TestPrerender> prerender = | 1805 scoped_ptr<TestPrerender> prerender = PrerenderTestURL( |
| 1808 PrerenderTestURL("files/prerender/prerender_page.html", | 1806 "/prerender/prerender_page.html", FINAL_STATUS_CANCELLED, 1); |
| 1809 FINAL_STATUS_CANCELLED, 1); | |
| 1810 | 1807 |
| 1811 // No ChannelDestructionWatcher is needed here, since prerenders in the | 1808 // No ChannelDestructionWatcher is needed here, since prerenders in the |
| 1812 // PrerenderLinkManager should be deleted by removing the links, rather than | 1809 // PrerenderLinkManager should be deleted by removing the links, rather than |
| 1813 // shutting down the renderer process. | 1810 // shutting down the renderer process. |
| 1814 RemoveLinkElement(0); | 1811 RemoveLinkElement(0); |
| 1815 prerender->WaitForStop(); | 1812 prerender->WaitForStop(); |
| 1816 | 1813 |
| 1817 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); | 1814 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
| 1818 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); | 1815 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| 1819 EXPECT_FALSE(HadPrerenderEventErrors()); | 1816 EXPECT_FALSE(HadPrerenderEventErrors()); |
| 1820 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* | 1817 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* |
| 1821 // calls did a thread/process hop to the renderer which insured pending | 1818 // calls did a thread/process hop to the renderer which insured pending |
| 1822 // renderer events have arrived. | 1819 // renderer events have arrived. |
| 1823 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1820 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1824 } | 1821 } |
| 1825 | 1822 |
| 1826 IN_PROC_BROWSER_TEST_F( | 1823 IN_PROC_BROWSER_TEST_F( |
| 1827 PrerenderBrowserTest, PrerenderPageRemovingLinkWithTwoLinks) { | 1824 PrerenderBrowserTest, PrerenderPageRemovingLinkWithTwoLinks) { |
| 1828 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; | 1825 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; |
| 1829 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; | 1826 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; |
| 1830 | 1827 |
| 1831 set_loader_query("links_to_insert=2"); | 1828 set_loader_query("links_to_insert=2"); |
| 1832 scoped_ptr<TestPrerender> prerender = | 1829 scoped_ptr<TestPrerender> prerender = PrerenderTestURL( |
| 1833 PrerenderTestURL("files/prerender/prerender_page.html", | 1830 "/prerender/prerender_page.html", FINAL_STATUS_CANCELLED, 1); |
| 1834 FINAL_STATUS_CANCELLED, 1); | |
| 1835 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); | 1831 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
| 1836 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); | 1832 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| 1837 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); | 1833 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); |
| 1838 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); | 1834 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); |
| 1839 | 1835 |
| 1840 RemoveLinkElement(0); | 1836 RemoveLinkElement(0); |
| 1841 RemoveLinkElement(1); | 1837 RemoveLinkElement(1); |
| 1842 prerender->WaitForStop(); | 1838 prerender->WaitForStop(); |
| 1843 | 1839 |
| 1844 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); | 1840 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
| 1845 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); | 1841 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| 1846 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); | 1842 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); |
| 1847 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); | 1843 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); |
| 1848 EXPECT_FALSE(HadPrerenderEventErrors()); | 1844 EXPECT_FALSE(HadPrerenderEventErrors()); |
| 1849 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* | 1845 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* |
| 1850 // calls did a thread/process hop to the renderer which insured pending | 1846 // calls did a thread/process hop to the renderer which insured pending |
| 1851 // renderer events have arrived. | 1847 // renderer events have arrived. |
| 1852 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1848 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1853 } | 1849 } |
| 1854 | 1850 |
| 1855 IN_PROC_BROWSER_TEST_F( | 1851 IN_PROC_BROWSER_TEST_F( |
| 1856 PrerenderBrowserTest, PrerenderPageRemovingLinkWithTwoLinksOneLate) { | 1852 PrerenderBrowserTest, PrerenderPageRemovingLinkWithTwoLinksOneLate) { |
| 1857 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; | 1853 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; |
| 1858 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; | 1854 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; |
| 1859 | 1855 |
| 1860 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); | 1856 GURL url = embedded_test_server()->GetURL("/prerender/prerender_page.html"); |
| 1861 scoped_ptr<TestPrerender> prerender = | 1857 scoped_ptr<TestPrerender> prerender = |
| 1862 PrerenderTestURL(url, FINAL_STATUS_CANCELLED, 1); | 1858 PrerenderTestURL(url, FINAL_STATUS_CANCELLED, 1); |
| 1863 | 1859 |
| 1864 // Add a second prerender for the same link. It reuses the prerender, so only | 1860 // Add a second prerender for the same link. It reuses the prerender, so only |
| 1865 // the start event fires here. | 1861 // the start event fires here. |
| 1866 AddPrerender(url, 1); | 1862 AddPrerender(url, 1); |
| 1867 WaitForPrerenderEventCount(1, "webkitprerenderstart", 1); | 1863 WaitForPrerenderEventCount(1, "webkitprerenderstart", 1); |
| 1868 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); | 1864 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); |
| 1869 EXPECT_EQ(0, GetPrerenderLoadEventCountForLinkNumber(1)); | 1865 EXPECT_EQ(0, GetPrerenderLoadEventCountForLinkNumber(1)); |
| 1870 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); | 1866 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1883 // renderer events have arrived. | 1879 // renderer events have arrived. |
| 1884 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1880 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1885 } | 1881 } |
| 1886 | 1882 |
| 1887 IN_PROC_BROWSER_TEST_F( | 1883 IN_PROC_BROWSER_TEST_F( |
| 1888 PrerenderBrowserTest, | 1884 PrerenderBrowserTest, |
| 1889 PrerenderPageRemovingLinkWithTwoLinksRemovingOne) { | 1885 PrerenderPageRemovingLinkWithTwoLinksRemovingOne) { |
| 1890 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; | 1886 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; |
| 1891 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; | 1887 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; |
| 1892 set_loader_query("links_to_insert=2"); | 1888 set_loader_query("links_to_insert=2"); |
| 1893 PrerenderTestURL("files/prerender/prerender_page.html", | 1889 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 1894 FINAL_STATUS_USED, 1); | |
| 1895 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); | 1890 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
| 1896 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); | 1891 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| 1897 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); | 1892 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); |
| 1898 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); | 1893 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); |
| 1899 | 1894 |
| 1900 RemoveLinkElement(0); | 1895 RemoveLinkElement(0); |
| 1901 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); | 1896 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
| 1902 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); | 1897 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| 1903 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); | 1898 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); |
| 1904 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); | 1899 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); |
| 1905 EXPECT_FALSE(HadPrerenderEventErrors()); | 1900 EXPECT_FALSE(HadPrerenderEventErrors()); |
| 1906 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* | 1901 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* |
| 1907 // calls did a thread/process hop to the renderer which insured pending | 1902 // calls did a thread/process hop to the renderer which insured pending |
| 1908 // renderer events have arrived. | 1903 // renderer events have arrived. |
| 1909 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | 1904 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
| 1910 | 1905 |
| 1911 ChannelDestructionWatcher channel_close_watcher; | 1906 ChannelDestructionWatcher channel_close_watcher; |
| 1912 channel_close_watcher.WatchChannel( | 1907 channel_close_watcher.WatchChannel( |
| 1913 GetActiveWebContents()->GetRenderProcessHost()); | 1908 GetActiveWebContents()->GetRenderProcessHost()); |
| 1914 NavigateToDestURL(); | 1909 NavigateToDestURL(); |
| 1915 channel_close_watcher.WaitForChannelClose(); | 1910 channel_close_watcher.WaitForChannelClose(); |
| 1916 | 1911 |
| 1917 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1912 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1918 } | 1913 } |
| 1919 | 1914 |
| 1920 // Checks that the visibility API works. | 1915 // Checks that the visibility API works. |
| 1921 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibility) { | 1916 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibility) { |
| 1922 PrerenderTestURL("files/prerender/prerender_visibility.html", | 1917 PrerenderTestURL("/prerender/prerender_visibility.html", FINAL_STATUS_USED, |
| 1923 FINAL_STATUS_USED, | |
| 1924 1); | 1918 1); |
| 1925 NavigateToDestURL(); | 1919 NavigateToDestURL(); |
| 1926 } | 1920 } |
| 1927 | 1921 |
| 1928 // Checks that the prerendering of a page is canceled correctly if we try to | 1922 // Checks that the prerendering of a page is canceled correctly if we try to |
| 1929 // swap it in before it commits. | 1923 // swap it in before it commits. |
| 1930 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNoCommitNoSwap) { | 1924 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNoCommitNoSwap) { |
| 1931 // Navigate to a page that triggers a prerender for a URL that never commits. | 1925 // Navigate to a page that triggers a prerender for a URL that never commits. |
| 1932 const GURL kNoCommitUrl("http://never-respond.example.com"); | 1926 const GURL kNoCommitUrl("http://never-respond.example.com"); |
| 1933 base::FilePath file(GetTestPath("prerender_page.html")); | 1927 base::FilePath file(GetTestPath("prerender_page.html")); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1965 // Wait for the hanging request to be scheduled. | 1959 // Wait for the hanging request to be scheduled. |
| 1966 prerender_start_loop.Run(); | 1960 prerender_start_loop.Run(); |
| 1967 | 1961 |
| 1968 // Navigating to the second URL should not swap. | 1962 // Navigating to the second URL should not swap. |
| 1969 NavigateToURLWithDisposition(kNoCommitUrl, CURRENT_TAB, false); | 1963 NavigateToURLWithDisposition(kNoCommitUrl, CURRENT_TAB, false); |
| 1970 } | 1964 } |
| 1971 | 1965 |
| 1972 // Checks that the prerendering of a page is canceled correctly when a | 1966 // Checks that the prerendering of a page is canceled correctly when a |
| 1973 // Javascript alert is called. | 1967 // Javascript alert is called. |
| 1974 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAlertBeforeOnload) { | 1968 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAlertBeforeOnload) { |
| 1975 PrerenderTestURL("files/prerender/prerender_alert_before_onload.html", | 1969 PrerenderTestURL("/prerender/prerender_alert_before_onload.html", |
| 1976 FINAL_STATUS_JAVASCRIPT_ALERT, | 1970 FINAL_STATUS_JAVASCRIPT_ALERT, 0); |
| 1977 0); | |
| 1978 } | 1971 } |
| 1979 | 1972 |
| 1980 // Checks that the prerendering of a page is canceled correctly when a | 1973 // Checks that the prerendering of a page is canceled correctly when a |
| 1981 // Javascript alert is called. | 1974 // Javascript alert is called. |
| 1982 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAlertAfterOnload) { | 1975 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAlertAfterOnload) { |
| 1983 PrerenderTestURL("files/prerender/prerender_alert_after_onload.html", | 1976 PrerenderTestURL("/prerender/prerender_alert_after_onload.html", |
| 1984 FINAL_STATUS_JAVASCRIPT_ALERT, | 1977 FINAL_STATUS_JAVASCRIPT_ALERT, 1); |
| 1985 1); | |
| 1986 } | 1978 } |
| 1987 | 1979 |
| 1988 // Checks that plugins are not loaded while a page is being preloaded, but | 1980 // Checks that plugins are not loaded while a page is being preloaded, but |
| 1989 // are loaded when the page is displayed. | 1981 // are loaded when the page is displayed. |
| 1990 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDelayLoadPlugin) { | 1982 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDelayLoadPlugin) { |
| 1991 PrerenderTestURL("files/prerender/prerender_plugin_delay_load.html", | 1983 PrerenderTestURL("/prerender/prerender_plugin_delay_load.html", |
| 1992 FINAL_STATUS_USED, 1); | 1984 FINAL_STATUS_USED, 1); |
| 1993 NavigateToDestURL(); | 1985 NavigateToDestURL(); |
| 1994 } | 1986 } |
| 1995 | 1987 |
| 1996 // For Content Setting DETECT, checks that plugins are not loaded while | 1988 // For Content Setting DETECT, checks that plugins are not loaded while |
| 1997 // a page is being preloaded, but are loaded when the page is displayed. | 1989 // a page is being preloaded, but are loaded when the page is displayed. |
| 1998 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderContentSettingDetect) { | 1990 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderContentSettingDetect) { |
| 1999 HostContentSettingsMap* content_settings_map = | 1991 HostContentSettingsMap* content_settings_map = |
| 2000 HostContentSettingsMapFactory::GetForProfile( | 1992 HostContentSettingsMapFactory::GetForProfile( |
| 2001 current_browser()->profile()); | 1993 current_browser()->profile()); |
| 2002 content_settings_map->SetDefaultContentSetting( | 1994 content_settings_map->SetDefaultContentSetting( |
| 2003 CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT); | 1995 CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT); |
| 2004 | 1996 |
| 2005 PrerenderTestURL("files/prerender/prerender_plugin_power_saver.html", | 1997 PrerenderTestURL("/prerender/prerender_plugin_power_saver.html", |
| 2006 FINAL_STATUS_USED, 1); | 1998 FINAL_STATUS_USED, 1); |
| 2007 | 1999 |
| 2008 DisableJavascriptCalls(); | 2000 DisableJavascriptCalls(); |
| 2009 NavigateToDestURL(); | 2001 NavigateToDestURL(); |
| 2010 bool second_placeholder_present = false; | 2002 bool second_placeholder_present = false; |
| 2011 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( | 2003 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
| 2012 GetActiveWebContents(), "AwaitPluginPrerollAndPlaceholder();", | 2004 GetActiveWebContents(), "AwaitPluginPrerollAndPlaceholder();", |
| 2013 &second_placeholder_present)); | 2005 &second_placeholder_present)); |
| 2014 EXPECT_TRUE(second_placeholder_present); | 2006 EXPECT_TRUE(second_placeholder_present); |
| 2015 } | 2007 } |
| 2016 | 2008 |
| 2017 // For Content Setting BLOCK, checks that plugins are never loaded. | 2009 // For Content Setting BLOCK, checks that plugins are never loaded. |
| 2018 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderContentSettingBlock) { | 2010 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderContentSettingBlock) { |
| 2019 HostContentSettingsMap* content_settings_map = | 2011 HostContentSettingsMap* content_settings_map = |
| 2020 HostContentSettingsMapFactory::GetForProfile( | 2012 HostContentSettingsMapFactory::GetForProfile( |
| 2021 current_browser()->profile()); | 2013 current_browser()->profile()); |
| 2022 content_settings_map->SetDefaultContentSetting(CONTENT_SETTINGS_TYPE_PLUGINS, | 2014 content_settings_map->SetDefaultContentSetting(CONTENT_SETTINGS_TYPE_PLUGINS, |
| 2023 CONTENT_SETTING_BLOCK); | 2015 CONTENT_SETTING_BLOCK); |
| 2024 | 2016 |
| 2025 PrerenderTestURL("files/prerender/prerender_plugin_never_load.html", | 2017 PrerenderTestURL("/prerender/prerender_plugin_never_load.html", |
| 2026 FINAL_STATUS_USED, 1); | 2018 FINAL_STATUS_USED, 1); |
| 2027 NavigateToDestURL(); | 2019 NavigateToDestURL(); |
| 2028 } | 2020 } |
| 2029 | 2021 |
| 2030 // Checks that we don't load a NaCl plugin when NaCl is disabled. | 2022 // Checks that we don't load a NaCl plugin when NaCl is disabled. |
| 2031 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNaClPluginDisabled) { | 2023 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNaClPluginDisabled) { |
| 2032 PrerenderTestURL("files/prerender/prerender_plugin_nacl_disabled.html", | 2024 PrerenderTestURL("/prerender/prerender_plugin_nacl_disabled.html", |
| 2033 FINAL_STATUS_USED, | 2025 FINAL_STATUS_USED, 1); |
| 2034 1); | |
| 2035 NavigateToDestURL(); | 2026 NavigateToDestURL(); |
| 2036 | 2027 |
| 2037 | 2028 |
| 2038 // Run this check again. When we try to load aa ppapi plugin, the | 2029 // Run this check again. When we try to load aa ppapi plugin, the |
| 2039 // "loadstart" event is asynchronously posted to a message loop. | 2030 // "loadstart" event is asynchronously posted to a message loop. |
| 2040 // It's possible that earlier call could have been run before the | 2031 // It's possible that earlier call could have been run before the |
| 2041 // the "loadstart" event was posted. | 2032 // the "loadstart" event was posted. |
| 2042 // TODO(mmenke): While this should reliably fail on regressions, the | 2033 // TODO(mmenke): While this should reliably fail on regressions, the |
| 2043 // reliability depends on the specifics of ppapi plugin | 2034 // reliability depends on the specifics of ppapi plugin |
| 2044 // loading. It would be great if we could avoid that. | 2035 // loading. It would be great if we could avoid that. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2057 DISABLED_PrerenderIframeDelayLoadPlugin | 2048 DISABLED_PrerenderIframeDelayLoadPlugin |
| 2058 #elif defined(OS_WIN) && defined(ARCH_CPU_X86_64) | 2049 #elif defined(OS_WIN) && defined(ARCH_CPU_X86_64) |
| 2059 // TODO(jschuh): Failing plugin tests. crbug.com/244653 | 2050 // TODO(jschuh): Failing plugin tests. crbug.com/244653 |
| 2060 #define MAYBE_PrerenderIframeDelayLoadPlugin \ | 2051 #define MAYBE_PrerenderIframeDelayLoadPlugin \ |
| 2061 DISABLED_PrerenderIframeDelayLoadPlugin | 2052 DISABLED_PrerenderIframeDelayLoadPlugin |
| 2062 #else | 2053 #else |
| 2063 #define MAYBE_PrerenderIframeDelayLoadPlugin PrerenderIframeDelayLoadPlugin | 2054 #define MAYBE_PrerenderIframeDelayLoadPlugin PrerenderIframeDelayLoadPlugin |
| 2064 #endif | 2055 #endif |
| 2065 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2056 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2066 MAYBE_PrerenderIframeDelayLoadPlugin) { | 2057 MAYBE_PrerenderIframeDelayLoadPlugin) { |
| 2067 PrerenderTestURL("files/prerender/prerender_iframe_plugin_delay_load.html", | 2058 PrerenderTestURL("/prerender/prerender_iframe_plugin_delay_load.html", |
| 2068 FINAL_STATUS_USED, | 2059 FINAL_STATUS_USED, 1); |
| 2069 1); | |
| 2070 NavigateToDestURL(); | 2060 NavigateToDestURL(); |
| 2071 } | 2061 } |
| 2072 | 2062 |
| 2073 // Renders a page that contains a prerender link to a page that contains an | 2063 // Renders a page that contains a prerender link to a page that contains an |
| 2074 // iframe with a source that requires http authentication. This should not | 2064 // iframe with a source that requires http authentication. This should not |
| 2075 // prerender successfully. | 2065 // prerender successfully. |
| 2076 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHttpAuthentication) { | 2066 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHttpAuthentication) { |
| 2077 PrerenderTestURL("files/prerender/prerender_http_auth_container.html", | 2067 PrerenderTestURL("/prerender/prerender_http_auth_container.html", |
| 2078 FINAL_STATUS_AUTH_NEEDED, | 2068 FINAL_STATUS_AUTH_NEEDED, 0); |
| 2079 0); | |
| 2080 } | 2069 } |
| 2081 | 2070 |
| 2082 // Checks that client-issued redirects work with prerendering. | 2071 // Checks that client-issued redirects work with prerendering. |
| 2083 // This version navigates to the page which issues the redirection, rather | 2072 // This version navigates to the page which issues the redirection, rather |
| 2084 // than the final destination page. | 2073 // than the final destination page. |
| 2085 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2074 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2086 PrerenderClientRedirectNavigateToFirst) { | 2075 PrerenderClientRedirectNavigateToFirst) { |
| 2087 PrerenderTestURL(CreateClientRedirect("files/prerender/prerender_page.html"), | 2076 PrerenderTestURL(CreateClientRedirect("/prerender/prerender_page.html"), |
| 2088 FINAL_STATUS_USED, | 2077 FINAL_STATUS_USED, 2); |
| 2089 2); | |
| 2090 NavigateToDestURL(); | 2078 NavigateToDestURL(); |
| 2091 } | 2079 } |
| 2092 | 2080 |
| 2093 // Checks that client-issued redirects work with prerendering. | 2081 // Checks that client-issued redirects work with prerendering. |
| 2094 // This version navigates to the final destination page, rather than the | 2082 // This version navigates to the final destination page, rather than the |
| 2095 // page which does the redirection. | 2083 // page which does the redirection. |
| 2096 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2084 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2097 PrerenderClientRedirectNavigateToSecond) { | 2085 PrerenderClientRedirectNavigateToSecond) { |
| 2098 PrerenderTestURL(CreateClientRedirect("files/prerender/prerender_page.html"), | 2086 PrerenderTestURL(CreateClientRedirect("/prerender/prerender_page.html"), |
| 2099 FINAL_STATUS_USED, | 2087 FINAL_STATUS_USED, 2); |
| 2100 2); | 2088 NavigateToURL("/prerender/prerender_page.html"); |
| 2101 NavigateToURL("files/prerender/prerender_page.html"); | |
| 2102 } | 2089 } |
| 2103 | 2090 |
| 2104 // Checks that redirects with location.replace do not cancel a prerender and | 2091 // Checks that redirects with location.replace do not cancel a prerender and |
| 2105 // and swap when navigating to the first page. | 2092 // and swap when navigating to the first page. |
| 2106 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2093 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2107 PrerenderLocationReplaceNavigateToFirst) { | 2094 PrerenderLocationReplaceNavigateToFirst) { |
| 2108 PrerenderTestURL("files/prerender/prerender_location_replace.html", | 2095 PrerenderTestURL("/prerender/prerender_location_replace.html", |
| 2109 FINAL_STATUS_USED, | 2096 FINAL_STATUS_USED, 2); |
| 2110 2); | |
| 2111 NavigateToDestURL(); | 2097 NavigateToDestURL(); |
| 2112 } | 2098 } |
| 2113 | 2099 |
| 2114 // Checks that redirects with location.replace do not cancel a prerender and | 2100 // Checks that redirects with location.replace do not cancel a prerender and |
| 2115 // and swap when navigating to the second. | 2101 // and swap when navigating to the second. |
| 2116 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2102 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2117 PrerenderLocationReplaceNavigateToSecond) { | 2103 PrerenderLocationReplaceNavigateToSecond) { |
| 2118 PrerenderTestURL("files/prerender/prerender_location_replace.html", | 2104 PrerenderTestURL("/prerender/prerender_location_replace.html", |
| 2119 FINAL_STATUS_USED, | 2105 FINAL_STATUS_USED, 2); |
| 2120 2); | 2106 NavigateToURL("/prerender/prerender_page.html"); |
| 2121 NavigateToURL("files/prerender/prerender_page.html"); | |
| 2122 } | 2107 } |
| 2123 | 2108 |
| 2124 // Checks that we get the right PPLT histograms for client redirect prerenders | 2109 // Checks that we get the right PPLT histograms for client redirect prerenders |
| 2125 // and navigations when the referring page is Google. | 2110 // and navigations when the referring page is Google. |
| 2126 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2111 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2127 PrerenderLocationReplaceGWSHistograms) { | 2112 PrerenderLocationReplaceGWSHistograms) { |
| 2128 DisableJavascriptCalls(); | 2113 DisableJavascriptCalls(); |
| 2129 | 2114 |
| 2130 // The loader page should look like Google. | 2115 // The loader page should look like Google. |
| 2131 static const char kGoogleDotCom[] = "www.google.com"; | 2116 static const char kGoogleDotCom[] = "www.google.com"; |
| 2132 SetLoaderHostOverride(kGoogleDotCom); | 2117 SetLoaderHostOverride(kGoogleDotCom); |
| 2133 set_loader_path("files/prerender/prerender_loader_with_replace_state.html"); | 2118 set_loader_path("/prerender/prerender_loader_with_replace_state.html"); |
| 2134 | 2119 |
| 2135 GURL dest_url = GetCrossDomainTestUrl( | 2120 GURL dest_url = |
| 2136 "files/prerender/prerender_deferred_image.html"); | 2121 GetCrossDomainTestUrl("prerender/prerender_deferred_image.html"); |
| 2137 | 2122 |
| 2138 GURL prerender_url = test_server()->GetURL( | 2123 GURL prerender_url = embedded_test_server()->GetURL( |
| 2139 "files/prerender/prerender_location_replace.html?" + | 2124 "/prerender/prerender_location_replace.html?" + |
| 2140 net::EscapeQueryParamValue(dest_url.spec(), false) + | 2125 net::EscapeQueryParamValue(dest_url.spec(), false) + "#prerender"); |
| 2141 "#prerender"); | |
| 2142 GURL::Replacements replacements; | 2126 GURL::Replacements replacements; |
| 2143 replacements.SetHostStr(kGoogleDotCom); | 2127 replacements.SetHostStr(kGoogleDotCom); |
| 2144 prerender_url = prerender_url.ReplaceComponents(replacements); | 2128 prerender_url = prerender_url.ReplaceComponents(replacements); |
| 2145 | 2129 |
| 2146 // The prerender will not completely load until after the swap, so wait for a | 2130 // The prerender will not completely load until after the swap, so wait for a |
| 2147 // title change before calling DidPrerenderPass. | 2131 // title change before calling DidPrerenderPass. |
| 2148 scoped_ptr<TestPrerender> prerender = | 2132 scoped_ptr<TestPrerender> prerender = |
| 2149 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 1); | 2133 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 1); |
| 2150 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); | 2134 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); |
| 2151 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); | 2135 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); |
| 2152 EXPECT_EQ(1, prerender->number_of_loads()); | 2136 EXPECT_EQ(1, prerender->number_of_loads()); |
| 2153 | 2137 |
| 2154 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 2138 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 2155 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 2139 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 2156 histogram_tester().ExpectTotalCount( | 2140 histogram_tester().ExpectTotalCount( |
| 2157 "Prerender.none_PerceivedPLTMatchedComplete", 0); | 2141 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 2158 // Although there is a client redirect, it is dropped from histograms because | 2142 // Although there is a client redirect, it is dropped from histograms because |
| 2159 // it is a Google URL. The target page itself does not load until after the | 2143 // it is a Google URL. The target page itself does not load until after the |
| 2160 // swap. | 2144 // swap. |
| 2161 histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", | 2145 histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", |
| 2162 0); | 2146 0); |
| 2163 | 2147 |
| 2164 GURL navigate_url = test_server()->GetURL( | 2148 GURL navigate_url = embedded_test_server()->GetURL( |
| 2165 "files/prerender/prerender_location_replace.html?" + | 2149 "/prerender/prerender_location_replace.html?" + |
| 2166 net::EscapeQueryParamValue(dest_url.spec(), false) + | 2150 net::EscapeQueryParamValue(dest_url.spec(), false) + "#navigate"); |
| 2167 "#navigate"); | |
| 2168 navigate_url = navigate_url.ReplaceComponents(replacements); | 2151 navigate_url = navigate_url.ReplaceComponents(replacements); |
| 2169 | 2152 |
| 2170 NavigationOrSwapObserver swap_observer( | 2153 NavigationOrSwapObserver swap_observer( |
| 2171 current_browser()->tab_strip_model(), | 2154 current_browser()->tab_strip_model(), |
| 2172 GetActiveWebContents(), 2); | 2155 GetActiveWebContents(), 2); |
| 2173 current_browser()->OpenURL(OpenURLParams( | 2156 current_browser()->OpenURL(OpenURLParams( |
| 2174 navigate_url, Referrer(), CURRENT_TAB, | 2157 navigate_url, Referrer(), CURRENT_TAB, |
| 2175 ui::PAGE_TRANSITION_TYPED, false)); | 2158 ui::PAGE_TRANSITION_TYPED, false)); |
| 2176 swap_observer.Wait(); | 2159 swap_observer.Wait(); |
| 2177 | 2160 |
| 2178 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); | 2161 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
| 2179 | 2162 |
| 2180 histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", | 2163 histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", |
| 2181 0); | 2164 0); |
| 2182 histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLT", 1); | 2165 histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLT", 1); |
| 2183 histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLTMatched", 1); | 2166 histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLTMatched", 1); |
| 2184 histogram_tester().ExpectTotalCount( | 2167 histogram_tester().ExpectTotalCount( |
| 2185 "Prerender.gws_PerceivedPLTMatchedComplete", 1); | 2168 "Prerender.gws_PerceivedPLTMatchedComplete", 1); |
| 2186 | 2169 |
| 2187 // The client redirect does /not/ count as a miss because it's a Google URL. | 2170 // The client redirect does /not/ count as a miss because it's a Google URL. |
| 2188 histogram_tester().ExpectTotalCount("Prerender.PerceivedPLTFirstAfterMiss", | 2171 histogram_tester().ExpectTotalCount("Prerender.PerceivedPLTFirstAfterMiss", |
| 2189 0); | 2172 0); |
| 2190 } | 2173 } |
| 2191 | 2174 |
| 2192 // Checks that client-issued redirects work with prerendering. | 2175 // Checks that client-issued redirects work with prerendering. |
| 2193 // This version navigates to the final destination page, rather than the | 2176 // This version navigates to the final destination page, rather than the |
| 2194 // page which does the redirection via a mouse click. | 2177 // page which does the redirection via a mouse click. |
| 2195 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2178 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2196 PrerenderClientRedirectNavigateToSecondViaClick) { | 2179 PrerenderClientRedirectNavigateToSecondViaClick) { |
| 2197 GURL prerender_url = test_server()->GetURL( | 2180 GURL prerender_url = embedded_test_server()->GetURL( |
| 2198 CreateClientRedirect("files/prerender/prerender_page.html")); | 2181 CreateClientRedirect("/prerender/prerender_page.html")); |
| 2199 GURL destination_url = test_server()->GetURL( | 2182 GURL destination_url = |
| 2200 "files/prerender/prerender_page.html"); | 2183 embedded_test_server()->GetURL("/prerender/prerender_page.html"); |
| 2201 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 2); | 2184 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 2); |
| 2202 OpenURLViaClick(destination_url); | 2185 OpenURLViaClick(destination_url); |
| 2203 } | 2186 } |
| 2204 | 2187 |
| 2205 // Checks that a page served over HTTPS is correctly prerendered. | 2188 // Checks that a page served over HTTPS is correctly prerendered. |
| 2206 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHttps) { | 2189 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHttps) { |
| 2207 net::SpawnedTestServer https_server( | 2190 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 2208 net::SpawnedTestServer::TYPE_HTTPS, net::SpawnedTestServer::kLocalhost, | 2191 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); |
| 2209 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); | |
| 2210 ASSERT_TRUE(https_server.Start()); | 2192 ASSERT_TRUE(https_server.Start()); |
| 2211 GURL https_url = https_server.GetURL("files/prerender/prerender_page.html"); | 2193 GURL https_url = https_server.GetURL("/prerender/prerender_page.html"); |
| 2212 PrerenderTestURL(https_url, | 2194 PrerenderTestURL(https_url, |
| 2213 FINAL_STATUS_USED, | 2195 FINAL_STATUS_USED, |
| 2214 1); | 2196 1); |
| 2215 NavigateToDestURL(); | 2197 NavigateToDestURL(); |
| 2216 } | 2198 } |
| 2217 | 2199 |
| 2218 // Checks that client-issued redirects within an iframe in a prerendered | 2200 // Checks that client-issued redirects within an iframe in a prerendered |
| 2219 // page will not count as an "alias" for the prerendered page. | 2201 // page will not count as an "alias" for the prerendered page. |
| 2220 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2202 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2221 PrerenderClientRedirectInIframe) { | 2203 PrerenderClientRedirectInIframe) { |
| 2222 std::string redirect_path = CreateClientRedirect( | 2204 std::string redirect_path = |
| 2223 "/files/prerender/prerender_embedded_content.html"); | 2205 CreateClientRedirect("/prerender/prerender_embedded_content.html"); |
| 2224 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 2206 base::StringPairs replacement_text; |
| 2225 replacement_text.push_back( | 2207 replacement_text.push_back(std::make_pair("REPLACE_WITH_URL", redirect_path)); |
| 2226 std::make_pair("REPLACE_WITH_URL", "/" + redirect_path)); | |
| 2227 std::string replacement_path; | 2208 std::string replacement_path; |
| 2228 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 2209 net::test_server::GetFilePathWithReplacements( |
| 2229 "files/prerender/prerender_with_iframe.html", | 2210 "/prerender/prerender_with_iframe.html", replacement_text, |
| 2230 replacement_text, | 2211 &replacement_path); |
| 2231 &replacement_path)); | |
| 2232 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 2); | 2212 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 2); |
| 2233 EXPECT_FALSE(UrlIsInPrerenderManager( | 2213 EXPECT_FALSE( |
| 2234 "files/prerender/prerender_embedded_content.html")); | 2214 UrlIsInPrerenderManager("/prerender/prerender_embedded_content.html")); |
| 2235 NavigateToDestURL(); | 2215 NavigateToDestURL(); |
| 2236 } | 2216 } |
| 2237 | 2217 |
| 2238 // Checks that server-issued redirects work with prerendering. | 2218 // Checks that server-issued redirects work with prerendering. |
| 2239 // This version navigates to the page which issues the redirection, rather | 2219 // This version navigates to the page which issues the redirection, rather |
| 2240 // than the final destination page. | 2220 // than the final destination page. |
| 2241 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2221 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2242 PrerenderServerRedirectNavigateToFirst) { | 2222 PrerenderServerRedirectNavigateToFirst) { |
| 2243 PrerenderTestURL(CreateServerRedirect("files/prerender/prerender_page.html"), | 2223 PrerenderTestURL(CreateServerRedirect("/prerender/prerender_page.html"), |
| 2244 FINAL_STATUS_USED, | 2224 FINAL_STATUS_USED, 1); |
| 2245 1); | |
| 2246 NavigateToDestURL(); | 2225 NavigateToDestURL(); |
| 2247 } | 2226 } |
| 2248 | 2227 |
| 2249 // Checks that server-issued redirects work with prerendering. | 2228 // Checks that server-issued redirects work with prerendering. |
| 2250 // This version navigates to the final destination page, rather than the | 2229 // This version navigates to the final destination page, rather than the |
| 2251 // page which does the redirection. | 2230 // page which does the redirection. |
| 2252 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2231 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2253 PrerenderServerRedirectNavigateToSecond) { | 2232 PrerenderServerRedirectNavigateToSecond) { |
| 2254 PrerenderTestURL(CreateServerRedirect("files/prerender/prerender_page.html"), | 2233 PrerenderTestURL(CreateServerRedirect("/prerender/prerender_page.html"), |
| 2255 FINAL_STATUS_USED, | 2234 FINAL_STATUS_USED, 1); |
| 2256 1); | 2235 NavigateToURL("/prerender/prerender_page.html"); |
| 2257 NavigateToURL("files/prerender/prerender_page.html"); | |
| 2258 } | 2236 } |
| 2259 | 2237 |
| 2260 // Checks that server-issued redirects work with prerendering. | 2238 // Checks that server-issued redirects work with prerendering. |
| 2261 // This version navigates to the final destination page, rather than the | 2239 // This version navigates to the final destination page, rather than the |
| 2262 // page which does the redirection via a mouse click. | 2240 // page which does the redirection via a mouse click. |
| 2263 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2241 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2264 PrerenderServerRedirectNavigateToSecondViaClick) { | 2242 PrerenderServerRedirectNavigateToSecondViaClick) { |
| 2265 GURL prerender_url = test_server()->GetURL( | 2243 GURL prerender_url = embedded_test_server()->GetURL( |
| 2266 CreateServerRedirect("files/prerender/prerender_page.html")); | 2244 CreateServerRedirect("/prerender/prerender_page.html")); |
| 2267 GURL destination_url = test_server()->GetURL( | 2245 GURL destination_url = |
| 2268 "files/prerender/prerender_page.html"); | 2246 embedded_test_server()->GetURL("/prerender/prerender_page.html"); |
| 2269 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 1); | 2247 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 1); |
| 2270 OpenURLViaClick(destination_url); | 2248 OpenURLViaClick(destination_url); |
| 2271 } | 2249 } |
| 2272 | 2250 |
| 2273 // Checks that server-issued redirects within an iframe in a prerendered | 2251 // Checks that server-issued redirects within an iframe in a prerendered |
| 2274 // page will not count as an "alias" for the prerendered page. | 2252 // page will not count as an "alias" for the prerendered page. |
| 2275 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderServerRedirectInIframe) { | 2253 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderServerRedirectInIframe) { |
| 2276 std::string redirect_path = CreateServerRedirect( | 2254 std::string redirect_path = |
| 2277 "/files/prerender/prerender_embedded_content.html"); | 2255 CreateServerRedirect("//prerender/prerender_embedded_content.html"); |
| 2278 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 2256 base::StringPairs replacement_text; |
| 2279 replacement_text.push_back( | 2257 replacement_text.push_back(std::make_pair("REPLACE_WITH_URL", redirect_path)); |
| 2280 std::make_pair("REPLACE_WITH_URL", "/" + redirect_path)); | |
| 2281 std::string replacement_path; | 2258 std::string replacement_path; |
| 2282 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 2259 net::test_server::GetFilePathWithReplacements( |
| 2283 "files/prerender/prerender_with_iframe.html", | 2260 "/prerender/prerender_with_iframe.html", replacement_text, |
| 2284 replacement_text, | 2261 &replacement_path); |
| 2285 &replacement_path)); | |
| 2286 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); | 2262 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); |
| 2287 EXPECT_FALSE(UrlIsInPrerenderManager( | 2263 EXPECT_FALSE( |
| 2288 "files/prerender/prerender_embedded_content.html")); | 2264 UrlIsInPrerenderManager("/prerender/prerender_embedded_content.html")); |
| 2289 NavigateToDestURL(); | 2265 NavigateToDestURL(); |
| 2290 } | 2266 } |
| 2291 | 2267 |
| 2292 // Prerenders a page that contains an automatic download triggered through an | 2268 // Prerenders a page that contains an automatic download triggered through an |
| 2293 // iframe. This should not prerender successfully. | 2269 // iframe. This should not prerender successfully. |
| 2294 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDownloadIframe) { | 2270 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDownloadIframe) { |
| 2295 PrerenderTestURL("files/prerender/prerender_download_iframe.html", | 2271 PrerenderTestURL("/prerender/prerender_download_iframe.html", |
| 2296 FINAL_STATUS_DOWNLOAD, | 2272 FINAL_STATUS_DOWNLOAD, 0); |
| 2297 0); | |
| 2298 } | 2273 } |
| 2299 | 2274 |
| 2300 // Prerenders a page that contains an automatic download triggered through | 2275 // Prerenders a page that contains an automatic download triggered through |
| 2301 // Javascript changing the window.location. This should not prerender | 2276 // Javascript changing the window.location. This should not prerender |
| 2302 // successfully | 2277 // successfully |
| 2303 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDownloadLocation) { | 2278 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDownloadLocation) { |
| 2304 PrerenderTestURL(CreateClientRedirect("files/download-test1.lib"), | 2279 PrerenderTestURL(CreateClientRedirect("/download-test1.lib"), |
| 2305 FINAL_STATUS_DOWNLOAD, | 2280 FINAL_STATUS_DOWNLOAD, 1); |
| 2306 1); | |
| 2307 } | 2281 } |
| 2308 | 2282 |
| 2309 // Prerenders a page that contains an automatic download triggered through a | 2283 // Prerenders a page that contains an automatic download triggered through a |
| 2310 // client-issued redirect. This should not prerender successfully. | 2284 // client-issued redirect. This should not prerender successfully. |
| 2311 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDownloadClientRedirect) { | 2285 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDownloadClientRedirect) { |
| 2312 PrerenderTestURL("files/prerender/prerender_download_refresh.html", | 2286 PrerenderTestURL("/prerender/prerender_download_refresh.html", |
| 2313 FINAL_STATUS_DOWNLOAD, | 2287 FINAL_STATUS_DOWNLOAD, 1); |
| 2314 1); | |
| 2315 } | 2288 } |
| 2316 | 2289 |
| 2317 // Checks that the referrer is set when prerendering. | 2290 // Checks that the referrer is set when prerendering. |
| 2318 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReferrer) { | 2291 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReferrer) { |
| 2319 PrerenderTestURL("files/prerender/prerender_referrer.html", | 2292 PrerenderTestURL("/prerender/prerender_referrer.html", FINAL_STATUS_USED, 1); |
| 2320 FINAL_STATUS_USED, | |
| 2321 1); | |
| 2322 NavigateToDestURL(); | 2293 NavigateToDestURL(); |
| 2323 } | 2294 } |
| 2324 | 2295 |
| 2325 // Checks that the referrer is not set when prerendering and the source page is | 2296 // Checks that the referrer is not set when prerendering and the source page is |
| 2326 // HTTPS. | 2297 // HTTPS. |
| 2327 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2298 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2328 PrerenderNoSSLReferrer) { | 2299 PrerenderNoSSLReferrer) { |
| 2329 UseHttpsSrcServer(); | 2300 UseHttpsSrcServer(); |
| 2330 PrerenderTestURL("files/prerender/prerender_no_referrer.html", | 2301 PrerenderTestURL("/prerender/prerender_no_referrer.html", FINAL_STATUS_USED, |
| 2331 FINAL_STATUS_USED, | |
| 2332 1); | 2302 1); |
| 2333 NavigateToDestURL(); | 2303 NavigateToDestURL(); |
| 2334 } | 2304 } |
| 2335 | 2305 |
| 2336 // Checks that the referrer is set when prerendering is cancelled. | 2306 // Checks that the referrer is set when prerendering is cancelled. |
| 2337 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelReferrer) { | 2307 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelReferrer) { |
| 2338 scoped_ptr<TestContentBrowserClient> test_content_browser_client( | 2308 scoped_ptr<TestContentBrowserClient> test_content_browser_client( |
| 2339 new TestContentBrowserClient); | 2309 new TestContentBrowserClient); |
| 2340 content::ContentBrowserClient* original_browser_client = | 2310 content::ContentBrowserClient* original_browser_client = |
| 2341 content::SetBrowserClientForTesting(test_content_browser_client.get()); | 2311 content::SetBrowserClientForTesting(test_content_browser_client.get()); |
| 2342 | 2312 |
| 2343 PrerenderTestURL("files/prerender/prerender_referrer.html", | 2313 PrerenderTestURL("/prerender/prerender_referrer.html", FINAL_STATUS_CANCELLED, |
| 2344 FINAL_STATUS_CANCELLED, | |
| 2345 1); | 2314 1); |
| 2346 OpenDestURLViaClick(); | 2315 OpenDestURLViaClick(); |
| 2347 | 2316 |
| 2348 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); | 2317 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
| 2349 | 2318 |
| 2350 content::SetBrowserClientForTesting(original_browser_client); | 2319 content::SetBrowserClientForTesting(original_browser_client); |
| 2351 } | 2320 } |
| 2352 | 2321 |
| 2353 // Checks that popups on a prerendered page cause cancellation. | 2322 // Checks that popups on a prerendered page cause cancellation. |
| 2354 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPopup) { | 2323 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPopup) { |
| 2355 PrerenderTestURL("files/prerender/prerender_popup.html", | 2324 PrerenderTestURL("/prerender/prerender_popup.html", |
| 2356 FINAL_STATUS_CREATE_NEW_WINDOW, | 2325 FINAL_STATUS_CREATE_NEW_WINDOW, 0); |
| 2357 0); | |
| 2358 } | 2326 } |
| 2359 | 2327 |
| 2360 // Checks that registering a protocol handler causes cancellation. | 2328 // Checks that registering a protocol handler causes cancellation. |
| 2361 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderRegisterProtocolHandler) { | 2329 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderRegisterProtocolHandler) { |
| 2362 PrerenderTestURL("files/prerender/prerender_register_protocol_handler.html", | 2330 PrerenderTestURL("/prerender/prerender_register_protocol_handler.html", |
| 2363 FINAL_STATUS_REGISTER_PROTOCOL_HANDLER, | 2331 FINAL_STATUS_REGISTER_PROTOCOL_HANDLER, 0); |
| 2364 0); | |
| 2365 } | 2332 } |
| 2366 | 2333 |
| 2367 // Checks that renderers using excessive memory will be terminated. | 2334 // Checks that renderers using excessive memory will be terminated. |
| 2368 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExcessiveMemory) { | 2335 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExcessiveMemory) { |
| 2369 ASSERT_TRUE(GetPrerenderManager()); | 2336 ASSERT_TRUE(GetPrerenderManager()); |
| 2370 GetPrerenderManager()->mutable_config().max_bytes = 30 * 1024 * 1024; | 2337 GetPrerenderManager()->mutable_config().max_bytes = 30 * 1024 * 1024; |
| 2371 // The excessive memory kill may happen before or after the load event as it | 2338 // The excessive memory kill may happen before or after the load event as it |
| 2372 // happens asynchronously with IPC calls. Even if the test does not start | 2339 // happens asynchronously with IPC calls. Even if the test does not start |
| 2373 // allocating until after load, the browser process might notice before the | 2340 // allocating until after load, the browser process might notice before the |
| 2374 // message gets through. This happens on XP debug bots because they're so | 2341 // message gets through. This happens on XP debug bots because they're so |
| 2375 // slow. Instead, don't bother checking the load event count. | 2342 // slow. Instead, don't bother checking the load event count. |
| 2376 DisableLoadEventCheck(); | 2343 DisableLoadEventCheck(); |
| 2377 PrerenderTestURL("files/prerender/prerender_excessive_memory.html", | 2344 PrerenderTestURL("/prerender/prerender_excessive_memory.html", |
| 2378 FINAL_STATUS_MEMORY_LIMIT_EXCEEDED, 0); | 2345 FINAL_STATUS_MEMORY_LIMIT_EXCEEDED, 0); |
| 2379 } | 2346 } |
| 2380 | 2347 |
| 2381 // Checks shutdown code while a prerender is active. | 2348 // Checks shutdown code while a prerender is active. |
| 2382 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderQuickQuit) { | 2349 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderQuickQuit) { |
| 2383 DisableJavascriptCalls(); | 2350 DisableJavascriptCalls(); |
| 2384 DisableLoadEventCheck(); | 2351 DisableLoadEventCheck(); |
| 2385 PrerenderTestURL("files/prerender/prerender_page.html", | 2352 PrerenderTestURL("/prerender/prerender_page.html", |
| 2386 FINAL_STATUS_APP_TERMINATING, | 2353 FINAL_STATUS_APP_TERMINATING, 0); |
| 2387 0); | |
| 2388 } | 2354 } |
| 2389 | 2355 |
| 2390 // Checks that we don't prerender in an infinite loop. | 2356 // Checks that we don't prerender in an infinite loop. |
| 2391 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderInfiniteLoop) { | 2357 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderInfiniteLoop) { |
| 2392 const char* const kHtmlFileA = "files/prerender/prerender_infinite_a.html"; | 2358 const char* const kHtmlFileA = "/prerender/prerender_infinite_a.html"; |
| 2393 const char* const kHtmlFileB = "files/prerender/prerender_infinite_b.html"; | 2359 const char* const kHtmlFileB = "/prerender/prerender_infinite_b.html"; |
| 2394 | 2360 |
| 2395 std::vector<FinalStatus> expected_final_status_queue; | 2361 std::vector<FinalStatus> expected_final_status_queue; |
| 2396 expected_final_status_queue.push_back(FINAL_STATUS_USED); | 2362 expected_final_status_queue.push_back(FINAL_STATUS_USED); |
| 2397 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); | 2363 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); |
| 2398 | 2364 |
| 2399 ScopedVector<TestPrerender> prerenders = | 2365 ScopedVector<TestPrerender> prerenders = |
| 2400 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); | 2366 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); |
| 2401 ASSERT_TRUE(prerenders[0]->contents()); | 2367 ASSERT_TRUE(prerenders[0]->contents()); |
| 2402 // Assert that the pending prerender is in there already. This relies on the | 2368 // Assert that the pending prerender is in there already. This relies on the |
| 2403 // fact that the renderer sends out the AddLinkRelPrerender IPC before sending | 2369 // fact that the renderer sends out the AddLinkRelPrerender IPC before sending |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2416 EXPECT_TRUE(UrlIsInPrerenderManager(kHtmlFileB)); | 2382 EXPECT_TRUE(UrlIsInPrerenderManager(kHtmlFileB)); |
| 2417 EXPECT_EQ(1U, GetLinkPrerenderCount()); | 2383 EXPECT_EQ(1U, GetLinkPrerenderCount()); |
| 2418 EXPECT_EQ(1U, GetRunningLinkPrerenderCount()); | 2384 EXPECT_EQ(1U, GetRunningLinkPrerenderCount()); |
| 2419 } | 2385 } |
| 2420 | 2386 |
| 2421 // Checks that we don't prerender in an infinite loop and multiple links are | 2387 // Checks that we don't prerender in an infinite loop and multiple links are |
| 2422 // handled correctly. | 2388 // handled correctly. |
| 2423 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2389 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2424 PrerenderInfiniteLoopMultiple) { | 2390 PrerenderInfiniteLoopMultiple) { |
| 2425 const char* const kHtmlFileA = | 2391 const char* const kHtmlFileA = |
| 2426 "files/prerender/prerender_infinite_a_multiple.html"; | 2392 "/prerender/prerender_infinite_a_multiple.html"; |
| 2427 const char* const kHtmlFileB = | 2393 const char* const kHtmlFileB = |
| 2428 "files/prerender/prerender_infinite_b_multiple.html"; | 2394 "/prerender/prerender_infinite_b_multiple.html"; |
| 2429 const char* const kHtmlFileC = | 2395 const char* const kHtmlFileC = |
| 2430 "files/prerender/prerender_infinite_c_multiple.html"; | 2396 "/prerender/prerender_infinite_c_multiple.html"; |
| 2431 | 2397 |
| 2432 // This test is conceptually simplest if concurrency is at two, since we | 2398 // This test is conceptually simplest if concurrency is at two, since we |
| 2433 // don't have to worry about which of kHtmlFileB or kHtmlFileC gets evicted. | 2399 // don't have to worry about which of kHtmlFileB or kHtmlFileC gets evicted. |
| 2434 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; | 2400 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; |
| 2435 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; | 2401 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; |
| 2436 | 2402 |
| 2437 std::vector<FinalStatus> expected_final_status_queue; | 2403 std::vector<FinalStatus> expected_final_status_queue; |
| 2438 expected_final_status_queue.push_back(FINAL_STATUS_USED); | 2404 expected_final_status_queue.push_back(FINAL_STATUS_USED); |
| 2439 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); | 2405 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); |
| 2440 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); | 2406 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2460 bool url_b_is_active_prerender = UrlIsInPrerenderManager(kHtmlFileB); | 2426 bool url_b_is_active_prerender = UrlIsInPrerenderManager(kHtmlFileB); |
| 2461 bool url_c_is_active_prerender = UrlIsInPrerenderManager(kHtmlFileC); | 2427 bool url_c_is_active_prerender = UrlIsInPrerenderManager(kHtmlFileC); |
| 2462 EXPECT_TRUE(url_b_is_active_prerender && url_c_is_active_prerender); | 2428 EXPECT_TRUE(url_b_is_active_prerender && url_c_is_active_prerender); |
| 2463 EXPECT_EQ(2U, GetLinkPrerenderCount()); | 2429 EXPECT_EQ(2U, GetLinkPrerenderCount()); |
| 2464 EXPECT_EQ(2U, GetRunningLinkPrerenderCount()); | 2430 EXPECT_EQ(2U, GetRunningLinkPrerenderCount()); |
| 2465 } | 2431 } |
| 2466 | 2432 |
| 2467 // Checks that pending prerenders are aborted (and never launched) when launched | 2433 // Checks that pending prerenders are aborted (and never launched) when launched |
| 2468 // by a prerender that itself gets aborted. | 2434 // by a prerender that itself gets aborted. |
| 2469 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAbortPendingOnCancel) { | 2435 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAbortPendingOnCancel) { |
| 2470 const char* const kHtmlFileA = "files/prerender/prerender_infinite_a.html"; | 2436 const char* const kHtmlFileA = "/prerender/prerender_infinite_a.html"; |
| 2471 const char* const kHtmlFileB = "files/prerender/prerender_infinite_b.html"; | 2437 const char* const kHtmlFileB = "/prerender/prerender_infinite_b.html"; |
| 2472 | 2438 |
| 2473 scoped_ptr<TestPrerender> prerender = | 2439 scoped_ptr<TestPrerender> prerender = |
| 2474 PrerenderTestURL(kHtmlFileA, FINAL_STATUS_CANCELLED, 1); | 2440 PrerenderTestURL(kHtmlFileA, FINAL_STATUS_CANCELLED, 1); |
| 2475 ASSERT_TRUE(prerender->contents()); | 2441 ASSERT_TRUE(prerender->contents()); |
| 2476 // Assert that the pending prerender is in there already. This relies on the | 2442 // Assert that the pending prerender is in there already. This relies on the |
| 2477 // fact that the renderer sends out the AddLinkRelPrerender IPC before sending | 2443 // fact that the renderer sends out the AddLinkRelPrerender IPC before sending |
| 2478 // the page load one. | 2444 // the page load one. |
| 2479 EXPECT_EQ(2U, GetLinkPrerenderCount()); | 2445 EXPECT_EQ(2U, GetLinkPrerenderCount()); |
| 2480 EXPECT_EQ(1U, GetRunningLinkPrerenderCount()); | 2446 EXPECT_EQ(1U, GetRunningLinkPrerenderCount()); |
| 2481 | 2447 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 2500 const base::string16 original = MatchTaskManagerTab("Preloader"); | 2466 const base::string16 original = MatchTaskManagerTab("Preloader"); |
| 2501 const base::string16 prerender = MatchTaskManagerPrerender("Prerender Page"); | 2467 const base::string16 prerender = MatchTaskManagerPrerender("Prerender Page"); |
| 2502 const base::string16 final = MatchTaskManagerTab("Prerender Page"); | 2468 const base::string16 final = MatchTaskManagerTab("Prerender Page"); |
| 2503 | 2469 |
| 2504 // Show the task manager. This populates the model. | 2470 // Show the task manager. This populates the model. |
| 2505 chrome::OpenTaskManager(current_browser()); | 2471 chrome::OpenTaskManager(current_browser()); |
| 2506 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_tab)); | 2472 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_tab)); |
| 2507 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, any_prerender)); | 2473 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, any_prerender)); |
| 2508 | 2474 |
| 2509 // Prerender a page in addition to the original tab. | 2475 // Prerender a page in addition to the original tab. |
| 2510 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 2476 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 2511 | 2477 |
| 2512 // A TaskManager entry should appear like "Prerender: Prerender Page" | 2478 // A TaskManager entry should appear like "Prerender: Prerender Page" |
| 2513 // alongside the original tab entry. There should be just these two entries. | 2479 // alongside the original tab entry. There should be just these two entries. |
| 2514 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, prerender)); | 2480 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, prerender)); |
| 2515 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, original)); | 2481 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, original)); |
| 2516 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, final)); | 2482 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, final)); |
| 2517 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_prerender)); | 2483 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_prerender)); |
| 2518 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_tab)); | 2484 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_tab)); |
| 2519 | 2485 |
| 2520 // Swap in the prerendered content. | 2486 // Swap in the prerendered content. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2534 // explicitly disable the new one. | 2500 // explicitly disable the new one. |
| 2535 task_manager::browsertest_util::EnableOldTaskManager(); | 2501 task_manager::browsertest_util::EnableOldTaskManager(); |
| 2536 | 2502 |
| 2537 const base::string16 any_prerender = MatchTaskManagerPrerender("*"); | 2503 const base::string16 any_prerender = MatchTaskManagerPrerender("*"); |
| 2538 const base::string16 any_tab = MatchTaskManagerTab("*"); | 2504 const base::string16 any_tab = MatchTaskManagerTab("*"); |
| 2539 const base::string16 original = MatchTaskManagerTab("Preloader"); | 2505 const base::string16 original = MatchTaskManagerTab("Preloader"); |
| 2540 const base::string16 prerender = MatchTaskManagerPrerender("Prerender Page"); | 2506 const base::string16 prerender = MatchTaskManagerPrerender("Prerender Page"); |
| 2541 const base::string16 final = MatchTaskManagerTab("Prerender Page"); | 2507 const base::string16 final = MatchTaskManagerTab("Prerender Page"); |
| 2542 | 2508 |
| 2543 // Start with two resources. | 2509 // Start with two resources. |
| 2544 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 2510 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 2545 | 2511 |
| 2546 // Show the task manager. This populates the model. Importantly, we're doing | 2512 // Show the task manager. This populates the model. Importantly, we're doing |
| 2547 // this after the prerender WebContents already exists - the task manager | 2513 // this after the prerender WebContents already exists - the task manager |
| 2548 // needs to find it, it can't just listen for creation. | 2514 // needs to find it, it can't just listen for creation. |
| 2549 chrome::OpenTaskManager(current_browser()); | 2515 chrome::OpenTaskManager(current_browser()); |
| 2550 | 2516 |
| 2551 // A TaskManager entry should appear like "Prerender: Prerender Page" | 2517 // A TaskManager entry should appear like "Prerender: Prerender Page" |
| 2552 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, prerender)); | 2518 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, prerender)); |
| 2553 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, original)); | 2519 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, original)); |
| 2554 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, final)); | 2520 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, final)); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2570 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, OpenTaskManagerAfterSwapIn) { | 2536 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, OpenTaskManagerAfterSwapIn) { |
| 2571 // This test is for the old implementation of the task manager. We must | 2537 // This test is for the old implementation of the task manager. We must |
| 2572 // explicitly disable the new one. | 2538 // explicitly disable the new one. |
| 2573 task_manager::browsertest_util::EnableOldTaskManager(); | 2539 task_manager::browsertest_util::EnableOldTaskManager(); |
| 2574 | 2540 |
| 2575 const base::string16 any_prerender = MatchTaskManagerPrerender("*"); | 2541 const base::string16 any_prerender = MatchTaskManagerPrerender("*"); |
| 2576 const base::string16 any_tab = MatchTaskManagerTab("*"); | 2542 const base::string16 any_tab = MatchTaskManagerTab("*"); |
| 2577 const base::string16 final = MatchTaskManagerTab("Prerender Page"); | 2543 const base::string16 final = MatchTaskManagerTab("Prerender Page"); |
| 2578 | 2544 |
| 2579 // Prerender, and swap it in. | 2545 // Prerender, and swap it in. |
| 2580 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 2546 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 2581 NavigateToDestURL(); | 2547 NavigateToDestURL(); |
| 2582 | 2548 |
| 2583 // Show the task manager. This populates the model. Importantly, we're doing | 2549 // Show the task manager. This populates the model. Importantly, we're doing |
| 2584 // this after the prerender has been swapped in. | 2550 // this after the prerender has been swapped in. |
| 2585 chrome::OpenTaskManager(current_browser()); | 2551 chrome::OpenTaskManager(current_browser()); |
| 2586 | 2552 |
| 2587 // We should not see a prerender resource in the task manager, just a normal | 2553 // We should not see a prerender resource in the task manager, just a normal |
| 2588 // page. | 2554 // page. |
| 2589 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, final)); | 2555 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, final)); |
| 2590 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_tab)); | 2556 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_tab)); |
| 2591 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, any_prerender)); | 2557 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, any_prerender)); |
| 2592 } | 2558 } |
| 2593 | 2559 |
| 2594 // Checks that audio loads are deferred on prerendering. | 2560 // Checks that audio loads are deferred on prerendering. |
| 2595 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5Audio) { | 2561 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5Audio) { |
| 2596 PrerenderTestURL("files/prerender/prerender_html5_audio.html", | 2562 PrerenderTestURL("/prerender/prerender_html5_audio.html", FINAL_STATUS_USED, |
| 2597 FINAL_STATUS_USED, | |
| 2598 1); | 2563 1); |
| 2599 NavigateToDestURL(); | 2564 NavigateToDestURL(); |
| 2600 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); | 2565 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
| 2601 } | 2566 } |
| 2602 | 2567 |
| 2603 // Checks that audio loads are deferred on prerendering and played back when | 2568 // Checks that audio loads are deferred on prerendering and played back when |
| 2604 // the prerender is swapped in if autoplay is set. | 2569 // the prerender is swapped in if autoplay is set. |
| 2605 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5AudioAutoplay) { | 2570 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5AudioAutoplay) { |
| 2606 PrerenderTestURL("files/prerender/prerender_html5_audio_autoplay.html", | 2571 PrerenderTestURL("/prerender/prerender_html5_audio_autoplay.html", |
| 2607 FINAL_STATUS_USED, | 2572 FINAL_STATUS_USED, 1); |
| 2608 1); | |
| 2609 NavigateToDestURL(); | 2573 NavigateToDestURL(); |
| 2610 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); | 2574 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
| 2611 } | 2575 } |
| 2612 | 2576 |
| 2613 // Checks that audio loads are deferred on prerendering and played back when | 2577 // Checks that audio loads are deferred on prerendering and played back when |
| 2614 // the prerender is swapped in if js starts playing. | 2578 // the prerender is swapped in if js starts playing. |
| 2615 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5AudioJsplay) { | 2579 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5AudioJsplay) { |
| 2616 PrerenderTestURL("files/prerender/prerender_html5_audio_jsplay.html", | 2580 PrerenderTestURL("/prerender/prerender_html5_audio_jsplay.html", |
| 2617 FINAL_STATUS_USED, | 2581 FINAL_STATUS_USED, 1); |
| 2618 1); | |
| 2619 NavigateToDestURL(); | 2582 NavigateToDestURL(); |
| 2620 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); | 2583 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
| 2621 } | 2584 } |
| 2622 | 2585 |
| 2623 // Checks that video loads are deferred on prerendering. | 2586 // Checks that video loads are deferred on prerendering. |
| 2624 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5Video) { | 2587 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5Video) { |
| 2625 PrerenderTestURL("files/prerender/prerender_html5_video.html", | 2588 PrerenderTestURL("/prerender/prerender_html5_video.html", FINAL_STATUS_USED, |
| 2626 FINAL_STATUS_USED, | |
| 2627 1); | 2589 1); |
| 2628 NavigateToDestURL(); | 2590 NavigateToDestURL(); |
| 2629 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); | 2591 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
| 2630 } | 2592 } |
| 2631 | 2593 |
| 2632 // Checks that video tags inserted by javascript are deferred and played | 2594 // Checks that video tags inserted by javascript are deferred and played |
| 2633 // correctly on swap in. | 2595 // correctly on swap in. |
| 2634 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5VideoJs) { | 2596 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5VideoJs) { |
| 2635 PrerenderTestURL("files/prerender/prerender_html5_video_script.html", | 2597 PrerenderTestURL("/prerender/prerender_html5_video_script.html", |
| 2636 FINAL_STATUS_USED, | 2598 FINAL_STATUS_USED, 1); |
| 2637 1); | |
| 2638 NavigateToDestURL(); | 2599 NavigateToDestURL(); |
| 2639 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); | 2600 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
| 2640 } | 2601 } |
| 2641 | 2602 |
| 2642 // Checks for correct network events by using a busy sleep the javascript. | 2603 // Checks for correct network events by using a busy sleep the javascript. |
| 2643 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5VideoNetwork) { | 2604 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5VideoNetwork) { |
| 2644 DisableJavascriptCalls(); | 2605 DisableJavascriptCalls(); |
| 2645 scoped_ptr<TestPrerender> prerender = | 2606 scoped_ptr<TestPrerender> prerender = PrerenderTestURL( |
| 2646 PrerenderTestURL("files/prerender/prerender_html5_video_network.html", | 2607 "/prerender/prerender_html5_video_network.html", FINAL_STATUS_USED, 1); |
| 2647 FINAL_STATUS_USED, | |
| 2648 1); | |
| 2649 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); | 2608 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); |
| 2650 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); | 2609 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); |
| 2651 NavigateToDestURL(); | 2610 NavigateToDestURL(); |
| 2652 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); | 2611 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
| 2653 } | 2612 } |
| 2654 | 2613 |
| 2655 // Checks that scripts can retrieve the correct window size while prerendering. | 2614 // Checks that scripts can retrieve the correct window size while prerendering. |
| 2656 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowSize) { | 2615 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowSize) { |
| 2657 PrerenderTestURL("files/prerender/prerender_size.html", | 2616 PrerenderTestURL("/prerender/prerender_size.html", FINAL_STATUS_USED, 1); |
| 2658 FINAL_STATUS_USED, | |
| 2659 1); | |
| 2660 NavigateToDestURL(); | 2617 NavigateToDestURL(); |
| 2661 } | 2618 } |
| 2662 | 2619 |
| 2663 // TODO(jam): http://crbug.com/350550 | 2620 // TODO(jam): http://crbug.com/350550 |
| 2664 #if !(defined(OS_CHROMEOS) && defined(ADDRESS_SANITIZER)) | 2621 #if !(defined(OS_CHROMEOS) && defined(ADDRESS_SANITIZER)) |
| 2665 | 2622 |
| 2666 // Checks that prerenderers will terminate when the RenderView crashes. | 2623 // Checks that prerenderers will terminate when the RenderView crashes. |
| 2667 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderRendererCrash) { | 2624 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderRendererCrash) { |
| 2668 scoped_ptr<TestPrerender> prerender = | 2625 scoped_ptr<TestPrerender> prerender = PrerenderTestURL( |
| 2669 PrerenderTestURL("files/prerender/prerender_page.html", | 2626 "/prerender/prerender_page.html", FINAL_STATUS_RENDERER_CRASHED, 1); |
| 2670 FINAL_STATUS_RENDERER_CRASHED, | |
| 2671 1); | |
| 2672 | 2627 |
| 2673 // Navigate to about:crash and then wait for the renderer to crash. | 2628 // Navigate to about:crash and then wait for the renderer to crash. |
| 2674 ASSERT_TRUE(prerender->contents()); | 2629 ASSERT_TRUE(prerender->contents()); |
| 2675 ASSERT_TRUE(prerender->contents()->prerender_contents()); | 2630 ASSERT_TRUE(prerender->contents()->prerender_contents()); |
| 2676 prerender->contents()->prerender_contents()->GetController(). | 2631 prerender->contents()->prerender_contents()->GetController(). |
| 2677 LoadURL( | 2632 LoadURL( |
| 2678 GURL(content::kChromeUICrashURL), | 2633 GURL(content::kChromeUICrashURL), |
| 2679 content::Referrer(), | 2634 content::Referrer(), |
| 2680 ui::PAGE_TRANSITION_TYPED, | 2635 ui::PAGE_TRANSITION_TYPED, |
| 2681 std::string()); | 2636 std::string()); |
| 2682 prerender->WaitForStop(); | 2637 prerender->WaitForStop(); |
| 2683 } | 2638 } |
| 2684 #endif | 2639 #endif |
| 2685 | 2640 |
| 2686 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2641 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2687 PrerenderPageWithFragment) { | 2642 PrerenderPageWithFragment) { |
| 2688 PrerenderTestURL("files/prerender/prerender_page.html#fragment", | 2643 PrerenderTestURL("/prerender/prerender_page.html#fragment", FINAL_STATUS_USED, |
| 2689 FINAL_STATUS_USED, | |
| 2690 1); | 2644 1); |
| 2691 | 2645 |
| 2692 ChannelDestructionWatcher channel_close_watcher; | 2646 ChannelDestructionWatcher channel_close_watcher; |
| 2693 channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> | 2647 channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> |
| 2694 GetActiveWebContents()->GetRenderProcessHost()); | 2648 GetActiveWebContents()->GetRenderProcessHost()); |
| 2695 NavigateToDestURL(); | 2649 NavigateToDestURL(); |
| 2696 channel_close_watcher.WaitForChannelClose(); | 2650 channel_close_watcher.WaitForChannelClose(); |
| 2697 | 2651 |
| 2698 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 2652 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
| 2699 } | 2653 } |
| 2700 | 2654 |
| 2701 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2655 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2702 PrerenderPageWithRedirectedFragment) { | 2656 PrerenderPageWithRedirectedFragment) { |
| 2703 PrerenderTestURL( | 2657 PrerenderTestURL( |
| 2704 CreateClientRedirect("files/prerender/prerender_page.html#fragment"), | 2658 CreateClientRedirect("/prerender/prerender_page.html#fragment"), |
| 2705 FINAL_STATUS_USED, | 2659 FINAL_STATUS_USED, 2); |
| 2706 2); | |
| 2707 | 2660 |
| 2708 ChannelDestructionWatcher channel_close_watcher; | 2661 ChannelDestructionWatcher channel_close_watcher; |
| 2709 channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> | 2662 channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> |
| 2710 GetActiveWebContents()->GetRenderProcessHost()); | 2663 GetActiveWebContents()->GetRenderProcessHost()); |
| 2711 NavigateToDestURL(); | 2664 NavigateToDestURL(); |
| 2712 channel_close_watcher.WaitForChannelClose(); | 2665 channel_close_watcher.WaitForChannelClose(); |
| 2713 | 2666 |
| 2714 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 2667 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
| 2715 } | 2668 } |
| 2716 | 2669 |
| 2717 // Checks that we do not use a prerendered page when navigating from | 2670 // Checks that we do not use a prerendered page when navigating from |
| 2718 // the main page to a fragment. | 2671 // the main page to a fragment. |
| 2719 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2672 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2720 PrerenderPageNavigateFragment) { | 2673 PrerenderPageNavigateFragment) { |
| 2721 PrerenderTestURL("files/prerender/no_prerender_page.html", | 2674 PrerenderTestURL("/prerender/no_prerender_page.html", |
| 2722 FINAL_STATUS_APP_TERMINATING, | 2675 FINAL_STATUS_APP_TERMINATING, 1); |
| 2723 1); | 2676 NavigateToURLWithDisposition("/prerender/no_prerender_page.html#fragment", |
| 2724 NavigateToURLWithDisposition( | 2677 CURRENT_TAB, false); |
| 2725 "files/prerender/no_prerender_page.html#fragment", | |
| 2726 CURRENT_TAB, false); | |
| 2727 } | 2678 } |
| 2728 | 2679 |
| 2729 // Checks that we do not use a prerendered page when we prerender a fragment | 2680 // Checks that we do not use a prerendered page when we prerender a fragment |
| 2730 // but navigate to the main page. | 2681 // but navigate to the main page. |
| 2731 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2682 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2732 PrerenderFragmentNavigatePage) { | 2683 PrerenderFragmentNavigatePage) { |
| 2733 PrerenderTestURL("files/prerender/no_prerender_page.html#fragment", | 2684 PrerenderTestURL("/prerender/no_prerender_page.html#fragment", |
| 2734 FINAL_STATUS_APP_TERMINATING, | 2685 FINAL_STATUS_APP_TERMINATING, 1); |
| 2735 1); | 2686 NavigateToURLWithDisposition("/prerender/no_prerender_page.html", CURRENT_TAB, |
| 2736 NavigateToURLWithDisposition( | 2687 false); |
| 2737 "files/prerender/no_prerender_page.html", | |
| 2738 CURRENT_TAB, false); | |
| 2739 } | 2688 } |
| 2740 | 2689 |
| 2741 // Checks that we do not use a prerendered page when we prerender a fragment | 2690 // Checks that we do not use a prerendered page when we prerender a fragment |
| 2742 // but navigate to a different fragment on the same page. | 2691 // but navigate to a different fragment on the same page. |
| 2743 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2692 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2744 PrerenderFragmentNavigateFragment) { | 2693 PrerenderFragmentNavigateFragment) { |
| 2745 PrerenderTestURL("files/prerender/no_prerender_page.html#other_fragment", | 2694 PrerenderTestURL("/prerender/no_prerender_page.html#other_fragment", |
| 2746 FINAL_STATUS_APP_TERMINATING, | 2695 FINAL_STATUS_APP_TERMINATING, 1); |
| 2747 1); | 2696 NavigateToURLWithDisposition("/prerender/no_prerender_page.html#fragment", |
| 2748 NavigateToURLWithDisposition( | 2697 CURRENT_TAB, false); |
| 2749 "files/prerender/no_prerender_page.html#fragment", | |
| 2750 CURRENT_TAB, false); | |
| 2751 } | 2698 } |
| 2752 | 2699 |
| 2753 // Checks that we do not use a prerendered page when the page uses a client | 2700 // Checks that we do not use a prerendered page when the page uses a client |
| 2754 // redirect to refresh from a fragment on the same page. | 2701 // redirect to refresh from a fragment on the same page. |
| 2755 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2702 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2756 PrerenderClientRedirectFromFragment) { | 2703 PrerenderClientRedirectFromFragment) { |
| 2757 PrerenderTestURL( | 2704 PrerenderTestURL( |
| 2758 CreateClientRedirect("files/prerender/no_prerender_page.html#fragment"), | 2705 CreateClientRedirect("/prerender/no_prerender_page.html#fragment"), |
| 2759 FINAL_STATUS_APP_TERMINATING, | 2706 FINAL_STATUS_APP_TERMINATING, 2); |
| 2760 2); | 2707 NavigateToURLWithDisposition("/prerender/no_prerender_page.html", CURRENT_TAB, |
| 2761 NavigateToURLWithDisposition( | 2708 false); |
| 2762 "files/prerender/no_prerender_page.html", | |
| 2763 CURRENT_TAB, false); | |
| 2764 } | 2709 } |
| 2765 | 2710 |
| 2766 // Checks that we do not use a prerendered page when the page uses a client | 2711 // Checks that we do not use a prerendered page when the page uses a client |
| 2767 // redirect to refresh to a fragment on the same page. | 2712 // redirect to refresh to a fragment on the same page. |
| 2768 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2713 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2769 PrerenderClientRedirectToFragment) { | 2714 PrerenderClientRedirectToFragment) { |
| 2770 PrerenderTestURL( | 2715 PrerenderTestURL(CreateClientRedirect("/prerender/no_prerender_page.html"), |
| 2771 CreateClientRedirect("files/prerender/no_prerender_page.html"), | 2716 FINAL_STATUS_APP_TERMINATING, 2); |
| 2772 FINAL_STATUS_APP_TERMINATING, | 2717 NavigateToURLWithDisposition("/prerender/no_prerender_page.html#fragment", |
| 2773 2); | 2718 CURRENT_TAB, false); |
| 2774 NavigateToURLWithDisposition( | |
| 2775 "files/prerender/no_prerender_page.html#fragment", | |
| 2776 CURRENT_TAB, false); | |
| 2777 } | 2719 } |
| 2778 | 2720 |
| 2779 // Checks that we correctly use a prerendered page when the page uses JS to set | 2721 // Checks that we correctly use a prerendered page when the page uses JS to set |
| 2780 // the window.location.hash to a fragment on the same page. | 2722 // the window.location.hash to a fragment on the same page. |
| 2781 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2723 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2782 PrerenderPageChangeFragmentLocationHash) { | 2724 PrerenderPageChangeFragmentLocationHash) { |
| 2783 PrerenderTestURL("files/prerender/prerender_fragment_location_hash.html", | 2725 PrerenderTestURL("/prerender/prerender_fragment_location_hash.html", |
| 2784 FINAL_STATUS_USED, | 2726 FINAL_STATUS_USED, 1); |
| 2785 1); | 2727 NavigateToURL("/prerender/prerender_fragment_location_hash.html"); |
| 2786 NavigateToURL("files/prerender/prerender_fragment_location_hash.html"); | |
| 2787 } | 2728 } |
| 2788 | 2729 |
| 2789 // Checks that prerendering a PNG works correctly. | 2730 // Checks that prerendering a PNG works correctly. |
| 2790 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderImagePng) { | 2731 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderImagePng) { |
| 2791 DisableJavascriptCalls(); | 2732 DisableJavascriptCalls(); |
| 2792 PrerenderTestURL("files/prerender/image.png", FINAL_STATUS_USED, 1); | 2733 PrerenderTestURL("/prerender/image.png", FINAL_STATUS_USED, 1); |
| 2793 NavigateToDestURL(); | 2734 NavigateToDestURL(); |
| 2794 } | 2735 } |
| 2795 | 2736 |
| 2796 // Checks that prerendering a JPG works correctly. | 2737 // Checks that prerendering a JPG works correctly. |
| 2797 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderImageJpeg) { | 2738 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderImageJpeg) { |
| 2798 DisableJavascriptCalls(); | 2739 DisableJavascriptCalls(); |
| 2799 PrerenderTestURL("files/prerender/image.jpeg", FINAL_STATUS_USED, 1); | 2740 PrerenderTestURL("/prerender/image.jpeg", FINAL_STATUS_USED, 1); |
| 2800 NavigateToDestURL(); | 2741 NavigateToDestURL(); |
| 2801 } | 2742 } |
| 2802 | 2743 |
| 2803 // Checks that a prerender of a CRX will result in a cancellation due to | 2744 // Checks that a prerender of a CRX will result in a cancellation due to |
| 2804 // download. | 2745 // download. |
| 2805 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCrx) { | 2746 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCrx) { |
| 2806 PrerenderTestURL("files/prerender/extension.crx", FINAL_STATUS_DOWNLOAD, 0); | 2747 PrerenderTestURL("/prerender/extension.crx", FINAL_STATUS_DOWNLOAD, 0); |
| 2807 } | 2748 } |
| 2808 | 2749 |
| 2809 // Checks that xhr GET requests allow prerenders. | 2750 // Checks that xhr GET requests allow prerenders. |
| 2810 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrGet) { | 2751 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrGet) { |
| 2811 PrerenderTestURL("files/prerender/prerender_xhr_get.html", | 2752 PrerenderTestURL("/prerender/prerender_xhr_get.html", FINAL_STATUS_USED, 1); |
| 2812 FINAL_STATUS_USED, | |
| 2813 1); | |
| 2814 NavigateToDestURL(); | 2753 NavigateToDestURL(); |
| 2815 } | 2754 } |
| 2816 | 2755 |
| 2817 // Checks that xhr HEAD requests allow prerenders. | 2756 // Checks that xhr HEAD requests allow prerenders. |
| 2818 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrHead) { | 2757 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrHead) { |
| 2819 PrerenderTestURL("files/prerender/prerender_xhr_head.html", | 2758 PrerenderTestURL("/prerender/prerender_xhr_head.html", FINAL_STATUS_USED, 1); |
| 2820 FINAL_STATUS_USED, | |
| 2821 1); | |
| 2822 NavigateToDestURL(); | 2759 NavigateToDestURL(); |
| 2823 } | 2760 } |
| 2824 | 2761 |
| 2825 // Checks that xhr OPTIONS requests allow prerenders. | 2762 // Checks that xhr OPTIONS requests allow prerenders. |
| 2826 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrOptions) { | 2763 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrOptions) { |
| 2827 PrerenderTestURL("files/prerender/prerender_xhr_options.html", | 2764 PrerenderTestURL("/prerender/prerender_xhr_options.html", FINAL_STATUS_USED, |
| 2828 FINAL_STATUS_USED, | |
| 2829 1); | 2765 1); |
| 2830 NavigateToDestURL(); | 2766 NavigateToDestURL(); |
| 2831 } | 2767 } |
| 2832 | 2768 |
| 2833 // Checks that xhr TRACE requests allow prerenders. | 2769 // Checks that xhr TRACE requests allow prerenders. |
| 2834 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrTrace) { | 2770 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrTrace) { |
| 2835 PrerenderTestURL("files/prerender/prerender_xhr_trace.html", | 2771 PrerenderTestURL("/prerender/prerender_xhr_trace.html", FINAL_STATUS_USED, 1); |
| 2836 FINAL_STATUS_USED, | |
| 2837 1); | |
| 2838 NavigateToDestURL(); | 2772 NavigateToDestURL(); |
| 2839 } | 2773 } |
| 2840 | 2774 |
| 2841 // Checks that xhr POST requests allow prerenders. | 2775 // Checks that xhr POST requests allow prerenders. |
| 2842 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrPost) { | 2776 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrPost) { |
| 2843 PrerenderTestURL("files/prerender/prerender_xhr_post.html", | 2777 PrerenderTestURL("/prerender/prerender_xhr_post.html", FINAL_STATUS_USED, 1); |
| 2844 FINAL_STATUS_USED, | |
| 2845 1); | |
| 2846 NavigateToDestURL(); | 2778 NavigateToDestURL(); |
| 2847 } | 2779 } |
| 2848 | 2780 |
| 2849 // Checks that xhr PUT cancels prerenders. | 2781 // Checks that xhr PUT cancels prerenders. |
| 2850 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrPut) { | 2782 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrPut) { |
| 2851 PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 2783 PrerenderTestURL("/prerender/prerender_xhr_put.html", |
| 2852 FINAL_STATUS_INVALID_HTTP_METHOD, | 2784 FINAL_STATUS_INVALID_HTTP_METHOD, 1); |
| 2853 1); | |
| 2854 } | 2785 } |
| 2855 | 2786 |
| 2856 // Checks that xhr DELETE cancels prerenders. | 2787 // Checks that xhr DELETE cancels prerenders. |
| 2857 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrDelete) { | 2788 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderXhrDelete) { |
| 2858 PrerenderTestURL("files/prerender/prerender_xhr_delete.html", | 2789 PrerenderTestURL("/prerender/prerender_xhr_delete.html", |
| 2859 FINAL_STATUS_INVALID_HTTP_METHOD, | 2790 FINAL_STATUS_INVALID_HTTP_METHOD, 1); |
| 2860 1); | |
| 2861 } | 2791 } |
| 2862 | 2792 |
| 2863 // Checks that a top-level page which would trigger an SSL error is canceled. | 2793 // Checks that a top-level page which would trigger an SSL error is canceled. |
| 2864 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLErrorTopLevel) { | 2794 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLErrorTopLevel) { |
| 2865 net::SpawnedTestServer::SSLOptions ssl_options; | 2795 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 2866 ssl_options.server_certificate = | 2796 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME); |
| 2867 net::SpawnedTestServer::SSLOptions::CERT_MISMATCHED_NAME; | 2797 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); |
| 2868 net::SpawnedTestServer https_server( | |
| 2869 net::SpawnedTestServer::TYPE_HTTPS, ssl_options, | |
| 2870 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); | |
| 2871 ASSERT_TRUE(https_server.Start()); | 2798 ASSERT_TRUE(https_server.Start()); |
| 2872 GURL https_url = https_server.GetURL("files/prerender/prerender_page.html"); | 2799 GURL https_url = https_server.GetURL("/prerender/prerender_page.html"); |
| 2873 PrerenderTestURL(https_url, | 2800 PrerenderTestURL(https_url, |
| 2874 FINAL_STATUS_SSL_ERROR, | 2801 FINAL_STATUS_SSL_ERROR, |
| 2875 0); | 2802 0); |
| 2876 } | 2803 } |
| 2877 | 2804 |
| 2878 // Checks that an SSL error that comes from a subresource does not cancel | 2805 // Checks that an SSL error that comes from a subresource does not cancel |
| 2879 // the page. Non-main-frame requests are simply cancelled if they run into | 2806 // the page. Non-main-frame requests are simply cancelled if they run into |
| 2880 // an SSL problem. | 2807 // an SSL problem. |
| 2881 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLErrorSubresource) { | 2808 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLErrorSubresource) { |
| 2882 net::SpawnedTestServer::SSLOptions ssl_options; | 2809 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 2883 ssl_options.server_certificate = | 2810 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME); |
| 2884 net::SpawnedTestServer::SSLOptions::CERT_MISMATCHED_NAME; | 2811 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); |
| 2885 net::SpawnedTestServer https_server( | |
| 2886 net::SpawnedTestServer::TYPE_HTTPS, ssl_options, | |
| 2887 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); | |
| 2888 ASSERT_TRUE(https_server.Start()); | 2812 ASSERT_TRUE(https_server.Start()); |
| 2889 GURL https_url = https_server.GetURL("files/prerender/image.jpeg"); | 2813 GURL https_url = https_server.GetURL("/prerender/image.jpeg"); |
| 2890 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 2814 base::StringPairs replacement_text; |
| 2891 replacement_text.push_back( | 2815 replacement_text.push_back( |
| 2892 std::make_pair("REPLACE_WITH_IMAGE_URL", https_url.spec())); | 2816 std::make_pair("REPLACE_WITH_IMAGE_URL", https_url.spec())); |
| 2893 std::string replacement_path; | 2817 std::string replacement_path; |
| 2894 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 2818 net::test_server::GetFilePathWithReplacements( |
| 2895 "files/prerender/prerender_with_image.html", | 2819 "/prerender/prerender_with_image.html", replacement_text, |
| 2896 replacement_text, | 2820 &replacement_path); |
| 2897 &replacement_path)); | |
| 2898 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); | 2821 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); |
| 2899 NavigateToDestURL(); | 2822 NavigateToDestURL(); |
| 2900 } | 2823 } |
| 2901 | 2824 |
| 2902 // Checks that an SSL error that comes from an iframe does not cancel | 2825 // Checks that an SSL error that comes from an iframe does not cancel |
| 2903 // the page. Non-main-frame requests are simply cancelled if they run into | 2826 // the page. Non-main-frame requests are simply cancelled if they run into |
| 2904 // an SSL problem. | 2827 // an SSL problem. |
| 2905 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLErrorIframe) { | 2828 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLErrorIframe) { |
| 2906 net::SpawnedTestServer::SSLOptions ssl_options; | 2829 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 2907 ssl_options.server_certificate = | 2830 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME); |
| 2908 net::SpawnedTestServer::SSLOptions::CERT_MISMATCHED_NAME; | 2831 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); |
| 2909 net::SpawnedTestServer https_server( | |
| 2910 net::SpawnedTestServer::TYPE_HTTPS, ssl_options, | |
| 2911 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); | |
| 2912 ASSERT_TRUE(https_server.Start()); | 2832 ASSERT_TRUE(https_server.Start()); |
| 2913 GURL https_url = https_server.GetURL( | 2833 GURL https_url = |
| 2914 "files/prerender/prerender_embedded_content.html"); | 2834 https_server.GetURL("/prerender/prerender_embedded_content.html"); |
| 2915 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 2835 base::StringPairs replacement_text; |
| 2916 replacement_text.push_back( | 2836 replacement_text.push_back( |
| 2917 std::make_pair("REPLACE_WITH_URL", https_url.spec())); | 2837 std::make_pair("REPLACE_WITH_URL", https_url.spec())); |
| 2918 std::string replacement_path; | 2838 std::string replacement_path; |
| 2919 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 2839 net::test_server::GetFilePathWithReplacements( |
| 2920 "files/prerender/prerender_with_iframe.html", | 2840 "/prerender/prerender_with_iframe.html", replacement_text, |
| 2921 replacement_text, | 2841 &replacement_path); |
| 2922 &replacement_path)); | |
| 2923 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); | 2842 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); |
| 2924 NavigateToDestURL(); | 2843 NavigateToDestURL(); |
| 2925 } | 2844 } |
| 2926 | 2845 |
| 2927 // Checks that we cancel correctly when window.print() is called. | 2846 // Checks that we cancel correctly when window.print() is called. |
| 2928 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPrint) { | 2847 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPrint) { |
| 2929 DisableLoadEventCheck(); | 2848 DisableLoadEventCheck(); |
| 2930 PrerenderTestURL("files/prerender/prerender_print.html", | 2849 PrerenderTestURL("/prerender/prerender_print.html", FINAL_STATUS_WINDOW_PRINT, |
| 2931 FINAL_STATUS_WINDOW_PRINT, | |
| 2932 0); | 2850 0); |
| 2933 } | 2851 } |
| 2934 | 2852 |
| 2935 // Checks that prerenders do not get swapped into target pages that have opened | 2853 // Checks that prerenders do not get swapped into target pages that have opened |
| 2936 // popups; the BrowsingInstance is not empty. | 2854 // popups; the BrowsingInstance is not empty. |
| 2937 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderTargetHasPopup) { | 2855 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderTargetHasPopup) { |
| 2938 PrerenderTestURL("files/prerender/prerender_page.html", | 2856 PrerenderTestURL("/prerender/prerender_page.html", |
| 2939 FINAL_STATUS_NON_EMPTY_BROWSING_INSTANCE, | 2857 FINAL_STATUS_NON_EMPTY_BROWSING_INSTANCE, 1); |
| 2940 1); | |
| 2941 OpenURLViaWindowOpen(GURL(url::kAboutBlankURL)); | 2858 OpenURLViaWindowOpen(GURL(url::kAboutBlankURL)); |
| 2942 | 2859 |
| 2943 // Switch back to the current tab and attempt to swap it in. | 2860 // Switch back to the current tab and attempt to swap it in. |
| 2944 current_browser()->tab_strip_model()->ActivateTabAt(0, true); | 2861 current_browser()->tab_strip_model()->ActivateTabAt(0, true); |
| 2945 NavigateToDestURLWithDisposition(CURRENT_TAB, false); | 2862 NavigateToDestURLWithDisposition(CURRENT_TAB, false); |
| 2946 } | 2863 } |
| 2947 | 2864 |
| 2948 class TestClientCertStore : public net::ClientCertStore { | 2865 class TestClientCertStore : public net::ClientCertStore { |
| 2949 public: | 2866 public: |
| 2950 TestClientCertStore() {} | 2867 TestClientCertStore() {} |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2966 } | 2883 } |
| 2967 | 2884 |
| 2968 // Checks that a top-level page which would normally request an SSL client | 2885 // Checks that a top-level page which would normally request an SSL client |
| 2969 // certificate will never be seen since it's an https top-level resource. | 2886 // certificate will never be seen since it's an https top-level resource. |
| 2970 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2887 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2971 PrerenderSSLClientCertTopLevel) { | 2888 PrerenderSSLClientCertTopLevel) { |
| 2972 ProfileIOData::FromResourceContext( | 2889 ProfileIOData::FromResourceContext( |
| 2973 current_browser()->profile()->GetResourceContext())-> | 2890 current_browser()->profile()->GetResourceContext())-> |
| 2974 set_client_cert_store_factory_for_testing( | 2891 set_client_cert_store_factory_for_testing( |
| 2975 base::Bind(&CreateCertStore)); | 2892 base::Bind(&CreateCertStore)); |
| 2976 net::SpawnedTestServer::SSLOptions ssl_options; | 2893 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 2977 ssl_options.request_client_certificate = true; | 2894 net::SSLServerConfig ssl_config; |
| 2978 net::SpawnedTestServer https_server( | 2895 ssl_config.require_client_cert = true; |
| 2979 net::SpawnedTestServer::TYPE_HTTPS, ssl_options, | 2896 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_OK, ssl_config); |
| 2980 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); | 2897 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); |
| 2981 ASSERT_TRUE(https_server.Start()); | 2898 ASSERT_TRUE(https_server.Start()); |
| 2982 GURL https_url = https_server.GetURL("files/prerender/prerender_page.html"); | 2899 GURL https_url = https_server.GetURL("/prerender/prerender_page.html"); |
| 2983 PrerenderTestURL(https_url, FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, 0); | 2900 PrerenderTestURL(https_url, FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, 0); |
| 2984 } | 2901 } |
| 2985 | 2902 |
| 2986 // Checks that an SSL Client Certificate request that originates from a | 2903 // Checks that an SSL Client Certificate request that originates from a |
| 2987 // subresource will cancel the prerendered page. | 2904 // subresource will cancel the prerendered page. |
| 2988 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2905 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2989 PrerenderSSLClientCertSubresource) { | 2906 PrerenderSSLClientCertSubresource) { |
| 2990 ProfileIOData::FromResourceContext( | 2907 ProfileIOData::FromResourceContext( |
| 2991 current_browser()->profile()->GetResourceContext())-> | 2908 current_browser()->profile()->GetResourceContext())-> |
| 2992 set_client_cert_store_factory_for_testing( | 2909 set_client_cert_store_factory_for_testing( |
| 2993 base::Bind(&CreateCertStore)); | 2910 base::Bind(&CreateCertStore)); |
| 2994 net::SpawnedTestServer::SSLOptions ssl_options; | 2911 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 2995 ssl_options.request_client_certificate = true; | 2912 net::SSLServerConfig ssl_config; |
| 2996 net::SpawnedTestServer https_server( | 2913 ssl_config.require_client_cert = true; |
| 2997 net::SpawnedTestServer::TYPE_HTTPS, ssl_options, | 2914 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_OK, ssl_config); |
| 2998 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); | 2915 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); |
| 2999 ASSERT_TRUE(https_server.Start()); | 2916 ASSERT_TRUE(https_server.Start()); |
| 3000 GURL https_url = https_server.GetURL("files/prerender/image.jpeg"); | 2917 GURL https_url = https_server.GetURL("/prerender/image.jpeg"); |
| 3001 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 2918 base::StringPairs replacement_text; |
| 3002 replacement_text.push_back( | 2919 replacement_text.push_back( |
| 3003 std::make_pair("REPLACE_WITH_IMAGE_URL", https_url.spec())); | 2920 std::make_pair("REPLACE_WITH_IMAGE_URL", https_url.spec())); |
| 3004 std::string replacement_path; | 2921 std::string replacement_path; |
| 3005 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 2922 net::test_server::GetFilePathWithReplacements( |
| 3006 "files/prerender/prerender_with_image.html", | 2923 "/prerender/prerender_with_image.html", replacement_text, |
| 3007 replacement_text, | 2924 &replacement_path); |
| 3008 &replacement_path)); | |
| 3009 PrerenderTestURL(replacement_path, | 2925 PrerenderTestURL(replacement_path, |
| 3010 FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, | 2926 FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, |
| 3011 0); | 2927 0); |
| 3012 } | 2928 } |
| 3013 | 2929 |
| 3014 // Checks that an SSL Client Certificate request that originates from an | 2930 // Checks that an SSL Client Certificate request that originates from an |
| 3015 // iframe will cancel the prerendered page. | 2931 // iframe will cancel the prerendered page. |
| 3016 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLClientCertIframe) { | 2932 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLClientCertIframe) { |
| 3017 ProfileIOData::FromResourceContext( | 2933 ProfileIOData::FromResourceContext( |
| 3018 current_browser()->profile()->GetResourceContext())-> | 2934 current_browser()->profile()->GetResourceContext())-> |
| 3019 set_client_cert_store_factory_for_testing( | 2935 set_client_cert_store_factory_for_testing( |
| 3020 base::Bind(&CreateCertStore)); | 2936 base::Bind(&CreateCertStore)); |
| 3021 net::SpawnedTestServer::SSLOptions ssl_options; | 2937 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 3022 ssl_options.request_client_certificate = true; | 2938 net::SSLServerConfig ssl_config; |
| 3023 net::SpawnedTestServer https_server( | 2939 ssl_config.require_client_cert = true; |
| 3024 net::SpawnedTestServer::TYPE_HTTPS, ssl_options, | 2940 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_OK, ssl_config); |
| 3025 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); | 2941 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); |
| 3026 ASSERT_TRUE(https_server.Start()); | 2942 ASSERT_TRUE(https_server.Start()); |
| 3027 GURL https_url = https_server.GetURL( | 2943 GURL https_url = |
| 3028 "files/prerender/prerender_embedded_content.html"); | 2944 https_server.GetURL("/prerender/prerender_embedded_content.html"); |
| 3029 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 2945 base::StringPairs replacement_text; |
| 3030 replacement_text.push_back( | 2946 replacement_text.push_back( |
| 3031 std::make_pair("REPLACE_WITH_URL", https_url.spec())); | 2947 std::make_pair("REPLACE_WITH_URL", https_url.spec())); |
| 3032 std::string replacement_path; | 2948 std::string replacement_path; |
| 3033 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 2949 net::test_server::GetFilePathWithReplacements( |
| 3034 "files/prerender/prerender_with_iframe.html", | 2950 "/prerender/prerender_with_iframe.html", replacement_text, |
| 3035 replacement_text, | 2951 &replacement_path); |
| 3036 &replacement_path)); | |
| 3037 PrerenderTestURL(replacement_path, | 2952 PrerenderTestURL(replacement_path, |
| 3038 FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, | 2953 FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, |
| 3039 0); | 2954 0); |
| 3040 } | 2955 } |
| 3041 | 2956 |
| 3042 #if defined(FULL_SAFE_BROWSING) | 2957 #if defined(FULL_SAFE_BROWSING) |
| 3043 // Ensures that we do not prerender pages with a safe browsing | 2958 // Ensures that we do not prerender pages with a safe browsing |
| 3044 // interstitial. | 2959 // interstitial. |
| 3045 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingTopLevel) { | 2960 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingTopLevel) { |
| 3046 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); | 2961 GURL url = embedded_test_server()->GetURL("/prerender/prerender_page.html"); |
| 3047 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( | 2962 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( |
| 3048 url, SB_THREAT_TYPE_URL_MALWARE); | 2963 url, SB_THREAT_TYPE_URL_MALWARE); |
| 3049 PrerenderTestURL("files/prerender/prerender_page.html", | 2964 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_SAFE_BROWSING, |
| 3050 FINAL_STATUS_SAFE_BROWSING, 0); | 2965 0); |
| 3051 } | 2966 } |
| 3052 | 2967 |
| 3053 // Ensures that server redirects to a malware page will cancel prerenders. | 2968 // Ensures that server redirects to a malware page will cancel prerenders. |
| 3054 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2969 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3055 PrerenderSafeBrowsingServerRedirect) { | 2970 PrerenderSafeBrowsingServerRedirect) { |
| 3056 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); | 2971 GURL url = embedded_test_server()->GetURL("/prerender/prerender_page.html"); |
| 3057 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( | 2972 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( |
| 3058 url, SB_THREAT_TYPE_URL_MALWARE); | 2973 url, SB_THREAT_TYPE_URL_MALWARE); |
| 3059 PrerenderTestURL(CreateServerRedirect("files/prerender/prerender_page.html"), | 2974 PrerenderTestURL(CreateServerRedirect("/prerender/prerender_page.html"), |
| 3060 FINAL_STATUS_SAFE_BROWSING, | 2975 FINAL_STATUS_SAFE_BROWSING, 0); |
| 3061 0); | |
| 3062 } | 2976 } |
| 3063 | 2977 |
| 3064 // Ensures that client redirects to a malware page will cancel prerenders. | 2978 // Ensures that client redirects to a malware page will cancel prerenders. |
| 3065 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2979 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3066 PrerenderSafeBrowsingClientRedirect) { | 2980 PrerenderSafeBrowsingClientRedirect) { |
| 3067 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); | 2981 GURL url = embedded_test_server()->GetURL("/prerender/prerender_page.html"); |
| 3068 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( | 2982 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( |
| 3069 url, SB_THREAT_TYPE_URL_MALWARE); | 2983 url, SB_THREAT_TYPE_URL_MALWARE); |
| 3070 PrerenderTestURL(CreateClientRedirect("files/prerender/prerender_page.html"), | 2984 PrerenderTestURL(CreateClientRedirect("/prerender/prerender_page.html"), |
| 3071 FINAL_STATUS_SAFE_BROWSING, | 2985 FINAL_STATUS_SAFE_BROWSING, 1); |
| 3072 1); | |
| 3073 } | 2986 } |
| 3074 | 2987 |
| 3075 // Ensures that we do not prerender pages which have a malware subresource. | 2988 // Ensures that we do not prerender pages which have a malware subresource. |
| 3076 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingSubresource) { | 2989 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingSubresource) { |
| 3077 GURL image_url = test_server()->GetURL("files/prerender/image.jpeg"); | 2990 GURL image_url = embedded_test_server()->GetURL("/prerender/image.jpeg"); |
| 3078 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( | 2991 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( |
| 3079 image_url, SB_THREAT_TYPE_URL_MALWARE); | 2992 image_url, SB_THREAT_TYPE_URL_MALWARE); |
| 3080 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 2993 base::StringPairs replacement_text; |
| 3081 replacement_text.push_back( | 2994 replacement_text.push_back( |
| 3082 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); | 2995 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); |
| 3083 std::string replacement_path; | 2996 std::string replacement_path; |
| 3084 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 2997 net::test_server::GetFilePathWithReplacements( |
| 3085 "files/prerender/prerender_with_image.html", | 2998 "/prerender/prerender_with_image.html", replacement_text, |
| 3086 replacement_text, | 2999 &replacement_path); |
| 3087 &replacement_path)); | |
| 3088 PrerenderTestURL(replacement_path, | 3000 PrerenderTestURL(replacement_path, |
| 3089 FINAL_STATUS_SAFE_BROWSING, | 3001 FINAL_STATUS_SAFE_BROWSING, |
| 3090 0); | 3002 0); |
| 3091 } | 3003 } |
| 3092 | 3004 |
| 3093 // Ensures that we do not prerender pages which have a malware iframe. | 3005 // Ensures that we do not prerender pages which have a malware iframe. |
| 3094 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingIframe) { | 3006 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingIframe) { |
| 3095 GURL iframe_url = test_server()->GetURL( | 3007 GURL iframe_url = embedded_test_server()->GetURL( |
| 3096 "files/prerender/prerender_embedded_content.html"); | 3008 "/prerender/prerender_embedded_content.html"); |
| 3097 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( | 3009 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( |
| 3098 iframe_url, SB_THREAT_TYPE_URL_MALWARE); | 3010 iframe_url, SB_THREAT_TYPE_URL_MALWARE); |
| 3099 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 3011 base::StringPairs replacement_text; |
| 3100 replacement_text.push_back( | 3012 replacement_text.push_back( |
| 3101 std::make_pair("REPLACE_WITH_URL", iframe_url.spec())); | 3013 std::make_pair("REPLACE_WITH_URL", iframe_url.spec())); |
| 3102 std::string replacement_path; | 3014 std::string replacement_path; |
| 3103 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 3015 net::test_server::GetFilePathWithReplacements( |
| 3104 "files/prerender/prerender_with_iframe.html", | 3016 "/prerender/prerender_with_iframe.html", replacement_text, |
| 3105 replacement_text, | 3017 &replacement_path); |
| 3106 &replacement_path)); | |
| 3107 PrerenderTestURL(replacement_path, | 3018 PrerenderTestURL(replacement_path, |
| 3108 FINAL_STATUS_SAFE_BROWSING, | 3019 FINAL_STATUS_SAFE_BROWSING, |
| 3109 0); | 3020 0); |
| 3110 } | 3021 } |
| 3111 | 3022 |
| 3112 #endif | 3023 #endif |
| 3113 | 3024 |
| 3114 // Checks that a local storage read will not cause prerender to fail. | 3025 // Checks that a local storage read will not cause prerender to fail. |
| 3115 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderLocalStorageRead) { | 3026 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderLocalStorageRead) { |
| 3116 PrerenderTestURL("files/prerender/prerender_localstorage_read.html", | 3027 PrerenderTestURL("/prerender/prerender_localstorage_read.html", |
| 3117 FINAL_STATUS_USED, | 3028 FINAL_STATUS_USED, 1); |
| 3118 1); | |
| 3119 NavigateToDestURL(); | 3029 NavigateToDestURL(); |
| 3120 } | 3030 } |
| 3121 | 3031 |
| 3122 // Checks that a local storage write will not cause prerender to fail. | 3032 // Checks that a local storage write will not cause prerender to fail. |
| 3123 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderLocalStorageWrite) { | 3033 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderLocalStorageWrite) { |
| 3124 PrerenderTestURL("files/prerender/prerender_localstorage_write.html", | 3034 PrerenderTestURL("/prerender/prerender_localstorage_write.html", |
| 3125 FINAL_STATUS_USED, | 3035 FINAL_STATUS_USED, 1); |
| 3126 1); | |
| 3127 NavigateToDestURL(); | 3036 NavigateToDestURL(); |
| 3128 } | 3037 } |
| 3129 | 3038 |
| 3130 // Checks that the favicon is properly loaded on prerender. | 3039 // Checks that the favicon is properly loaded on prerender. |
| 3131 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderFavicon) { | 3040 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderFavicon) { |
| 3132 scoped_ptr<TestPrerender> prerender = | 3041 scoped_ptr<TestPrerender> prerender = PrerenderTestURL( |
| 3133 PrerenderTestURL("files/prerender/prerender_favicon.html", | 3042 "/prerender/prerender_favicon.html", FINAL_STATUS_USED, 1); |
| 3134 FINAL_STATUS_USED, | |
| 3135 1); | |
| 3136 NavigateToDestURL(); | 3043 NavigateToDestURL(); |
| 3137 | 3044 |
| 3138 favicon::FaviconDriver* favicon_driver = | 3045 favicon::FaviconDriver* favicon_driver = |
| 3139 favicon::ContentFaviconDriver::FromWebContents(GetActiveWebContents()); | 3046 favicon::ContentFaviconDriver::FromWebContents(GetActiveWebContents()); |
| 3140 if (!favicon_driver->FaviconIsValid()) { | 3047 if (!favicon_driver->FaviconIsValid()) { |
| 3141 // If the favicon has not been set yet, wait for it to be. | 3048 // If the favicon has not been set yet, wait for it to be. |
| 3142 FaviconUpdateWatcher favicon_update_watcher(GetActiveWebContents()); | 3049 FaviconUpdateWatcher favicon_update_watcher(GetActiveWebContents()); |
| 3143 favicon_update_watcher.Wait(); | 3050 favicon_update_watcher.Wait(); |
| 3144 } | 3051 } |
| 3145 EXPECT_TRUE(favicon_driver->FaviconIsValid()); | 3052 EXPECT_TRUE(favicon_driver->FaviconIsValid()); |
| 3146 } | 3053 } |
| 3147 | 3054 |
| 3148 // Checks that when a prerendered page is swapped in to a referring page, the | 3055 // Checks that when a prerendered page is swapped in to a referring page, the |
| 3149 // unload handlers on the referring page are executed. | 3056 // unload handlers on the referring page are executed. |
| 3150 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderUnload) { | 3057 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderUnload) { |
| 3151 // Matches URL in prerender_loader_with_unload.html. | 3058 // Matches URL in prerender_loader_with_unload.html. |
| 3152 const GURL unload_url("http://unload-url.test"); | 3059 const GURL unload_url("http://unload-url.test"); |
| 3153 base::FilePath empty_file = ui_test_utils::GetTestFilePath( | 3060 base::FilePath empty_file = ui_test_utils::GetTestFilePath( |
| 3154 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); | 3061 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); |
| 3155 RequestCounter unload_counter; | 3062 RequestCounter unload_counter; |
| 3156 BrowserThread::PostTask( | 3063 BrowserThread::PostTask( |
| 3157 BrowserThread::IO, FROM_HERE, | 3064 BrowserThread::IO, FROM_HERE, |
| 3158 base::Bind(&CreateCountingInterceptorOnIO, | 3065 base::Bind(&CreateCountingInterceptorOnIO, |
| 3159 unload_url, empty_file, unload_counter.AsWeakPtr())); | 3066 unload_url, empty_file, unload_counter.AsWeakPtr())); |
| 3160 | 3067 |
| 3161 set_loader_path("files/prerender/prerender_loader_with_unload.html"); | 3068 set_loader_path("/prerender/prerender_loader_with_unload.html"); |
| 3162 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 3069 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 3163 NavigateToDestURL(); | 3070 NavigateToDestURL(); |
| 3164 unload_counter.WaitForCount(1); | 3071 unload_counter.WaitForCount(1); |
| 3165 } | 3072 } |
| 3166 | 3073 |
| 3167 // Checks that a hanging unload on the referring page of a prerender swap does | 3074 // Checks that a hanging unload on the referring page of a prerender swap does |
| 3168 // not crash the browser on exit. | 3075 // not crash the browser on exit. |
| 3169 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHangingUnload) { | 3076 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHangingUnload) { |
| 3170 // Matches URL in prerender_loader_with_unload.html. | 3077 // Matches URL in prerender_loader_with_unload.html. |
| 3171 const GURL hang_url("http://unload-url.test"); | 3078 const GURL hang_url("http://unload-url.test"); |
| 3172 base::FilePath empty_file = ui_test_utils::GetTestFilePath( | 3079 base::FilePath empty_file = ui_test_utils::GetTestFilePath( |
| 3173 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); | 3080 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); |
| 3174 BrowserThread::PostTask( | 3081 BrowserThread::PostTask( |
| 3175 BrowserThread::IO, FROM_HERE, | 3082 BrowserThread::IO, FROM_HERE, |
| 3176 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, | 3083 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, |
| 3177 hang_url, empty_file, | 3084 hang_url, empty_file, |
| 3178 base::Closure())); | 3085 base::Closure())); |
| 3179 | 3086 |
| 3180 set_loader_path("files/prerender/prerender_loader_with_unload.html"); | 3087 set_loader_path("/prerender/prerender_loader_with_unload.html"); |
| 3181 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 3088 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 3182 NavigateToDestURL(); | 3089 NavigateToDestURL(); |
| 3183 } | 3090 } |
| 3184 | 3091 |
| 3185 | 3092 |
| 3186 // Checks that when the history is cleared, prerendering is cancelled and | 3093 // Checks that when the history is cleared, prerendering is cancelled and |
| 3187 // prerendering history is cleared. | 3094 // prerendering history is cleared. |
| 3188 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClearHistory) { | 3095 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClearHistory) { |
| 3189 scoped_ptr<TestPrerender> prerender = | 3096 scoped_ptr<TestPrerender> prerender = |
| 3190 PrerenderTestURL("files/prerender/prerender_page.html", | 3097 PrerenderTestURL("/prerender/prerender_page.html", |
| 3191 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED, | 3098 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED, 1); |
| 3192 1); | |
| 3193 | 3099 |
| 3194 ClearBrowsingData(current_browser(), BrowsingDataRemover::REMOVE_HISTORY); | 3100 ClearBrowsingData(current_browser(), BrowsingDataRemover::REMOVE_HISTORY); |
| 3195 prerender->WaitForStop(); | 3101 prerender->WaitForStop(); |
| 3196 | 3102 |
| 3197 // Make sure prerender history was cleared. | 3103 // Make sure prerender history was cleared. |
| 3198 EXPECT_EQ(0, GetHistoryLength()); | 3104 EXPECT_EQ(0, GetHistoryLength()); |
| 3199 } | 3105 } |
| 3200 | 3106 |
| 3201 // Checks that when the cache is cleared, prerenders are cancelled but | 3107 // Checks that when the cache is cleared, prerenders are cancelled but |
| 3202 // prerendering history is not cleared. | 3108 // prerendering history is not cleared. |
| 3203 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClearCache) { | 3109 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClearCache) { |
| 3204 scoped_ptr<TestPrerender> prerender = | 3110 scoped_ptr<TestPrerender> prerender = |
| 3205 PrerenderTestURL("files/prerender/prerender_page.html", | 3111 PrerenderTestURL("/prerender/prerender_page.html", |
| 3206 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED, | 3112 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED, 1); |
| 3207 1); | |
| 3208 | 3113 |
| 3209 ClearBrowsingData(current_browser(), BrowsingDataRemover::REMOVE_CACHE); | 3114 ClearBrowsingData(current_browser(), BrowsingDataRemover::REMOVE_CACHE); |
| 3210 prerender->WaitForStop(); | 3115 prerender->WaitForStop(); |
| 3211 | 3116 |
| 3212 // Make sure prerender history was not cleared. Not a vital behavior, but | 3117 // Make sure prerender history was not cleared. Not a vital behavior, but |
| 3213 // used to compare with PrerenderClearHistory test. | 3118 // used to compare with PrerenderClearHistory test. |
| 3214 EXPECT_EQ(1, GetHistoryLength()); | 3119 EXPECT_EQ(1, GetHistoryLength()); |
| 3215 } | 3120 } |
| 3216 | 3121 |
| 3217 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelAll) { | 3122 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelAll) { |
| 3218 scoped_ptr<TestPrerender> prerender = | 3123 scoped_ptr<TestPrerender> prerender = PrerenderTestURL( |
| 3219 PrerenderTestURL("files/prerender/prerender_page.html", | 3124 "/prerender/prerender_page.html", FINAL_STATUS_CANCELLED, 1); |
| 3220 FINAL_STATUS_CANCELLED, | |
| 3221 1); | |
| 3222 | 3125 |
| 3223 GetPrerenderManager()->CancelAllPrerenders(); | 3126 GetPrerenderManager()->CancelAllPrerenders(); |
| 3224 prerender->WaitForStop(); | 3127 prerender->WaitForStop(); |
| 3225 | 3128 |
| 3226 EXPECT_FALSE(prerender->contents()); | 3129 EXPECT_FALSE(prerender->contents()); |
| 3227 } | 3130 } |
| 3228 | 3131 |
| 3229 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEvents) { | 3132 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEvents) { |
| 3230 scoped_ptr<TestPrerender> prerender = | 3133 scoped_ptr<TestPrerender> prerender = PrerenderTestURL( |
| 3231 PrerenderTestURL("files/prerender/prerender_page.html", | 3134 "/prerender/prerender_page.html", FINAL_STATUS_CANCELLED, 1); |
| 3232 FINAL_STATUS_CANCELLED, 1); | |
| 3233 | 3135 |
| 3234 GetPrerenderManager()->CancelAllPrerenders(); | 3136 GetPrerenderManager()->CancelAllPrerenders(); |
| 3235 prerender->WaitForStop(); | 3137 prerender->WaitForStop(); |
| 3236 | 3138 |
| 3237 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); | 3139 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
| 3238 EXPECT_TRUE(DidReceivePrerenderStopEventForLinkNumber(0)); | 3140 EXPECT_TRUE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| 3239 EXPECT_FALSE(HadPrerenderEventErrors()); | 3141 EXPECT_FALSE(HadPrerenderEventErrors()); |
| 3240 } | 3142 } |
| 3241 | 3143 |
| 3242 // Cancels the prerender of a page with its own prerender. The second prerender | 3144 // Cancels the prerender of a page with its own prerender. The second prerender |
| 3243 // should never be started. | 3145 // should never be started. |
| 3244 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3146 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3245 PrerenderCancelPrerenderWithPrerender) { | 3147 PrerenderCancelPrerenderWithPrerender) { |
| 3246 scoped_ptr<TestPrerender> prerender = | 3148 scoped_ptr<TestPrerender> prerender = PrerenderTestURL( |
| 3247 PrerenderTestURL("files/prerender/prerender_infinite_a.html", | 3149 "/prerender/prerender_infinite_a.html", FINAL_STATUS_CANCELLED, 1); |
| 3248 FINAL_STATUS_CANCELLED, | |
| 3249 1); | |
| 3250 | 3150 |
| 3251 GetPrerenderManager()->CancelAllPrerenders(); | 3151 GetPrerenderManager()->CancelAllPrerenders(); |
| 3252 prerender->WaitForStop(); | 3152 prerender->WaitForStop(); |
| 3253 | 3153 |
| 3254 EXPECT_FALSE(prerender->contents()); | 3154 EXPECT_FALSE(prerender->contents()); |
| 3255 } | 3155 } |
| 3256 | 3156 |
| 3257 // Prerendering and history tests. | 3157 // Prerendering and history tests. |
| 3258 // The prerendered page is navigated to in several ways [navigate via | 3158 // The prerendered page is navigated to in several ways [navigate via |
| 3259 // omnibox, click on link, key-modified click to open in background tab, etc], | 3159 // omnibox, click on link, key-modified click to open in background tab, etc], |
| 3260 // followed by a navigation to another page from the prerendered page, followed | 3160 // followed by a navigation to another page from the prerendered page, followed |
| 3261 // by a back navigation. | 3161 // by a back navigation. |
| 3262 | 3162 |
| 3263 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNavigateClickGoBack) { | 3163 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNavigateClickGoBack) { |
| 3264 PrerenderTestURL("files/prerender/prerender_page_with_link.html", | 3164 PrerenderTestURL("/prerender/prerender_page_with_link.html", |
| 3265 FINAL_STATUS_USED, | 3165 FINAL_STATUS_USED, 1); |
| 3266 1); | |
| 3267 NavigateToDestURL(); | 3166 NavigateToDestURL(); |
| 3268 ClickToNextPageAfterPrerender(); | 3167 ClickToNextPageAfterPrerender(); |
| 3269 GoBackToPrerender(); | 3168 GoBackToPrerender(); |
| 3270 } | 3169 } |
| 3271 | 3170 |
| 3272 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNavigateNavigateGoBack) { | 3171 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNavigateNavigateGoBack) { |
| 3273 PrerenderTestURL("files/prerender/prerender_page_with_link.html", | 3172 PrerenderTestURL("/prerender/prerender_page_with_link.html", |
| 3274 FINAL_STATUS_USED, | 3173 FINAL_STATUS_USED, 1); |
| 3275 1); | |
| 3276 NavigateToDestURL(); | 3174 NavigateToDestURL(); |
| 3277 NavigateToNextPageAfterPrerender(); | 3175 NavigateToNextPageAfterPrerender(); |
| 3278 GoBackToPrerender(); | 3176 GoBackToPrerender(); |
| 3279 } | 3177 } |
| 3280 | 3178 |
| 3281 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickClickGoBack) { | 3179 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickClickGoBack) { |
| 3282 PrerenderTestURL("files/prerender/prerender_page_with_link.html", | 3180 PrerenderTestURL("/prerender/prerender_page_with_link.html", |
| 3283 FINAL_STATUS_USED, | 3181 FINAL_STATUS_USED, 1); |
| 3284 1); | |
| 3285 OpenDestURLViaClick(); | 3182 OpenDestURLViaClick(); |
| 3286 ClickToNextPageAfterPrerender(); | 3183 ClickToNextPageAfterPrerender(); |
| 3287 GoBackToPrerender(); | 3184 GoBackToPrerender(); |
| 3288 } | 3185 } |
| 3289 | 3186 |
| 3290 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNavigateGoBack) { | 3187 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNavigateGoBack) { |
| 3291 PrerenderTestURL("files/prerender/prerender_page_with_link.html", | 3188 PrerenderTestURL("/prerender/prerender_page_with_link.html", |
| 3292 FINAL_STATUS_USED, | 3189 FINAL_STATUS_USED, 1); |
| 3293 1); | |
| 3294 OpenDestURLViaClick(); | 3190 OpenDestURLViaClick(); |
| 3295 NavigateToNextPageAfterPrerender(); | 3191 NavigateToNextPageAfterPrerender(); |
| 3296 GoBackToPrerender(); | 3192 GoBackToPrerender(); |
| 3297 } | 3193 } |
| 3298 | 3194 |
| 3299 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewWindow) { | 3195 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewWindow) { |
| 3300 PrerenderTestURL("files/prerender/prerender_page_with_link.html", | 3196 PrerenderTestURL("/prerender/prerender_page_with_link.html", |
| 3301 FINAL_STATUS_APP_TERMINATING, 1); | 3197 FINAL_STATUS_APP_TERMINATING, 1); |
| 3302 OpenDestURLViaClickNewWindow(); | 3198 OpenDestURLViaClickNewWindow(); |
| 3303 } | 3199 } |
| 3304 | 3200 |
| 3305 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewForegroundTab) { | 3201 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewForegroundTab) { |
| 3306 PrerenderTestURL("files/prerender/prerender_page_with_link.html", | 3202 PrerenderTestURL("/prerender/prerender_page_with_link.html", |
| 3307 FINAL_STATUS_APP_TERMINATING, 1); | 3203 FINAL_STATUS_APP_TERMINATING, 1); |
| 3308 OpenDestURLViaClickNewForegroundTab(); | 3204 OpenDestURLViaClickNewForegroundTab(); |
| 3309 } | 3205 } |
| 3310 | 3206 |
| 3311 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3207 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3312 NavigateToPrerenderedPageWhenDevToolsAttached) { | 3208 NavigateToPrerenderedPageWhenDevToolsAttached) { |
| 3313 DisableJavascriptCalls(); | 3209 DisableJavascriptCalls(); |
| 3314 WebContents* web_contents = | 3210 WebContents* web_contents = |
| 3315 current_browser()->tab_strip_model()->GetActiveWebContents(); | 3211 current_browser()->tab_strip_model()->GetActiveWebContents(); |
| 3316 scoped_refptr<DevToolsAgentHost> agent( | 3212 scoped_refptr<DevToolsAgentHost> agent( |
| 3317 DevToolsAgentHost::GetOrCreateFor(web_contents)); | 3213 DevToolsAgentHost::GetOrCreateFor(web_contents)); |
| 3318 FakeDevToolsClient client; | 3214 FakeDevToolsClient client; |
| 3319 agent->AttachClient(&client); | 3215 agent->AttachClient(&client); |
| 3320 const char* url = "files/prerender/prerender_page.html"; | 3216 const char* url = "/prerender/prerender_page.html"; |
| 3321 PrerenderTestURL(url, FINAL_STATUS_DEVTOOLS_ATTACHED, 1); | 3217 PrerenderTestURL(url, FINAL_STATUS_DEVTOOLS_ATTACHED, 1); |
| 3322 NavigateToURLWithDisposition(url, CURRENT_TAB, false); | 3218 NavigateToURLWithDisposition(url, CURRENT_TAB, false); |
| 3323 agent->DetachClient(); | 3219 agent->DetachClient(); |
| 3324 } | 3220 } |
| 3325 | 3221 |
| 3326 // Validate that the sessionStorage namespace remains the same when swapping | 3222 // Validate that the sessionStorage namespace remains the same when swapping |
| 3327 // in a prerendered page. | 3223 // in a prerendered page. |
| 3328 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSessionStorage) { | 3224 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSessionStorage) { |
| 3329 set_loader_path("files/prerender/prerender_loader_with_session_storage.html"); | 3225 set_loader_path("/prerender/prerender_loader_with_session_storage.html"); |
| 3330 PrerenderTestURL(GetCrossDomainTestUrl("files/prerender/prerender_page.html"), | 3226 PrerenderTestURL(GetCrossDomainTestUrl("prerender/prerender_page.html"), |
| 3331 FINAL_STATUS_USED, | 3227 FINAL_STATUS_USED, 1); |
| 3332 1); | |
| 3333 NavigateToDestURL(); | 3228 NavigateToDestURL(); |
| 3334 GoBackToPageBeforePrerender(); | 3229 GoBackToPageBeforePrerender(); |
| 3335 } | 3230 } |
| 3336 | 3231 |
| 3337 // Checks that the control group works. An XHR PUT cannot be detected in the | 3232 // Checks that the control group works. An XHR PUT cannot be detected in the |
| 3338 // control group. | 3233 // control group. |
| 3339 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, ControlGroup) { | 3234 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, ControlGroup) { |
| 3340 RestorePrerenderMode restore_prerender_mode; | 3235 RestorePrerenderMode restore_prerender_mode; |
| 3341 PrerenderManager::SetMode( | 3236 PrerenderManager::SetMode( |
| 3342 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); | 3237 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); |
| 3343 DisableJavascriptCalls(); | 3238 DisableJavascriptCalls(); |
| 3344 PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 3239 PrerenderTestURL("/prerender/prerender_xhr_put.html", |
| 3345 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); | 3240 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); |
| 3346 NavigateToDestURL(); | 3241 NavigateToDestURL(); |
| 3347 } | 3242 } |
| 3348 | 3243 |
| 3349 // Checks that the control group correctly hits WOULD_HAVE_BEEN_USED | 3244 // Checks that the control group correctly hits WOULD_HAVE_BEEN_USED |
| 3350 // renderer-initiated navigations. (This verifies that the ShouldFork logic | 3245 // renderer-initiated navigations. (This verifies that the ShouldFork logic |
| 3351 // behaves correctly.) | 3246 // behaves correctly.) |
| 3352 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, ControlGroupRendererInitiated) { | 3247 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, ControlGroupRendererInitiated) { |
| 3353 RestorePrerenderMode restore_prerender_mode; | 3248 RestorePrerenderMode restore_prerender_mode; |
| 3354 PrerenderManager::SetMode( | 3249 PrerenderManager::SetMode( |
| 3355 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); | 3250 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); |
| 3356 DisableJavascriptCalls(); | 3251 DisableJavascriptCalls(); |
| 3357 PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 3252 PrerenderTestURL("/prerender/prerender_xhr_put.html", |
| 3358 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); | 3253 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); |
| 3359 OpenDestURLViaClick(); | 3254 OpenDestURLViaClick(); |
| 3360 } | 3255 } |
| 3361 | 3256 |
| 3362 // Make sure that the MatchComplete dummy works in the normal case. Once | 3257 // Make sure that the MatchComplete dummy works in the normal case. Once |
| 3363 // a prerender is cancelled because of a script, a dummy must be created to | 3258 // a prerender is cancelled because of a script, a dummy must be created to |
| 3364 // account for the MatchComplete case, and it must have a final status of | 3259 // account for the MatchComplete case, and it must have a final status of |
| 3365 // FINAL_STATUS_WOULD_HAVE_BEEN_USED. | 3260 // FINAL_STATUS_WOULD_HAVE_BEEN_USED. |
| 3366 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) { | 3261 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) { |
| 3367 RestorePrerenderMode restore_prerender_mode; | 3262 RestorePrerenderMode restore_prerender_mode; |
| 3368 PrerenderManager::SetMode( | 3263 PrerenderManager::SetMode( |
| 3369 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); | 3264 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); |
| 3370 | 3265 |
| 3371 std::vector<FinalStatus> expected_final_status_queue; | 3266 std::vector<FinalStatus> expected_final_status_queue; |
| 3372 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); | 3267 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); |
| 3373 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); | 3268 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); |
| 3374 PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 3269 PrerenderTestURL("/prerender/prerender_xhr_put.html", |
| 3375 expected_final_status_queue, 1); | 3270 expected_final_status_queue, 1); |
| 3376 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 3271 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 3377 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 3272 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 3378 histogram_tester().ExpectTotalCount( | 3273 histogram_tester().ExpectTotalCount( |
| 3379 "Prerender.none_PerceivedPLTMatchedComplete", 0); | 3274 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 3380 histogram_tester().ExpectTotalCount( | 3275 histogram_tester().ExpectTotalCount( |
| 3381 "Prerender.websame_PrerenderNotSwappedInPLT", 1); | 3276 "Prerender.websame_PrerenderNotSwappedInPLT", 1); |
| 3382 | 3277 |
| 3383 NavigateToDestURL(); | 3278 NavigateToDestURL(); |
| 3384 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 3279 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); |
| 3385 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", | 3280 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", |
| 3386 0); | 3281 0); |
| 3387 histogram_tester().ExpectTotalCount( | 3282 histogram_tester().ExpectTotalCount( |
| 3388 "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 3283 "Prerender.websame_PerceivedPLTMatchedComplete", 1); |
| 3389 } | 3284 } |
| 3390 | 3285 |
| 3391 // Checks that the referrer policy is used when prerendering. | 3286 // Checks that the referrer policy is used when prerendering. |
| 3392 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReferrerPolicy) { | 3287 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReferrerPolicy) { |
| 3393 set_loader_path("files/prerender/prerender_loader_with_referrer_policy.html"); | 3288 set_loader_path("/prerender/prerender_loader_with_referrer_policy.html"); |
| 3394 PrerenderTestURL("files/prerender/prerender_referrer_policy.html", | 3289 PrerenderTestURL("/prerender/prerender_referrer_policy.html", |
| 3395 FINAL_STATUS_USED, | 3290 FINAL_STATUS_USED, 1); |
| 3396 1); | |
| 3397 NavigateToDestURL(); | 3291 NavigateToDestURL(); |
| 3398 } | 3292 } |
| 3399 | 3293 |
| 3400 // Checks that the referrer policy is used when prerendering on HTTPS. | 3294 // Checks that the referrer policy is used when prerendering on HTTPS. |
| 3401 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3295 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3402 PrerenderSSLReferrerPolicy) { | 3296 PrerenderSSLReferrerPolicy) { |
| 3403 UseHttpsSrcServer(); | 3297 UseHttpsSrcServer(); |
| 3404 set_loader_path("files/prerender/prerender_loader_with_referrer_policy.html"); | 3298 set_loader_path("/prerender/prerender_loader_with_referrer_policy.html"); |
| 3405 PrerenderTestURL("files/prerender/prerender_referrer_policy.html", | 3299 PrerenderTestURL("/prerender/prerender_referrer_policy.html", |
| 3406 FINAL_STATUS_USED, | 3300 FINAL_STATUS_USED, 1); |
| 3407 1); | |
| 3408 NavigateToDestURL(); | 3301 NavigateToDestURL(); |
| 3409 } | 3302 } |
| 3410 | 3303 |
| 3411 // Checks that the referrer policy is used when prerendering is cancelled. | 3304 // Checks that the referrer policy is used when prerendering is cancelled. |
| 3412 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelReferrerPolicy) { | 3305 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelReferrerPolicy) { |
| 3413 scoped_ptr<TestContentBrowserClient> test_content_browser_client( | 3306 scoped_ptr<TestContentBrowserClient> test_content_browser_client( |
| 3414 new TestContentBrowserClient); | 3307 new TestContentBrowserClient); |
| 3415 content::ContentBrowserClient* original_browser_client = | 3308 content::ContentBrowserClient* original_browser_client = |
| 3416 content::SetBrowserClientForTesting(test_content_browser_client.get()); | 3309 content::SetBrowserClientForTesting(test_content_browser_client.get()); |
| 3417 | 3310 |
| 3418 set_loader_path("files/prerender/prerender_loader_with_referrer_policy.html"); | 3311 set_loader_path("/prerender/prerender_loader_with_referrer_policy.html"); |
| 3419 PrerenderTestURL("files/prerender/prerender_referrer_policy.html", | 3312 PrerenderTestURL("/prerender/prerender_referrer_policy.html", |
| 3420 FINAL_STATUS_CANCELLED, | 3313 FINAL_STATUS_CANCELLED, 1); |
| 3421 1); | |
| 3422 OpenDestURLViaClick(); | 3314 OpenDestURLViaClick(); |
| 3423 | 3315 |
| 3424 bool display_test_result = false; | 3316 bool display_test_result = false; |
| 3425 WebContents* web_contents = | 3317 WebContents* web_contents = |
| 3426 browser()->tab_strip_model()->GetActiveWebContents(); | 3318 browser()->tab_strip_model()->GetActiveWebContents(); |
| 3427 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( | 3319 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
| 3428 web_contents, | 3320 web_contents, |
| 3429 "window.domAutomationController.send(DidDisplayPass())", | 3321 "window.domAutomationController.send(DidDisplayPass())", |
| 3430 &display_test_result)); | 3322 &display_test_result)); |
| 3431 EXPECT_TRUE(display_test_result); | 3323 EXPECT_TRUE(display_test_result); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3464 PrerenderBrowserTest::TearDownOnMainThread(); | 3356 PrerenderBrowserTest::TearDownOnMainThread(); |
| 3465 ExtensionApiTest::TearDownOnMainThread(); | 3357 ExtensionApiTest::TearDownOnMainThread(); |
| 3466 } | 3358 } |
| 3467 | 3359 |
| 3468 void SetUpOnMainThread() override { | 3360 void SetUpOnMainThread() override { |
| 3469 PrerenderBrowserTest::SetUpOnMainThread(); | 3361 PrerenderBrowserTest::SetUpOnMainThread(); |
| 3470 } | 3362 } |
| 3471 }; | 3363 }; |
| 3472 | 3364 |
| 3473 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, WebNavigation) { | 3365 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, WebNavigation) { |
| 3474 ASSERT_TRUE(StartSpawnedTestServer()); | 3366 ASSERT_TRUE(StartTestServer()); |
| 3475 extensions::FrameNavigationState::set_allow_extension_scheme(true); | 3367 extensions::FrameNavigationState::set_allow_extension_scheme(true); |
| 3476 | 3368 |
| 3477 // Wait for the extension to set itself up and return control to us. | 3369 // Wait for the extension to set itself up and return control to us. |
| 3478 ASSERT_TRUE(RunExtensionTest("webnavigation/prerender")) << message_; | 3370 ASSERT_TRUE(RunExtensionTest("webnavigation/prerender")) << message_; |
| 3479 | 3371 |
| 3480 extensions::ResultCatcher catcher; | 3372 extensions::ResultCatcher catcher; |
| 3481 | 3373 |
| 3482 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 3374 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 3483 | 3375 |
| 3484 ChannelDestructionWatcher channel_close_watcher; | 3376 ChannelDestructionWatcher channel_close_watcher; |
| 3485 channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> | 3377 channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> |
| 3486 GetActiveWebContents()->GetRenderProcessHost()); | 3378 GetActiveWebContents()->GetRenderProcessHost()); |
| 3487 NavigateToDestURL(); | 3379 NavigateToDestURL(); |
| 3488 channel_close_watcher.WaitForChannelClose(); | 3380 channel_close_watcher.WaitForChannelClose(); |
| 3489 | 3381 |
| 3490 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 3382 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
| 3491 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); | 3383 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); |
| 3492 } | 3384 } |
| 3493 | 3385 |
| 3494 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, TabsApi) { | 3386 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, TabsApi) { |
| 3495 ASSERT_TRUE(StartSpawnedTestServer()); | 3387 ASSERT_TRUE(StartTestServer()); |
| 3496 extensions::FrameNavigationState::set_allow_extension_scheme(true); | 3388 extensions::FrameNavigationState::set_allow_extension_scheme(true); |
| 3497 | 3389 |
| 3498 // Wait for the extension to set itself up and return control to us. | 3390 // Wait for the extension to set itself up and return control to us. |
| 3499 ASSERT_TRUE(RunExtensionTest("tabs/on_replaced")) << message_; | 3391 ASSERT_TRUE(RunExtensionTest("tabs/on_replaced")) << message_; |
| 3500 | 3392 |
| 3501 extensions::ResultCatcher catcher; | 3393 extensions::ResultCatcher catcher; |
| 3502 | 3394 |
| 3503 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 3395 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 3504 | 3396 |
| 3505 ChannelDestructionWatcher channel_close_watcher; | 3397 ChannelDestructionWatcher channel_close_watcher; |
| 3506 channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> | 3398 channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> |
| 3507 GetActiveWebContents()->GetRenderProcessHost()); | 3399 GetActiveWebContents()->GetRenderProcessHost()); |
| 3508 NavigateToDestURL(); | 3400 NavigateToDestURL(); |
| 3509 channel_close_watcher.WaitForChannelClose(); | 3401 channel_close_watcher.WaitForChannelClose(); |
| 3510 | 3402 |
| 3511 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 3403 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
| 3512 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); | 3404 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); |
| 3513 } | 3405 } |
| 3514 | 3406 |
| 3515 // Test that prerenders abort when navigating to a stream. | 3407 // Test that prerenders abort when navigating to a stream. |
| 3516 // See chrome/browser/extensions/api/streams_private/streams_private_apitest.cc | 3408 // See chrome/browser/extensions/api/streams_private/streams_private_apitest.cc |
| 3517 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, StreamsTest) { | 3409 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, StreamsTest) { |
| 3518 RestorePrerenderMode restore_prerender_mode; | 3410 RestorePrerenderMode restore_prerender_mode; |
| 3519 PrerenderManager::SetMode( | 3411 PrerenderManager::SetMode( |
| 3520 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); | 3412 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); |
| 3521 | 3413 |
| 3522 ASSERT_TRUE(StartSpawnedTestServer()); | 3414 ASSERT_TRUE(StartTestServer()); |
| 3523 | 3415 |
| 3524 const extensions::Extension* extension = LoadExtension( | 3416 const extensions::Extension* extension = LoadExtension( |
| 3525 test_data_dir_.AppendASCII("streams_private/handle_mime_type")); | 3417 test_data_dir_.AppendASCII("streams_private/handle_mime_type")); |
| 3526 ASSERT_TRUE(extension); | 3418 ASSERT_TRUE(extension); |
| 3527 EXPECT_EQ(std::string(extension_misc::kMimeHandlerPrivateTestExtensionId), | 3419 EXPECT_EQ(std::string(extension_misc::kMimeHandlerPrivateTestExtensionId), |
| 3528 extension->id()); | 3420 extension->id()); |
| 3529 MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension); | 3421 MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension); |
| 3530 ASSERT_TRUE(handler); | 3422 ASSERT_TRUE(handler); |
| 3531 EXPECT_TRUE(handler->CanHandleMIMEType("application/msword")); | 3423 EXPECT_TRUE(handler->CanHandleMIMEType("application/msword")); |
| 3532 | 3424 |
| 3533 PrerenderTestURL("files/prerender/document.doc", FINAL_STATUS_DOWNLOAD, 0); | 3425 PrerenderTestURL("/prerender/document.doc", FINAL_STATUS_DOWNLOAD, 0); |
| 3534 | 3426 |
| 3535 // Sanity-check that the extension would have picked up the stream in a normal | 3427 // Sanity-check that the extension would have picked up the stream in a normal |
| 3536 // navigation had prerender not intercepted it. | 3428 // navigation had prerender not intercepted it. |
| 3537 // streams_private/handle_mime_type reports success if it has handled the | 3429 // streams_private/handle_mime_type reports success if it has handled the |
| 3538 // application/msword type. | 3430 // application/msword type. |
| 3539 extensions::ResultCatcher catcher; | 3431 extensions::ResultCatcher catcher; |
| 3540 NavigateToDestURL(); | 3432 NavigateToDestURL(); |
| 3541 EXPECT_TRUE(catcher.GetNextResult()); | 3433 EXPECT_TRUE(catcher.GetNextResult()); |
| 3542 } | 3434 } |
| 3543 | 3435 |
| 3544 // Checks that non-http/https/chrome-extension subresource cancels the | 3436 // Checks that non-http/https/chrome-extension subresource cancels the |
| 3545 // prerender. | 3437 // prerender. |
| 3546 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3438 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3547 PrerenderCancelSubresourceUnsupportedScheme) { | 3439 PrerenderCancelSubresourceUnsupportedScheme) { |
| 3548 GURL image_url = GURL("invalidscheme://www.google.com/test.jpg"); | 3440 GURL image_url = GURL("invalidscheme://www.google.com/test.jpg"); |
| 3549 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 3441 base::StringPairs replacement_text; |
| 3550 replacement_text.push_back( | 3442 replacement_text.push_back( |
| 3551 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); | 3443 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); |
| 3552 std::string replacement_path; | 3444 std::string replacement_path; |
| 3553 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 3445 net::test_server::GetFilePathWithReplacements( |
| 3554 "files/prerender/prerender_with_image.html", | 3446 "/prerender/prerender_with_image.html", replacement_text, |
| 3555 replacement_text, | 3447 &replacement_path); |
| 3556 &replacement_path)); | |
| 3557 PrerenderTestURL(replacement_path, FINAL_STATUS_UNSUPPORTED_SCHEME, 0); | 3448 PrerenderTestURL(replacement_path, FINAL_STATUS_UNSUPPORTED_SCHEME, 0); |
| 3558 } | 3449 } |
| 3559 | 3450 |
| 3560 // Ensure that about:blank is permitted for any subresource. | 3451 // Ensure that about:blank is permitted for any subresource. |
| 3561 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3452 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3562 PrerenderAllowAboutBlankSubresource) { | 3453 PrerenderAllowAboutBlankSubresource) { |
| 3563 GURL image_url = GURL("about:blank"); | 3454 GURL image_url = GURL("about:blank"); |
| 3564 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 3455 base::StringPairs replacement_text; |
| 3565 replacement_text.push_back( | 3456 replacement_text.push_back( |
| 3566 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); | 3457 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); |
| 3567 std::string replacement_path; | 3458 std::string replacement_path; |
| 3568 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 3459 net::test_server::GetFilePathWithReplacements( |
| 3569 "files/prerender/prerender_with_image.html", | 3460 "/prerender/prerender_with_image.html", replacement_text, |
| 3570 replacement_text, | 3461 &replacement_path); |
| 3571 &replacement_path)); | |
| 3572 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); | 3462 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); |
| 3573 NavigateToDestURL(); | 3463 NavigateToDestURL(); |
| 3574 } | 3464 } |
| 3575 | 3465 |
| 3576 // Checks that non-http/https/chrome-extension subresource cancels the prerender | 3466 // Checks that non-http/https/chrome-extension subresource cancels the prerender |
| 3577 // on redirect. | 3467 // on redirect. |
| 3578 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3468 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3579 PrerenderCancelSubresourceRedirectUnsupportedScheme) { | 3469 PrerenderCancelSubresourceRedirectUnsupportedScheme) { |
| 3580 GURL image_url = test_server()->GetURL( | 3470 GURL image_url = embedded_test_server()->GetURL( |
| 3581 CreateServerRedirect("invalidscheme://www.google.com/test.jpg")); | 3471 CreateServerRedirect("invalidscheme://www.google.com/test.jpg")); |
| 3582 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 3472 base::StringPairs replacement_text; |
| 3583 replacement_text.push_back( | 3473 replacement_text.push_back( |
| 3584 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); | 3474 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); |
| 3585 std::string replacement_path; | 3475 std::string replacement_path; |
| 3586 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 3476 net::test_server::GetFilePathWithReplacements( |
| 3587 "files/prerender/prerender_with_image.html", | 3477 "/prerender/prerender_with_image.html", replacement_text, |
| 3588 replacement_text, | 3478 &replacement_path); |
| 3589 &replacement_path)); | |
| 3590 PrerenderTestURL(replacement_path, FINAL_STATUS_UNSUPPORTED_SCHEME, 0); | 3479 PrerenderTestURL(replacement_path, FINAL_STATUS_UNSUPPORTED_SCHEME, 0); |
| 3591 } | 3480 } |
| 3592 | 3481 |
| 3593 // Checks that chrome-extension subresource does not cancel the prerender. | 3482 // Checks that chrome-extension subresource does not cancel the prerender. |
| 3594 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3483 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3595 PrerenderKeepSubresourceExtensionScheme) { | 3484 PrerenderKeepSubresourceExtensionScheme) { |
| 3596 GURL image_url = GURL("chrome-extension://abcdefg/test.jpg"); | 3485 GURL image_url = GURL("chrome-extension://abcdefg/test.jpg"); |
| 3597 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 3486 base::StringPairs replacement_text; |
| 3598 replacement_text.push_back( | 3487 replacement_text.push_back( |
| 3599 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); | 3488 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); |
| 3600 std::string replacement_path; | 3489 std::string replacement_path; |
| 3601 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 3490 net::test_server::GetFilePathWithReplacements( |
| 3602 "files/prerender/prerender_with_image.html", | 3491 "/prerender/prerender_with_image.html", replacement_text, |
| 3603 replacement_text, | 3492 &replacement_path); |
| 3604 &replacement_path)); | |
| 3605 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); | 3493 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); |
| 3606 NavigateToDestURL(); | 3494 NavigateToDestURL(); |
| 3607 } | 3495 } |
| 3608 | 3496 |
| 3609 // Checks that redirect to chrome-extension subresource does not cancel the | 3497 // Checks that redirect to chrome-extension subresource does not cancel the |
| 3610 // prerender. | 3498 // prerender. |
| 3611 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3499 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3612 PrerenderKeepSubresourceRedirectExtensionScheme) { | 3500 PrerenderKeepSubresourceRedirectExtensionScheme) { |
| 3613 GURL image_url = test_server()->GetURL( | 3501 GURL image_url = embedded_test_server()->GetURL( |
| 3614 CreateServerRedirect("chrome-extension://abcdefg/test.jpg")); | 3502 CreateServerRedirect("chrome-extension://abcdefg/test.jpg")); |
| 3615 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 3503 base::StringPairs replacement_text; |
| 3616 replacement_text.push_back( | 3504 replacement_text.push_back( |
| 3617 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); | 3505 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); |
| 3618 std::string replacement_path; | 3506 std::string replacement_path; |
| 3619 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 3507 net::test_server::GetFilePathWithReplacements( |
| 3620 "files/prerender/prerender_with_image.html", | 3508 "/prerender/prerender_with_image.html", replacement_text, |
| 3621 replacement_text, | 3509 &replacement_path); |
| 3622 &replacement_path)); | |
| 3623 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); | 3510 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); |
| 3624 NavigateToDestURL(); | 3511 NavigateToDestURL(); |
| 3625 } | 3512 } |
| 3626 | 3513 |
| 3627 // Checks that non-http/https main page redirects cancel the prerender. | 3514 // Checks that non-http/https main page redirects cancel the prerender. |
| 3628 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3515 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3629 PrerenderCancelMainFrameRedirectUnsupportedScheme) { | 3516 PrerenderCancelMainFrameRedirectUnsupportedScheme) { |
| 3630 GURL url = test_server()->GetURL( | 3517 GURL url = embedded_test_server()->GetURL( |
| 3631 CreateServerRedirect("invalidscheme://www.google.com/test.html")); | 3518 CreateServerRedirect("invalidscheme://www.google.com/test.html")); |
| 3632 PrerenderTestURL(url, FINAL_STATUS_UNSUPPORTED_SCHEME, 0); | 3519 PrerenderTestURL(url, FINAL_STATUS_UNSUPPORTED_SCHEME, 0); |
| 3633 } | 3520 } |
| 3634 | 3521 |
| 3635 // Checks that media source video loads are deferred on prerendering. | 3522 // Checks that media source video loads are deferred on prerendering. |
| 3636 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5MediaSourceVideo) { | 3523 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5MediaSourceVideo) { |
| 3637 PrerenderTestURL("files/prerender/prerender_html5_video_media_source.html", | 3524 PrerenderTestURL("/prerender/prerender_html5_video_media_source.html", |
| 3638 FINAL_STATUS_USED, | 3525 FINAL_STATUS_USED, 1); |
| 3639 1); | |
| 3640 NavigateToDestURL(); | 3526 NavigateToDestURL(); |
| 3641 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); | 3527 WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
| 3642 } | 3528 } |
| 3643 | 3529 |
| 3644 // Checks that a prerender that creates an audio stream (via a WebAudioDevice) | 3530 // Checks that a prerender that creates an audio stream (via a WebAudioDevice) |
| 3645 // is cancelled. | 3531 // is cancelled. |
| 3646 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWebAudioDevice) { | 3532 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWebAudioDevice) { |
| 3647 DisableLoadEventCheck(); | 3533 DisableLoadEventCheck(); |
| 3648 PrerenderTestURL("files/prerender/prerender_web_audio_device.html", | 3534 PrerenderTestURL("/prerender/prerender_web_audio_device.html", |
| 3649 FINAL_STATUS_CREATING_AUDIO_STREAM, 0); | 3535 FINAL_STATUS_CREATING_AUDIO_STREAM, 0); |
| 3650 } | 3536 } |
| 3651 | 3537 |
| 3652 // Checks that prerenders do not swap in to WebContents being captured. | 3538 // Checks that prerenders do not swap in to WebContents being captured. |
| 3653 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCapturedWebContents) { | 3539 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCapturedWebContents) { |
| 3654 PrerenderTestURL("files/prerender/prerender_page.html", | 3540 PrerenderTestURL("/prerender/prerender_page.html", |
| 3655 FINAL_STATUS_PAGE_BEING_CAPTURED, 1); | 3541 FINAL_STATUS_PAGE_BEING_CAPTURED, 1); |
| 3656 WebContents* web_contents = GetActiveWebContents(); | 3542 WebContents* web_contents = GetActiveWebContents(); |
| 3657 web_contents->IncrementCapturerCount(gfx::Size()); | 3543 web_contents->IncrementCapturerCount(gfx::Size()); |
| 3658 NavigateToDestURLWithDisposition(CURRENT_TAB, false); | 3544 NavigateToDestURLWithDisposition(CURRENT_TAB, false); |
| 3659 web_contents->DecrementCapturerCount(); | 3545 web_contents->DecrementCapturerCount(); |
| 3660 } | 3546 } |
| 3661 | 3547 |
| 3662 // Checks that prerenders are aborted on cross-process navigation from | 3548 // Checks that prerenders are aborted on cross-process navigation from |
| 3663 // a server redirect. | 3549 // a server redirect. |
| 3664 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3550 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3665 PrerenderCrossProcessServerRedirect) { | 3551 PrerenderCrossProcessServerRedirect) { |
| 3666 // Force everything to be a process swap. | 3552 // Force everything to be a process swap. |
| 3667 SwapProcessesContentBrowserClient test_browser_client; | 3553 SwapProcessesContentBrowserClient test_browser_client; |
| 3668 content::ContentBrowserClient* original_browser_client = | 3554 content::ContentBrowserClient* original_browser_client = |
| 3669 content::SetBrowserClientForTesting(&test_browser_client); | 3555 content::SetBrowserClientForTesting(&test_browser_client); |
| 3670 | 3556 |
| 3671 PrerenderTestURL( | 3557 PrerenderTestURL(CreateServerRedirect("/prerender/prerender_page.html"), |
| 3672 CreateServerRedirect("files/prerender/prerender_page.html"), | 3558 FINAL_STATUS_OPEN_URL, 0); |
| 3673 FINAL_STATUS_OPEN_URL, 0); | |
| 3674 | 3559 |
| 3675 content::SetBrowserClientForTesting(original_browser_client); | 3560 content::SetBrowserClientForTesting(original_browser_client); |
| 3676 } | 3561 } |
| 3677 | 3562 |
| 3678 // Checks that URLRequests for prerenders being aborted on cross-process | 3563 // Checks that URLRequests for prerenders being aborted on cross-process |
| 3679 // navigation from a server redirect are cleaned up, so they don't keep cache | 3564 // navigation from a server redirect are cleaned up, so they don't keep cache |
| 3680 // entries locked. | 3565 // entries locked. |
| 3681 // See http://crbug.com/341134 | 3566 // See http://crbug.com/341134 |
| 3682 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3567 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3683 PrerenderCrossProcessServerRedirectNoHang) { | 3568 PrerenderCrossProcessServerRedirectNoHang) { |
| 3684 const char kDestPath[] = "files/prerender/prerender_page.html"; | 3569 const char kDestPath[] = "/prerender/prerender_page.html"; |
| 3685 // Force everything to be a process swap. | 3570 // Force everything to be a process swap. |
| 3686 SwapProcessesContentBrowserClient test_browser_client; | 3571 SwapProcessesContentBrowserClient test_browser_client; |
| 3687 content::ContentBrowserClient* original_browser_client = | 3572 content::ContentBrowserClient* original_browser_client = |
| 3688 content::SetBrowserClientForTesting(&test_browser_client); | 3573 content::SetBrowserClientForTesting(&test_browser_client); |
| 3689 | 3574 |
| 3690 PrerenderTestURL(CreateServerRedirect(kDestPath), FINAL_STATUS_OPEN_URL, 0); | 3575 PrerenderTestURL(CreateServerRedirect(kDestPath), FINAL_STATUS_OPEN_URL, 0); |
| 3691 | 3576 |
| 3692 ui_test_utils::NavigateToURL( | 3577 ui_test_utils::NavigateToURL(browser(), |
| 3693 browser(), | 3578 embedded_test_server()->GetURL(kDestPath)); |
| 3694 test_server()->GetURL(kDestPath)); | |
| 3695 | 3579 |
| 3696 content::SetBrowserClientForTesting(original_browser_client); | 3580 content::SetBrowserClientForTesting(original_browser_client); |
| 3697 } | 3581 } |
| 3698 | 3582 |
| 3699 // Checks that prerenders are aborted on cross-process navigation from | 3583 // Checks that prerenders are aborted on cross-process navigation from |
| 3700 // a client redirect. | 3584 // a client redirect. |
| 3701 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3585 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3702 PrerenderCrossProcessClientRedirect) { | 3586 PrerenderCrossProcessClientRedirect) { |
| 3703 // Cross-process navigation logic for renderer-initiated navigations | 3587 // Cross-process navigation logic for renderer-initiated navigations |
| 3704 // is partially controlled by the renderer, namely | 3588 // is partially controlled by the renderer, namely |
| (...skipping 15 matching lines...) Expand all Loading... |
| 3720 // stop events. | 3604 // stop events. |
| 3721 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, CancelMatchCompleteDummy) { | 3605 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, CancelMatchCompleteDummy) { |
| 3722 RestorePrerenderMode restore_prerender_mode; | 3606 RestorePrerenderMode restore_prerender_mode; |
| 3723 PrerenderManager::SetMode( | 3607 PrerenderManager::SetMode( |
| 3724 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); | 3608 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); |
| 3725 | 3609 |
| 3726 std::vector<FinalStatus> expected_final_status_queue; | 3610 std::vector<FinalStatus> expected_final_status_queue; |
| 3727 expected_final_status_queue.push_back(FINAL_STATUS_JAVASCRIPT_ALERT); | 3611 expected_final_status_queue.push_back(FINAL_STATUS_JAVASCRIPT_ALERT); |
| 3728 expected_final_status_queue.push_back(FINAL_STATUS_CANCELLED); | 3612 expected_final_status_queue.push_back(FINAL_STATUS_CANCELLED); |
| 3729 ScopedVector<TestPrerender> prerenders = | 3613 ScopedVector<TestPrerender> prerenders = |
| 3730 PrerenderTestURL("files/prerender/prerender_alert_before_onload.html", | 3614 PrerenderTestURL("/prerender/prerender_alert_before_onload.html", |
| 3731 expected_final_status_queue, 0); | 3615 expected_final_status_queue, 0); |
| 3732 | 3616 |
| 3733 // Cancel the MatchComplete dummy. | 3617 // Cancel the MatchComplete dummy. |
| 3734 GetPrerenderManager()->CancelAllPrerenders(); | 3618 GetPrerenderManager()->CancelAllPrerenders(); |
| 3735 prerenders[1]->WaitForStop(); | 3619 prerenders[1]->WaitForStop(); |
| 3736 | 3620 |
| 3737 // Check the referring page only got one copy of the event. | 3621 // Check the referring page only got one copy of the event. |
| 3738 EXPECT_FALSE(HadPrerenderEventErrors()); | 3622 EXPECT_FALSE(HadPrerenderEventErrors()); |
| 3739 } | 3623 } |
| 3740 | 3624 |
| 3741 // Checks that a deferred redirect to an image is not loaded until the page is | 3625 // Checks that a deferred redirect to an image is not loaded until the page is |
| 3742 // visible. Also test the right histogram events are emitted in this case. | 3626 // visible. Also test the right histogram events are emitted in this case. |
| 3743 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { | 3627 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { |
| 3744 DisableJavascriptCalls(); | 3628 DisableJavascriptCalls(); |
| 3745 | 3629 |
| 3746 // The prerender will not completely load until after the swap, so wait for a | 3630 // The prerender will not completely load until after the swap, so wait for a |
| 3747 // title change before calling DidPrerenderPass. | 3631 // title change before calling DidPrerenderPass. |
| 3748 scoped_ptr<TestPrerender> prerender = | 3632 scoped_ptr<TestPrerender> prerender = PrerenderTestURL( |
| 3749 PrerenderTestURL( | 3633 "/prerender/prerender_deferred_image.html", FINAL_STATUS_USED, 0); |
| 3750 "files/prerender/prerender_deferred_image.html", | |
| 3751 FINAL_STATUS_USED, 0); | |
| 3752 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); | 3634 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); |
| 3753 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); | 3635 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); |
| 3754 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); | 3636 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); |
| 3755 EXPECT_EQ(0, prerender->number_of_loads()); | 3637 EXPECT_EQ(0, prerender->number_of_loads()); |
| 3756 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 3638 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 3757 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 3639 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 3758 histogram_tester().ExpectTotalCount( | 3640 histogram_tester().ExpectTotalCount( |
| 3759 "Prerender.none_PerceivedPLTMatchedComplete", 0); | 3641 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 3760 histogram_tester().ExpectTotalCount( | 3642 histogram_tester().ExpectTotalCount( |
| 3761 "Prerender.websame_PrerenderNotSwappedInPLT", 0); | 3643 "Prerender.websame_PrerenderNotSwappedInPLT", 0); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 3784 } | 3666 } |
| 3785 | 3667 |
| 3786 // Checks that a deferred redirect to an image is not loaded until the | 3668 // Checks that a deferred redirect to an image is not loaded until the |
| 3787 // page is visible, even after another redirect. | 3669 // page is visible, even after another redirect. |
| 3788 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3670 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3789 PrerenderDeferredImageAfterRedirect) { | 3671 PrerenderDeferredImageAfterRedirect) { |
| 3790 DisableJavascriptCalls(); | 3672 DisableJavascriptCalls(); |
| 3791 | 3673 |
| 3792 // The prerender will not completely load until after the swap, so wait for a | 3674 // The prerender will not completely load until after the swap, so wait for a |
| 3793 // title change before calling DidPrerenderPass. | 3675 // title change before calling DidPrerenderPass. |
| 3794 scoped_ptr<TestPrerender> prerender = | 3676 scoped_ptr<TestPrerender> prerender = PrerenderTestURL( |
| 3795 PrerenderTestURL( | 3677 "/prerender/prerender_deferred_image.html", FINAL_STATUS_USED, 0); |
| 3796 "files/prerender/prerender_deferred_image.html", | |
| 3797 FINAL_STATUS_USED, 0); | |
| 3798 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); | 3678 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); |
| 3799 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); | 3679 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); |
| 3800 EXPECT_EQ(0, prerender->number_of_loads()); | 3680 EXPECT_EQ(0, prerender->number_of_loads()); |
| 3801 | 3681 |
| 3802 // Swap. | 3682 // Swap. |
| 3803 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), | 3683 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), |
| 3804 GetActiveWebContents()); | 3684 GetActiveWebContents()); |
| 3805 ui_test_utils::NavigateToURLWithDisposition( | 3685 ui_test_utils::NavigateToURLWithDisposition( |
| 3806 current_browser(), dest_url(), CURRENT_TAB, | 3686 current_browser(), dest_url(), CURRENT_TAB, |
| 3807 ui_test_utils::BROWSER_TEST_NONE); | 3687 ui_test_utils::BROWSER_TEST_NONE); |
| 3808 swap_observer.Wait(); | 3688 swap_observer.Wait(); |
| 3809 | 3689 |
| 3810 // The prerender never observes the final load. | 3690 // The prerender never observes the final load. |
| 3811 EXPECT_EQ(0, prerender->number_of_loads()); | 3691 EXPECT_EQ(0, prerender->number_of_loads()); |
| 3812 | 3692 |
| 3813 // Now check DidDisplayPass. | 3693 // Now check DidDisplayPass. |
| 3814 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); | 3694 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
| 3815 } | 3695 } |
| 3816 | 3696 |
| 3817 // Checks that deferred redirects in the main frame are followed. | 3697 // Checks that deferred redirects in the main frame are followed. |
| 3818 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredMainFrame) { | 3698 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredMainFrame) { |
| 3819 DisableJavascriptCalls(); | 3699 DisableJavascriptCalls(); |
| 3820 PrerenderTestURL( | 3700 PrerenderTestURL("/prerender/image-deferred.png", FINAL_STATUS_USED, 1); |
| 3821 "files/prerender/image-deferred.png", | |
| 3822 FINAL_STATUS_USED, 1); | |
| 3823 NavigateToDestURL(); | 3701 NavigateToDestURL(); |
| 3824 } | 3702 } |
| 3825 | 3703 |
| 3826 // Checks that deferred redirects in the main frame are followed, even | 3704 // Checks that deferred redirects in the main frame are followed, even |
| 3827 // with a double-redirect. | 3705 // with a double-redirect. |
| 3828 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3706 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3829 PrerenderDeferredMainFrameAfterRedirect) { | 3707 PrerenderDeferredMainFrameAfterRedirect) { |
| 3830 DisableJavascriptCalls(); | 3708 DisableJavascriptCalls(); |
| 3831 PrerenderTestURL( | 3709 PrerenderTestURL(CreateServerRedirect("/prerender/image-deferred.png"), |
| 3832 CreateServerRedirect("files/prerender/image-deferred.png"), | 3710 FINAL_STATUS_USED, 1); |
| 3833 FINAL_STATUS_USED, 1); | |
| 3834 NavigateToDestURL(); | 3711 NavigateToDestURL(); |
| 3835 } | 3712 } |
| 3836 | 3713 |
| 3837 // Checks that deferred redirects in a synchronous XHR abort the | 3714 // Checks that deferred redirects in a synchronous XHR abort the |
| 3838 // prerender. | 3715 // prerender. |
| 3839 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredSynchronousXHR) { | 3716 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredSynchronousXHR) { |
| 3840 RestorePrerenderMode restore_prerender_mode; | 3717 RestorePrerenderMode restore_prerender_mode; |
| 3841 PrerenderManager::SetMode( | 3718 PrerenderManager::SetMode( |
| 3842 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); | 3719 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); |
| 3843 PrerenderTestURL("files/prerender/prerender_deferred_sync_xhr.html", | 3720 PrerenderTestURL("/prerender/prerender_deferred_sync_xhr.html", |
| 3844 FINAL_STATUS_BAD_DEFERRED_REDIRECT, 0); | 3721 FINAL_STATUS_BAD_DEFERRED_REDIRECT, 0); |
| 3845 NavigateToDestURL(); | 3722 NavigateToDestURL(); |
| 3846 } | 3723 } |
| 3847 | 3724 |
| 3848 // Checks that prerenders are not swapped for navigations with extra headers. | 3725 // Checks that prerenders are not swapped for navigations with extra headers. |
| 3849 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExtraHeadersNoSwap) { | 3726 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExtraHeadersNoSwap) { |
| 3850 PrerenderTestURL("files/prerender/prerender_page.html", | 3727 PrerenderTestURL("/prerender/prerender_page.html", |
| 3851 FINAL_STATUS_APP_TERMINATING, 1); | 3728 FINAL_STATUS_APP_TERMINATING, 1); |
| 3852 | 3729 |
| 3853 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, | 3730 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, |
| 3854 ui::PAGE_TRANSITION_TYPED, false); | 3731 ui::PAGE_TRANSITION_TYPED, false); |
| 3855 params.extra_headers = "X-Custom-Header: 42\r\n"; | 3732 params.extra_headers = "X-Custom-Header: 42\r\n"; |
| 3856 NavigateToURLWithParams(params, false); | 3733 NavigateToURLWithParams(params, false); |
| 3857 } | 3734 } |
| 3858 | 3735 |
| 3859 // Checks that prerenders are not swapped for navigations with browser-initiated | 3736 // Checks that prerenders are not swapped for navigations with browser-initiated |
| 3860 // POST data. | 3737 // POST data. |
| 3861 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3738 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3862 PrerenderBrowserInitiatedPostNoSwap) { | 3739 PrerenderBrowserInitiatedPostNoSwap) { |
| 3863 PrerenderTestURL("files/prerender/prerender_page.html", | 3740 PrerenderTestURL("/prerender/prerender_page.html", |
| 3864 FINAL_STATUS_APP_TERMINATING, 1); | 3741 FINAL_STATUS_APP_TERMINATING, 1); |
| 3865 | 3742 |
| 3866 std::string post_data = "DATA"; | 3743 std::string post_data = "DATA"; |
| 3867 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, | 3744 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, |
| 3868 ui::PAGE_TRANSITION_TYPED, false); | 3745 ui::PAGE_TRANSITION_TYPED, false); |
| 3869 params.uses_post = true; | 3746 params.uses_post = true; |
| 3870 params.browser_initiated_post_data = | 3747 params.browser_initiated_post_data = |
| 3871 base::RefCountedString::TakeString(&post_data); | 3748 base::RefCountedString::TakeString(&post_data); |
| 3872 NavigateToURLWithParams(params, false); | 3749 NavigateToURLWithParams(params, false); |
| 3873 } | 3750 } |
| 3874 | 3751 |
| 3875 // Checks that the prerendering of a page is canceled correctly when the | 3752 // Checks that the prerendering of a page is canceled correctly when the |
| 3876 // prerendered page tries to make a second navigation entry. | 3753 // prerendered page tries to make a second navigation entry. |
| 3877 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNewNavigationEntry) { | 3754 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNewNavigationEntry) { |
| 3878 PrerenderTestURL("files/prerender/prerender_new_entry.html", | 3755 PrerenderTestURL("/prerender/prerender_new_entry.html", |
| 3879 FINAL_STATUS_NEW_NAVIGATION_ENTRY, | 3756 FINAL_STATUS_NEW_NAVIGATION_ENTRY, 1); |
| 3880 1); | |
| 3881 } | 3757 } |
| 3882 | 3758 |
| 3883 // Attempt a swap-in in a new tab. The session storage doesn't match, so it | 3759 // Attempt a swap-in in a new tab. The session storage doesn't match, so it |
| 3884 // should not swap. | 3760 // should not swap. |
| 3885 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageNewTab) { | 3761 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageNewTab) { |
| 3886 PrerenderTestURL("files/prerender/prerender_page.html", | 3762 PrerenderTestURL("/prerender/prerender_page.html", |
| 3887 FINAL_STATUS_APP_TERMINATING, 1); | 3763 FINAL_STATUS_APP_TERMINATING, 1); |
| 3888 | 3764 |
| 3889 // Open a new tab to navigate in. | 3765 // Open a new tab to navigate in. |
| 3890 ui_test_utils::NavigateToURLWithDisposition( | 3766 ui_test_utils::NavigateToURLWithDisposition( |
| 3891 current_browser(), GURL(url::kAboutBlankURL), NEW_FOREGROUND_TAB, | 3767 current_browser(), GURL(url::kAboutBlankURL), NEW_FOREGROUND_TAB, |
| 3892 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 3768 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
| 3893 | 3769 |
| 3894 // Now navigate in the new tab. | 3770 // Now navigate in the new tab. |
| 3895 NavigateToDestURLWithDisposition(CURRENT_TAB, false); | 3771 NavigateToDestURLWithDisposition(CURRENT_TAB, false); |
| 3896 } | 3772 } |
| 3897 | 3773 |
| 3898 // Checks that prerenders honor |should_replace_current_entry|. | 3774 // Checks that prerenders honor |should_replace_current_entry|. |
| 3899 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReplaceCurrentEntry) { | 3775 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReplaceCurrentEntry) { |
| 3900 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 3776 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 3901 | 3777 |
| 3902 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, | 3778 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, |
| 3903 ui::PAGE_TRANSITION_TYPED, false); | 3779 ui::PAGE_TRANSITION_TYPED, false); |
| 3904 params.should_replace_current_entry = true; | 3780 params.should_replace_current_entry = true; |
| 3905 NavigateToURLWithParams(params, false); | 3781 NavigateToURLWithParams(params, false); |
| 3906 | 3782 |
| 3907 const NavigationController& controller = | 3783 const NavigationController& controller = |
| 3908 GetActiveWebContents()->GetController(); | 3784 GetActiveWebContents()->GetController(); |
| 3909 // First entry is about:blank, second is prerender_page.html. | 3785 // First entry is about:blank, second is prerender_page.html. |
| 3910 EXPECT_TRUE(controller.GetPendingEntry() == NULL); | 3786 EXPECT_TRUE(controller.GetPendingEntry() == NULL); |
| 3911 EXPECT_EQ(2, controller.GetEntryCount()); | 3787 EXPECT_EQ(2, controller.GetEntryCount()); |
| 3912 EXPECT_EQ(GURL(url::kAboutBlankURL), controller.GetEntryAtIndex(0)->GetURL()); | 3788 EXPECT_EQ(GURL(url::kAboutBlankURL), controller.GetEntryAtIndex(0)->GetURL()); |
| 3913 EXPECT_EQ(dest_url(), controller.GetEntryAtIndex(1)->GetURL()); | 3789 EXPECT_EQ(dest_url(), controller.GetEntryAtIndex(1)->GetURL()); |
| 3914 } | 3790 } |
| 3915 | 3791 |
| 3916 // Checks that <a ping> requests are not dropped in prerender. | 3792 // Checks that <a ping> requests are not dropped in prerender. |
| 3917 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPing) { | 3793 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPing) { |
| 3918 // Count hits to a certain URL. | 3794 // Count hits to a certain URL. |
| 3919 const GURL kPingURL("http://prerender.test/ping"); | 3795 const GURL kPingURL("http://prerender.test/ping"); |
| 3920 base::FilePath empty_file = ui_test_utils::GetTestFilePath( | 3796 base::FilePath empty_file = ui_test_utils::GetTestFilePath( |
| 3921 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); | 3797 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); |
| 3922 RequestCounter ping_counter; | 3798 RequestCounter ping_counter; |
| 3923 BrowserThread::PostTask( | 3799 BrowserThread::PostTask( |
| 3924 BrowserThread::IO, FROM_HERE, | 3800 BrowserThread::IO, FROM_HERE, |
| 3925 base::Bind(&CreateCountingInterceptorOnIO, | 3801 base::Bind(&CreateCountingInterceptorOnIO, |
| 3926 kPingURL, empty_file, ping_counter.AsWeakPtr())); | 3802 kPingURL, empty_file, ping_counter.AsWeakPtr())); |
| 3927 | 3803 |
| 3928 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 3804 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 3929 OpenDestURLViaClickPing(kPingURL); | 3805 OpenDestURLViaClickPing(kPingURL); |
| 3930 | 3806 |
| 3931 ping_counter.WaitForCount(1); | 3807 ping_counter.WaitForCount(1); |
| 3932 } | 3808 } |
| 3933 | 3809 |
| 3934 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPPLTNormalNavigation) { | 3810 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPPLTNormalNavigation) { |
| 3935 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); | 3811 GURL url = embedded_test_server()->GetURL("/prerender/prerender_page.html"); |
| 3936 ui_test_utils::NavigateToURL(current_browser(), url); | 3812 ui_test_utils::NavigateToURL(current_browser(), url); |
| 3937 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 3813 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 3938 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 3814 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 3939 histogram_tester().ExpectTotalCount( | 3815 histogram_tester().ExpectTotalCount( |
| 3940 "Prerender.none_PerceivedPLTMatchedComplete", 0); | 3816 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 3941 } | 3817 } |
| 3942 | 3818 |
| 3943 // Checks that a prerender which calls window.close() on itself is aborted. | 3819 // Checks that a prerender which calls window.close() on itself is aborted. |
| 3944 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowClose) { | 3820 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowClose) { |
| 3945 DisableLoadEventCheck(); | 3821 DisableLoadEventCheck(); |
| 3946 PrerenderTestURL("files/prerender/prerender_window_close.html", | 3822 PrerenderTestURL("/prerender/prerender_window_close.html", |
| 3947 FINAL_STATUS_CLOSED, 0); | 3823 FINAL_STATUS_CLOSED, 0); |
| 3948 } | 3824 } |
| 3949 | 3825 |
| 3950 class PrerenderIncognitoBrowserTest : public PrerenderBrowserTest { | 3826 class PrerenderIncognitoBrowserTest : public PrerenderBrowserTest { |
| 3951 public: | 3827 public: |
| 3952 void SetUpOnMainThread() override { | 3828 void SetUpOnMainThread() override { |
| 3953 Profile* normal_profile = current_browser()->profile(); | 3829 Profile* normal_profile = current_browser()->profile(); |
| 3954 set_browser(OpenURLOffTheRecord(normal_profile, GURL("about:blank"))); | 3830 set_browser(OpenURLOffTheRecord(normal_profile, GURL("about:blank"))); |
| 3955 PrerenderBrowserTest::SetUpOnMainThread(); | 3831 PrerenderBrowserTest::SetUpOnMainThread(); |
| 3956 } | 3832 } |
| 3957 }; | 3833 }; |
| 3958 | 3834 |
| 3959 // Checks that prerendering works in incognito mode. | 3835 // Checks that prerendering works in incognito mode. |
| 3960 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) { | 3836 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) { |
| 3961 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 3837 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 3962 NavigateToDestURL(); | 3838 NavigateToDestURL(); |
| 3963 } | 3839 } |
| 3964 | 3840 |
| 3965 // Checks that prerenders are aborted when an incognito profile is closed. | 3841 // Checks that prerenders are aborted when an incognito profile is closed. |
| 3966 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, | 3842 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, |
| 3967 PrerenderIncognitoClosed) { | 3843 PrerenderIncognitoClosed) { |
| 3968 scoped_ptr<TestPrerender> prerender = | 3844 scoped_ptr<TestPrerender> prerender = PrerenderTestURL( |
| 3969 PrerenderTestURL("files/prerender/prerender_page.html", | 3845 "/prerender/prerender_page.html", FINAL_STATUS_PROFILE_DESTROYED, 1); |
| 3970 FINAL_STATUS_PROFILE_DESTROYED, 1); | |
| 3971 current_browser()->window()->Close(); | 3846 current_browser()->window()->Close(); |
| 3972 prerender->WaitForStop(); | 3847 prerender->WaitForStop(); |
| 3973 } | 3848 } |
| 3974 | 3849 |
| 3975 class PrerenderOmniboxBrowserTest : public PrerenderBrowserTest { | 3850 class PrerenderOmniboxBrowserTest : public PrerenderBrowserTest { |
| 3976 public: | 3851 public: |
| 3977 LocationBar* GetLocationBar() { | 3852 LocationBar* GetLocationBar() { |
| 3978 return current_browser()->window()->GetLocationBar(); | 3853 return current_browser()->window()->GetLocationBar(); |
| 3979 } | 3854 } |
| 3980 | 3855 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4013 return prerender.Pass(); | 3888 return prerender.Pass(); |
| 4014 } | 3889 } |
| 4015 }; | 3890 }; |
| 4016 | 3891 |
| 4017 // Checks that closing the omnibox popup cancels an omnibox prerender. | 3892 // Checks that closing the omnibox popup cancels an omnibox prerender. |
| 4018 // http://crbug.com/395152 | 3893 // http://crbug.com/395152 |
| 4019 IN_PROC_BROWSER_TEST_F(PrerenderOmniboxBrowserTest, | 3894 IN_PROC_BROWSER_TEST_F(PrerenderOmniboxBrowserTest, |
| 4020 DISABLED_PrerenderOmniboxCancel) { | 3895 DISABLED_PrerenderOmniboxCancel) { |
| 4021 // Fake an omnibox prerender. | 3896 // Fake an omnibox prerender. |
| 4022 scoped_ptr<TestPrerender> prerender = StartOmniboxPrerender( | 3897 scoped_ptr<TestPrerender> prerender = StartOmniboxPrerender( |
| 4023 test_server()->GetURL("files/empty.html"), | 3898 embedded_test_server()->GetURL("/empty.html"), FINAL_STATUS_CANCELLED); |
| 4024 FINAL_STATUS_CANCELLED); | |
| 4025 | 3899 |
| 4026 // Revert the location bar. This should cancel the prerender. | 3900 // Revert the location bar. This should cancel the prerender. |
| 4027 GetLocationBar()->Revert(); | 3901 GetLocationBar()->Revert(); |
| 4028 prerender->WaitForStop(); | 3902 prerender->WaitForStop(); |
| 4029 } | 3903 } |
| 4030 | 3904 |
| 4031 // Checks that accepting omnibox input abandons an omnibox prerender. | 3905 // Checks that accepting omnibox input abandons an omnibox prerender. |
| 4032 // http://crbug.com/394592 | 3906 // http://crbug.com/394592 |
| 4033 IN_PROC_BROWSER_TEST_F(PrerenderOmniboxBrowserTest, | 3907 IN_PROC_BROWSER_TEST_F(PrerenderOmniboxBrowserTest, |
| 4034 DISABLED_PrerenderOmniboxAbandon) { | 3908 DISABLED_PrerenderOmniboxAbandon) { |
| 4035 // Set the abandon timeout to something high so it does not introduce | 3909 // Set the abandon timeout to something high so it does not introduce |
| 4036 // flakiness if the prerender times out before the test completes. | 3910 // flakiness if the prerender times out before the test completes. |
| 4037 GetPrerenderManager()->mutable_config().abandon_time_to_live = | 3911 GetPrerenderManager()->mutable_config().abandon_time_to_live = |
| 4038 base::TimeDelta::FromDays(999); | 3912 base::TimeDelta::FromDays(999); |
| 4039 | 3913 |
| 4040 // Enter a URL into the Omnibox. | 3914 // Enter a URL into the Omnibox. |
| 4041 OmniboxView* omnibox_view = GetOmniboxView(); | 3915 OmniboxView* omnibox_view = GetOmniboxView(); |
| 4042 omnibox_view->OnBeforePossibleChange(); | 3916 omnibox_view->OnBeforePossibleChange(); |
| 4043 omnibox_view->SetUserText( | 3917 omnibox_view->SetUserText(base::UTF8ToUTF16( |
| 4044 base::UTF8ToUTF16(test_server()->GetURL("files/empty.html?1").spec())); | 3918 embedded_test_server()->GetURL("/empty.html?1").spec())); |
| 4045 omnibox_view->OnAfterPossibleChange(); | 3919 omnibox_view->OnAfterPossibleChange(); |
| 4046 WaitForAutocompleteDone(omnibox_view); | 3920 WaitForAutocompleteDone(omnibox_view); |
| 4047 | 3921 |
| 4048 // Fake an omnibox prerender for a different URL. | 3922 // Fake an omnibox prerender for a different URL. |
| 4049 scoped_ptr<TestPrerender> prerender = StartOmniboxPrerender( | 3923 scoped_ptr<TestPrerender> prerender = |
| 4050 test_server()->GetURL("files/empty.html?2"), | 3924 StartOmniboxPrerender(embedded_test_server()->GetURL("/empty.html?2"), |
| 4051 FINAL_STATUS_APP_TERMINATING); | 3925 FINAL_STATUS_APP_TERMINATING); |
| 4052 | 3926 |
| 4053 // The final status may be either FINAL_STATUS_APP_TERMINATING or | 3927 // The final status may be either FINAL_STATUS_APP_TERMINATING or |
| 4054 // FINAL_STATUS_CANCELLED. Although closing the omnibox will not cancel an | 3928 // FINAL_STATUS_CANCELLED. Although closing the omnibox will not cancel an |
| 4055 // abandoned prerender, the AutocompleteActionPredictor will cancel the | 3929 // abandoned prerender, the AutocompleteActionPredictor will cancel the |
| 4056 // predictor on destruction. | 3930 // predictor on destruction. |
| 4057 prerender->contents()->set_skip_final_checks(true); | 3931 prerender->contents()->set_skip_final_checks(true); |
| 4058 | 3932 |
| 4059 // Navigate to the URL entered. | 3933 // Navigate to the URL entered. |
| 4060 omnibox_view->model()->AcceptInput(CURRENT_TAB, false); | 3934 omnibox_view->model()->AcceptInput(CURRENT_TAB, false); |
| 4061 | 3935 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 4080 // Check that NaCl plugins work when enabled, with prerendering. | 3954 // Check that NaCl plugins work when enabled, with prerendering. |
| 4081 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithNaCl, | 3955 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithNaCl, |
| 4082 PrerenderNaClPluginEnabled) { | 3956 PrerenderNaClPluginEnabled) { |
| 4083 #if defined(OS_WIN) && defined(USE_ASH) | 3957 #if defined(OS_WIN) && defined(USE_ASH) |
| 4084 // Disable this test in Metro+Ash for now (http://crbug.com/262796). | 3958 // Disable this test in Metro+Ash for now (http://crbug.com/262796). |
| 4085 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 3959 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 4086 switches::kAshBrowserTests)) | 3960 switches::kAshBrowserTests)) |
| 4087 return; | 3961 return; |
| 4088 #endif | 3962 #endif |
| 4089 | 3963 |
| 4090 PrerenderTestURL("files/prerender/prerender_plugin_nacl_enabled.html", | 3964 PrerenderTestURL("/prerender/prerender_plugin_nacl_enabled.html", |
| 4091 FINAL_STATUS_USED, | 3965 FINAL_STATUS_USED, 1); |
| 4092 1); | |
| 4093 NavigateToDestURL(); | 3966 NavigateToDestURL(); |
| 4094 | 3967 |
| 4095 // To avoid any chance of a race, we have to let the script send its response | 3968 // To avoid any chance of a race, we have to let the script send its response |
| 4096 // asynchronously. | 3969 // asynchronously. |
| 4097 WebContents* web_contents = | 3970 WebContents* web_contents = |
| 4098 browser()->tab_strip_model()->GetActiveWebContents(); | 3971 browser()->tab_strip_model()->GetActiveWebContents(); |
| 4099 bool display_test_result = false; | 3972 bool display_test_result = false; |
| 4100 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(web_contents, | 3973 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(web_contents, |
| 4101 "DidDisplayReallyPass()", | 3974 "DidDisplayReallyPass()", |
| 4102 &display_test_result)); | 3975 &display_test_result)); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 4117 return task_management::WebContentsTagsManager::GetInstance()-> | 3990 return task_management::WebContentsTagsManager::GetInstance()-> |
| 4118 tracked_tags(); | 3991 tracked_tags(); |
| 4119 } | 3992 } |
| 4120 | 3993 |
| 4121 // Tests the correct recording of tags for the prerender WebContents. | 3994 // Tests the correct recording of tags for the prerender WebContents. |
| 4122 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, TaskManagementTagsBasic) { | 3995 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, TaskManagementTagsBasic) { |
| 4123 // Browser tests start with a single tab. | 3996 // Browser tests start with a single tab. |
| 4124 EXPECT_EQ(1U, GetTrackedTags().size()); | 3997 EXPECT_EQ(1U, GetTrackedTags().size()); |
| 4125 | 3998 |
| 4126 // Start prerendering a page and make sure it's correctly tagged. | 3999 // Start prerendering a page and make sure it's correctly tagged. |
| 4127 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 4000 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 4128 EXPECT_EQ(2U, GetTrackedTags().size()); | 4001 EXPECT_EQ(2U, GetTrackedTags().size()); |
| 4129 | 4002 |
| 4130 // Swap in the prerendered content and make sure its tag is removed. | 4003 // Swap in the prerendered content and make sure its tag is removed. |
| 4131 NavigateToDestURL(); | 4004 NavigateToDestURL(); |
| 4132 EXPECT_EQ(1U, GetTrackedTags().size()); | 4005 EXPECT_EQ(1U, GetTrackedTags().size()); |
| 4133 } | 4006 } |
| 4134 | 4007 |
| 4135 // Tests that the task manager will be provided by tasks that correspond to | 4008 // Tests that the task manager will be provided by tasks that correspond to |
| 4136 // prerendered WebContents. | 4009 // prerendered WebContents. |
| 4137 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, TaskManagementTasksProvided) { | 4010 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, TaskManagementTasksProvided) { |
| 4138 task_management::MockWebContentsTaskManager task_manager; | 4011 task_management::MockWebContentsTaskManager task_manager; |
| 4139 // Browser tests start with a single tab. | 4012 // Browser tests start with a single tab. |
| 4140 EXPECT_EQ(1U, GetTrackedTags().size()); | 4013 EXPECT_EQ(1U, GetTrackedTags().size()); |
| 4141 | 4014 |
| 4142 task_manager.StartObserving(); | 4015 task_manager.StartObserving(); |
| 4143 | 4016 |
| 4144 // The pre-existing tab is provided. | 4017 // The pre-existing tab is provided. |
| 4145 EXPECT_EQ(1U, task_manager.tasks().size()); | 4018 EXPECT_EQ(1U, task_manager.tasks().size()); |
| 4146 | 4019 |
| 4147 // Start prerendering a page. | 4020 // Start prerendering a page. |
| 4148 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 4021 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 4149 | 4022 |
| 4150 EXPECT_EQ(2U, GetTrackedTags().size()); | 4023 EXPECT_EQ(2U, GetTrackedTags().size()); |
| 4151 ASSERT_EQ(2U, task_manager.tasks().size()); | 4024 ASSERT_EQ(2U, task_manager.tasks().size()); |
| 4152 | 4025 |
| 4153 const task_management::Task* task = task_manager.tasks().back(); | 4026 const task_management::Task* task = task_manager.tasks().back(); |
| 4154 EXPECT_EQ(task_management::Task::RENDERER, task->GetType()); | 4027 EXPECT_EQ(task_management::Task::RENDERER, task->GetType()); |
| 4155 const base::string16 title = task->title(); | 4028 const base::string16 title = task->title(); |
| 4156 const base::string16 expected_prefix = GetPrerenderTitlePrefix(); | 4029 const base::string16 expected_prefix = GetPrerenderTitlePrefix(); |
| 4157 EXPECT_TRUE(base::StartsWith(title, | 4030 EXPECT_TRUE(base::StartsWith(title, |
| 4158 expected_prefix, | 4031 expected_prefix, |
| 4159 base::CompareCase::INSENSITIVE_ASCII)); | 4032 base::CompareCase::INSENSITIVE_ASCII)); |
| 4160 | 4033 |
| 4161 NavigateToDestURL(); | 4034 NavigateToDestURL(); |
| 4162 EXPECT_EQ(1U, task_manager.tasks().size()); | 4035 EXPECT_EQ(1U, task_manager.tasks().size()); |
| 4163 } | 4036 } |
| 4164 | 4037 |
| 4165 } // namespace | 4038 } // namespace |
| 4166 | 4039 |
| 4167 #endif // defined(ENABLE_TASK_MANAGER) | 4040 #endif // defined(ENABLE_TASK_MANAGER) |
| 4168 | 4041 |
| 4169 } // namespace prerender | 4042 } // namespace prerender |
| OLD | NEW |