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 |