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

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

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

Powered by Google App Engine
This is Rietveld 408576698