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