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