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

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

Issue 2537503002: [Prerender] Get the prerender mode from Finch field trial. (Closed)
Patch Set: Feature API Created 4 years 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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/strings/string16.h" 6 #include "base/strings/string16.h"
7 #include "base/strings/string_split.h" 7 #include "base/strings/string_split.h"
8 #include "base/task_scheduler/post_task.h" 8 #include "base/task_scheduler/post_task.h"
9 #include "chrome/browser/history/history_service_factory.h" 9 #include "chrome/browser/history/history_service_factory.h"
10 #include "chrome/browser/history/history_test_utils.h" 10 #include "chrome/browser/history/history_test_utils.h"
11 #include "chrome/browser/prerender/prerender_handle.h" 11 #include "chrome/browser/prerender/prerender_handle.h"
12 #include "chrome/browser/prerender/prerender_manager.h" 12 #include "chrome/browser/prerender/prerender_manager.h"
13 #include "chrome/browser/prerender/prerender_manager_factory.h" 13 #include "chrome/browser/prerender/prerender_manager_factory.h"
14 #include "chrome/browser/prerender/prerender_test_utils.h" 14 #include "chrome/browser/prerender/prerender_test_utils.h"
15 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/task_manager/task_manager_browsertest_util.h" 16 #include "chrome/browser/task_manager/task_manager_browsertest_util.h"
17 #include "chrome/browser/ui/browser.h" 17 #include "chrome/browser/ui/browser.h"
18 #include "chrome/browser/ui/browser_commands.h" 18 #include "chrome/browser/ui/browser_commands.h"
19 #include "chrome/browser/ui/tabs/tab_strip_model.h" 19 #include "chrome/browser/ui/tabs/tab_strip_model.h"
20 #include "chrome/common/chrome_switches.h" 20 #include "chrome/common/chrome_switches.h"
21 #include "chrome/grit/generated_resources.h" 21 #include "chrome/grit/generated_resources.h"
22 #include "chrome/test/base/ui_test_utils.h" 22 #include "chrome/test/base/ui_test_utils.h"
23 #include "content/public/common/content_switches.h"
24 #include "content/public/common/url_constants.h" 23 #include "content/public/common/url_constants.h"
25 #include "content/public/test/browser_test_utils.h" 24 #include "content/public/test/browser_test_utils.h"
26 #include "net/base/escape.h" 25 #include "net/base/escape.h"
27 #include "net/dns/mock_host_resolver.h" 26 #include "net/dns/mock_host_resolver.h"
28 #include "net/test/embedded_test_server/request_handler_util.h" 27 #include "net/test/embedded_test_server/request_handler_util.h"
29 #include "testing/gtest/include/gtest/gtest.h" 28 #include "testing/gtest/include/gtest/gtest.h"
30 #include "ui/base/l10n/l10n_util.h" 29 #include "ui/base/l10n/l10n_util.h"
31 30
32 using prerender::test_utils::CreateCountingInterceptorOnIO; 31 using prerender::test_utils::CreateCountingInterceptorOnIO;
33 using prerender::test_utils::CreatePrefetchOnlyInterceptorOnIO; 32 using prerender::test_utils::CreatePrefetchOnlyInterceptorOnIO;
(...skipping 18 matching lines...) Expand all
52 const char kPrefetchScript[] = "prerender/prefetch.js"; 51 const char kPrefetchScript[] = "prerender/prefetch.js";
53 const char kPrefetchScript2[] = "prerender/prefetch2.js"; 52 const char kPrefetchScript2[] = "prerender/prefetch2.js";
54 const char kPrefetchSubresourceRedirectPage[] = 53 const char kPrefetchSubresourceRedirectPage[] =
55 "prerender/prefetch_subresource_redirect.html"; 54 "prerender/prefetch_subresource_redirect.html";
56 55
57 class NoStatePrefetchBrowserTest 56 class NoStatePrefetchBrowserTest
58 : public test_utils::PrerenderInProcessBrowserTest { 57 : public test_utils::PrerenderInProcessBrowserTest {
59 public: 58 public:
60 NoStatePrefetchBrowserTest() {} 59 NoStatePrefetchBrowserTest() {}
61 60
62 void SetUpCommandLine(base::CommandLine* command_line) override {
63 PrerenderInProcessBrowserTest::SetUpCommandLine(command_line);
64 command_line->AppendSwitchASCII(
65 switches::kPrerenderMode, switches::kPrerenderModeSwitchValuePrefetch);
66 }
67
68 // Set up a request counter for |path|, which is also the location of the data 61 // Set up a request counter for |path|, which is also the location of the data
69 // served by the request. 62 // served by the request.
70 void CountRequestFor(const std::string& path_str, RequestCounter* counter) { 63 void CountRequestFor(const std::string& path_str, RequestCounter* counter) {
71 url::StringPieceReplacements<base::FilePath::StringType> replacement; 64 url::StringPieceReplacements<base::FilePath::StringType> replacement;
72 base::FilePath file_path = base::FilePath::FromUTF8Unsafe(path_str); 65 base::FilePath file_path = base::FilePath::FromUTF8Unsafe(path_str);
73 replacement.SetPathStr(file_path.value()); 66 replacement.SetPathStr(file_path.value());
74 const GURL url = src_server()->base_url().ReplaceComponents(replacement); 67 const GURL url = src_server()->base_url().ReplaceComponents(replacement);
75 CountRequestForUrl(url, path_str, counter); 68 CountRequestForUrl(url, path_str, counter);
76 } 69 }
77 70
(...skipping 30 matching lines...) Expand all
108 expected_final_status); 101 expected_final_status);
109 } 102 }
110 103
111 private: 104 private:
112 DISALLOW_COPY_AND_ASSIGN(NoStatePrefetchBrowserTest); 105 DISALLOW_COPY_AND_ASSIGN(NoStatePrefetchBrowserTest);
113 }; 106 };
114 107
115 // Checks that a page is correctly prefetched in the case of a 108 // Checks that a page is correctly prefetched in the case of a
116 // <link rel=prerender> tag and the JavaScript on the page is not executed. 109 // <link rel=prerender> tag and the JavaScript on the page is not executed.
117 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimple) { 110 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimple) {
111 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
pasko 2016/12/01 16:47:58 that's very repetitive, can we do it in c-tor or S
droger 2016/12/01 17:17:41 No. One option would be to keep the SetUpCommandL
droger 2016/12/01 17:39:49 Maybe I spoke too soon, as SetupOnMainThread() see
112
118 RequestCounter main_counter; 113 RequestCounter main_counter;
119 CountRequestFor(kPrefetchPage, &main_counter); 114 CountRequestFor(kPrefetchPage, &main_counter);
120 RequestCounter script_counter; 115 RequestCounter script_counter;
121 CountRequestFor(kPrefetchScript, &script_counter); 116 CountRequestFor(kPrefetchScript, &script_counter);
122 RequestCounter script2_counter; 117 RequestCounter script2_counter;
123 CountRequestFor(kPrefetchScript2, &script2_counter); 118 CountRequestFor(kPrefetchScript2, &script2_counter);
124 119
125 std::unique_ptr<TestPrerender> test_prerender = 120 std::unique_ptr<TestPrerender> test_prerender =
126 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 121 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
127 main_counter.WaitForCount(1); 122 main_counter.WaitForCount(1);
128 script_counter.WaitForCount(1); 123 script_counter.WaitForCount(1);
129 script2_counter.WaitForCount(0); 124 script2_counter.WaitForCount(0);
130 125
131 // Verify that the page load did not happen. 126 // Verify that the page load did not happen.
132 test_prerender->WaitForLoads(0); 127 test_prerender->WaitForLoads(0);
133 } 128 }
134 129
135 // Check that the LOAD_PREFETCH flag is set. 130 // Check that the LOAD_PREFETCH flag is set.
136 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchLoadFlag) { 131 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchLoadFlag) {
132 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
133
137 RequestCounter main_counter; 134 RequestCounter main_counter;
138 RequestCounter script_counter; 135 RequestCounter script_counter;
139 content::BrowserThread::PostTask( 136 content::BrowserThread::PostTask(
140 content::BrowserThread::IO, FROM_HERE, 137 content::BrowserThread::IO, FROM_HERE,
141 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, 138 base::Bind(&CreatePrefetchOnlyInterceptorOnIO,
142 src_server()->GetURL(MakeAbsolute(kPrefetchPage)), 139 src_server()->GetURL(MakeAbsolute(kPrefetchPage)),
143 main_counter.AsWeakPtr())); 140 main_counter.AsWeakPtr()));
144 content::BrowserThread::PostTask( 141 content::BrowserThread::PostTask(
145 content::BrowserThread::IO, FROM_HERE, 142 content::BrowserThread::IO, FROM_HERE,
146 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, 143 base::Bind(&CreatePrefetchOnlyInterceptorOnIO,
147 src_server()->GetURL(MakeAbsolute(kPrefetchScript)), 144 src_server()->GetURL(MakeAbsolute(kPrefetchScript)),
148 script_counter.AsWeakPtr())); 145 script_counter.AsWeakPtr()));
149 146
150 std::unique_ptr<TestPrerender> test_prerender = 147 std::unique_ptr<TestPrerender> test_prerender =
151 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 148 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
152 main_counter.WaitForCount(1); 149 main_counter.WaitForCount(1);
153 script_counter.WaitForCount(1); 150 script_counter.WaitForCount(1);
154 151
155 // Verify that the page load did not happen. 152 // Verify that the page load did not happen.
156 test_prerender->WaitForLoads(0); 153 test_prerender->WaitForLoads(0);
157 } 154 }
158 155
159 // Checks the prefetch of an img tag. 156 // Checks the prefetch of an img tag.
160 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchImage) { 157 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchImage) {
158 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
159
161 RequestCounter image_counter; 160 RequestCounter image_counter;
162 CountRequestFor(kPrefetchJpeg, &image_counter); 161 CountRequestFor(kPrefetchJpeg, &image_counter);
163 base::StringPairs replacement_text; 162 base::StringPairs replacement_text;
164 replacement_text.push_back( 163 replacement_text.push_back(
165 std::make_pair("REPLACE_WITH_IMAGE_URL", MakeAbsolute(kPrefetchJpeg))); 164 std::make_pair("REPLACE_WITH_IMAGE_URL", MakeAbsolute(kPrefetchJpeg)));
166 std::string main_page_path; 165 std::string main_page_path;
167 net::test_server::GetFilePathWithReplacements( 166 net::test_server::GetFilePathWithReplacements(
168 kPrefetchImagePage, replacement_text, &main_page_path); 167 kPrefetchImagePage, replacement_text, &main_page_path);
169 // Note CountRequestFor cannot be used on the main page as the test server 168 // Note CountRequestFor cannot be used on the main page as the test server
170 // must handling the image url replacement. 169 // must handling the image url replacement.
171 PrefetchFromFile(main_page_path, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 170 PrefetchFromFile(main_page_path, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
172 image_counter.WaitForCount(1); 171 image_counter.WaitForCount(1);
173 } 172 }
174 173
175 // Checks that a cross-domain prefetching works correctly. 174 // Checks that a cross-domain prefetching works correctly.
176 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchCrossDomain) { 175 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchCrossDomain) {
176 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
177
177 static const std::string secondary_domain = "www.foo.com"; 178 static const std::string secondary_domain = "www.foo.com";
178 host_resolver()->AddRule(secondary_domain, "127.0.0.1"); 179 host_resolver()->AddRule(secondary_domain, "127.0.0.1");
179 GURL cross_domain_url(base::StringPrintf( 180 GURL cross_domain_url(base::StringPrintf(
180 "http://%s:%d/%s", secondary_domain.c_str(), 181 "http://%s:%d/%s", secondary_domain.c_str(),
181 embedded_test_server()->host_port_pair().port(), kPrefetchPage)); 182 embedded_test_server()->host_port_pair().port(), kPrefetchPage));
182 RequestCounter cross_domain_counter; 183 RequestCounter cross_domain_counter;
183 CountRequestForUrl(cross_domain_url, kPrefetchPage, &cross_domain_counter); 184 CountRequestForUrl(cross_domain_url, kPrefetchPage, &cross_domain_counter);
184 PrefetchFromURL(cross_domain_url, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 185 PrefetchFromURL(cross_domain_url, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
185 cross_domain_counter.WaitForCount(1); 186 cross_domain_counter.WaitForCount(1);
186 } 187 }
187 188
188 // Checks that response header CSP is respected. 189 // Checks that response header CSP is respected.
189 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, ResponseHeaderCSP) { 190 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, ResponseHeaderCSP) {
191 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
192
190 static const std::string secondary_domain = "foo.bar"; 193 static const std::string secondary_domain = "foo.bar";
191 host_resolver()->AddRule(secondary_domain, "127.0.0.1"); 194 host_resolver()->AddRule(secondary_domain, "127.0.0.1");
192 RequestCounter main_page; 195 RequestCounter main_page;
193 CountRequestFor(kPrefetchResponseHeaderCSP, &main_page); 196 CountRequestFor(kPrefetchResponseHeaderCSP, &main_page);
194 RequestCounter first_script; 197 RequestCounter first_script;
195 CountRequestFor(kPrefetchScript, &first_script); 198 CountRequestFor(kPrefetchScript, &first_script);
196 RequestCounter second_script; 199 RequestCounter second_script;
197 GURL second_script_url(std::string("http://foo.bar/") + kPrefetchScript2); 200 GURL second_script_url(std::string("http://foo.bar/") + kPrefetchScript2);
198 CountRequestForUrl(second_script_url, kPrefetchScript2, &second_script); 201 CountRequestForUrl(second_script_url, kPrefetchScript2, &second_script);
199 PrefetchFromFile(kPrefetchResponseHeaderCSP, 202 PrefetchFromFile(kPrefetchResponseHeaderCSP,
200 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 203 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
201 // The second script is in the correct domain for CSP, but the first script is 204 // The second script is in the correct domain for CSP, but the first script is
202 // not. 205 // not.
203 main_page.WaitForCount(1); 206 main_page.WaitForCount(1);
204 second_script.WaitForCount(1); 207 second_script.WaitForCount(1);
205 first_script.WaitForCount(0); 208 first_script.WaitForCount(0);
206 } 209 }
207 210
208 // Checks that CSP in the meta tag cancels the prefetch. 211 // Checks that CSP in the meta tag cancels the prefetch.
209 // TODO(mattcary): probably this behavior should be consistent with 212 // TODO(mattcary): probably this behavior should be consistent with
210 // response-header CSP. See crbug/656581. 213 // response-header CSP. See crbug/656581.
211 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, MetaTagCSP) { 214 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, MetaTagCSP) {
215 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
216
212 static const std::string secondary_domain = "foo.bar"; 217 static const std::string secondary_domain = "foo.bar";
213 host_resolver()->AddRule(secondary_domain, "127.0.0.1"); 218 host_resolver()->AddRule(secondary_domain, "127.0.0.1");
214 RequestCounter main_page; 219 RequestCounter main_page;
215 CountRequestFor(kPrefetchMetaCSP, &main_page); 220 CountRequestFor(kPrefetchMetaCSP, &main_page);
216 RequestCounter first_script; 221 RequestCounter first_script;
217 CountRequestFor(kPrefetchScript, &first_script); 222 CountRequestFor(kPrefetchScript, &first_script);
218 RequestCounter second_script; 223 RequestCounter second_script;
219 GURL second_script_url(std::string("http://foo.bar/") + kPrefetchScript2); 224 GURL second_script_url(std::string("http://foo.bar/") + kPrefetchScript2);
220 CountRequestForUrl(second_script_url, kPrefetchScript2, &second_script); 225 CountRequestForUrl(second_script_url, kPrefetchScript2, &second_script);
221 PrefetchFromFile(kPrefetchMetaCSP, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 226 PrefetchFromFile(kPrefetchMetaCSP, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
222 // TODO(mattcary): See test comment above. If the meta CSP tag were parsed, 227 // TODO(mattcary): See test comment above. If the meta CSP tag were parsed,
223 // |second_script| would be loaded. Instead as the background scanner bails as 228 // |second_script| would be loaded. Instead as the background scanner bails as
224 // soon as the meta CSP tag is seen, only |main_page| is fetched. 229 // soon as the meta CSP tag is seen, only |main_page| is fetched.
225 main_page.WaitForCount(1); 230 main_page.WaitForCount(1);
226 second_script.WaitForCount(0); 231 second_script.WaitForCount(0);
227 first_script.WaitForCount(0); 232 first_script.WaitForCount(0);
228 } 233 }
229 234
230 // Checks that the second prefetch request succeeds. This test waits for 235 // Checks that the second prefetch request succeeds. This test waits for
231 // Prerender Stop before starting the second request. 236 // Prerender Stop before starting the second request.
232 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchMultipleRequest) { 237 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchMultipleRequest) {
238 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
239
233 RequestCounter first_main_counter; 240 RequestCounter first_main_counter;
234 CountRequestFor(kPrefetchPage, &first_main_counter); 241 CountRequestFor(kPrefetchPage, &first_main_counter);
235 RequestCounter second_main_counter; 242 RequestCounter second_main_counter;
236 CountRequestFor(kPrefetchPage2, &second_main_counter); 243 CountRequestFor(kPrefetchPage2, &second_main_counter);
237 RequestCounter first_script_counter; 244 RequestCounter first_script_counter;
238 CountRequestFor(kPrefetchScript, &first_script_counter); 245 CountRequestFor(kPrefetchScript, &first_script_counter);
239 RequestCounter second_script_counter; 246 RequestCounter second_script_counter;
240 CountRequestFor(kPrefetchScript2, &second_script_counter); 247 CountRequestFor(kPrefetchScript2, &second_script_counter);
241 248
242 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 249 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
243 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 250 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
244 first_main_counter.WaitForCount(1); 251 first_main_counter.WaitForCount(1);
245 second_main_counter.WaitForCount(1); 252 second_main_counter.WaitForCount(1);
246 first_script_counter.WaitForCount(1); 253 first_script_counter.WaitForCount(1);
247 second_script_counter.WaitForCount(1); 254 second_script_counter.WaitForCount(1);
248 } 255 }
249 256
250 // Checks that a second prefetch request, started before the first stops, 257 // Checks that a second prefetch request, started before the first stops,
251 // succeeds. 258 // succeeds.
252 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimultaneous) { 259 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimultaneous) {
260 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
261
253 RequestCounter second_main_counter; 262 RequestCounter second_main_counter;
254 CountRequestFor(kPrefetchPage2, &second_main_counter); 263 CountRequestFor(kPrefetchPage2, &second_main_counter);
255 RequestCounter second_script_counter; 264 RequestCounter second_script_counter;
256 CountRequestFor(kPrefetchScript2, &second_script_counter); 265 CountRequestFor(kPrefetchScript2, &second_script_counter);
257 266
258 GURL first_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); 267 GURL first_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage));
259 base::FilePath first_path = ui_test_utils::GetTestFilePath( 268 base::FilePath first_path = ui_test_utils::GetTestFilePath(
260 base::FilePath(), base::FilePath().AppendASCII(kPrefetchPage)); 269 base::FilePath(), base::FilePath().AppendASCII(kPrefetchPage));
261 270
262 content::BrowserThread::PostTask( 271 content::BrowserThread::PostTask(
263 content::BrowserThread::IO, FROM_HERE, 272 content::BrowserThread::IO, FROM_HERE,
264 base::Bind(&test_utils::CreateHangingFirstRequestInterceptorOnIO, 273 base::Bind(&test_utils::CreateHangingFirstRequestInterceptorOnIO,
265 first_url, first_path, base::Closure())); 274 first_url, first_path, base::Closure()));
266 275
267 // Start the first prefetch directly instead of via PrefetchFromFile for the 276 // Start the first prefetch directly instead of via PrefetchFromFile for the
268 // first prefetch to avoid the wait on prerender stop. 277 // first prefetch to avoid the wait on prerender stop.
269 GURL first_loader_url = ServeLoaderURL( 278 GURL first_loader_url = ServeLoaderURL(
270 kPrefetchLoaderPath, "REPLACE_WITH_PREFETCH_URL", first_url, ""); 279 kPrefetchLoaderPath, "REPLACE_WITH_PREFETCH_URL", first_url, "");
271 std::vector<FinalStatus> first_expected_status_queue(1, 280 std::vector<FinalStatus> first_expected_status_queue(1,
272 FINAL_STATUS_CANCELLED); 281 FINAL_STATUS_CANCELLED);
273 NavigateWithPrerenders(first_loader_url, first_expected_status_queue); 282 NavigateWithPrerenders(first_loader_url, first_expected_status_queue);
274 283
275 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 284 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
276 second_main_counter.WaitForCount(1); 285 second_main_counter.WaitForCount(1);
277 second_script_counter.WaitForCount(1); 286 second_script_counter.WaitForCount(1);
278 } 287 }
279 288
280 // Checks a prefetch to a nonexisting page. 289 // Checks a prefetch to a nonexisting page.
281 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchNonexisting) { 290 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchNonexisting) {
291 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
292
282 std::unique_ptr<TestPrerender> test_prerender = PrefetchFromFile( 293 std::unique_ptr<TestPrerender> test_prerender = PrefetchFromFile(
283 "nonexisting-page.html", FINAL_STATUS_UNSUPPORTED_SCHEME); 294 "nonexisting-page.html", FINAL_STATUS_UNSUPPORTED_SCHEME);
284 } 295 }
285 296
286 // Checks that a 301 redirect is followed. 297 // Checks that a 301 redirect is followed.
287 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Redirect) { 298 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Redirect) {
299 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
300
288 RequestCounter script_counter; 301 RequestCounter script_counter;
289 CountRequestFor(kPrefetchScript, &script_counter); 302 CountRequestFor(kPrefetchScript, &script_counter);
290 PrefetchFromFile( 303 PrefetchFromFile(
291 "/server-redirect/?" + 304 "/server-redirect/?" +
292 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false), 305 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false),
293 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 306 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
294 script_counter.WaitForCount(1); 307 script_counter.WaitForCount(1);
295 } 308 }
296 309
297 // Checks that the load flags are set correctly for all resources in a 301 310 // Checks that the load flags are set correctly for all resources in a 301
298 // redirect chain. 311 // redirect chain.
299 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301LoadFlags) { 312 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301LoadFlags) {
313 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
314
300 std::string redirect_path = 315 std::string redirect_path =
301 "/server-redirect/?" + 316 "/server-redirect/?" +
302 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false); 317 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false);
303 GURL redirect_url = src_server()->GetURL(redirect_path); 318 GURL redirect_url = src_server()->GetURL(redirect_path);
304 GURL page_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); 319 GURL page_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage));
305 RequestCounter redirect_counter; 320 RequestCounter redirect_counter;
306 content::BrowserThread::PostTask( 321 content::BrowserThread::PostTask(
307 content::BrowserThread::IO, FROM_HERE, 322 content::BrowserThread::IO, FROM_HERE,
308 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, redirect_url, 323 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, redirect_url,
309 redirect_counter.AsWeakPtr())); 324 redirect_counter.AsWeakPtr()));
310 RequestCounter page_counter; 325 RequestCounter page_counter;
311 content::BrowserThread::PostTask( 326 content::BrowserThread::PostTask(
312 content::BrowserThread::IO, FROM_HERE, 327 content::BrowserThread::IO, FROM_HERE,
313 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, page_url, 328 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, page_url,
314 page_counter.AsWeakPtr())); 329 page_counter.AsWeakPtr()));
315 PrefetchFromFile(redirect_path, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 330 PrefetchFromFile(redirect_path, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
316 redirect_counter.WaitForCount(1); 331 redirect_counter.WaitForCount(1);
317 page_counter.WaitForCount(1); 332 page_counter.WaitForCount(1);
318 } 333 }
319 334
320 // Checks that a subresource 301 redirect is followed. 335 // Checks that a subresource 301 redirect is followed.
321 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Subresource) { 336 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Subresource) {
337 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
338
322 RequestCounter script_counter; 339 RequestCounter script_counter;
323 CountRequestFor(kPrefetchScript, &script_counter); 340 CountRequestFor(kPrefetchScript, &script_counter);
324 PrefetchFromFile(kPrefetchSubresourceRedirectPage, 341 PrefetchFromFile(kPrefetchSubresourceRedirectPage,
325 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 342 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
326 script_counter.WaitForCount(1); 343 script_counter.WaitForCount(1);
327 } 344 }
328 345
329 // Checks a client redirect is not followed. 346 // Checks a client redirect is not followed.
330 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchClientRedirect) { 347 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchClientRedirect) {
348 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
349
331 RequestCounter script_counter; 350 RequestCounter script_counter;
332 CountRequestFor(kPrefetchScript, &script_counter); 351 CountRequestFor(kPrefetchScript, &script_counter);
333 // A complete load of kPrefetchPage2 is used as a sentinal. Otherwise the test 352 // A complete load of kPrefetchPage2 is used as a sentinal. Otherwise the test
334 // ends before script_counter would reliably see the load of kPrefetchScript, 353 // ends before script_counter would reliably see the load of kPrefetchScript,
335 // were it to happen. 354 // were it to happen.
336 RequestCounter sentinel_counter; 355 RequestCounter sentinel_counter;
337 CountRequestFor(kPrefetchScript2, &sentinel_counter); 356 CountRequestFor(kPrefetchScript2, &sentinel_counter);
338 PrefetchFromFile( 357 PrefetchFromFile(
339 "/client-redirect/?" + 358 "/client-redirect/?" +
340 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false), 359 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false),
341 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 360 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
342 ui_test_utils::NavigateToURL( 361 ui_test_utils::NavigateToURL(
343 current_browser(), src_server()->GetURL(MakeAbsolute(kPrefetchPage2))); 362 current_browser(), src_server()->GetURL(MakeAbsolute(kPrefetchPage2)));
344 sentinel_counter.WaitForCount(1); 363 sentinel_counter.WaitForCount(1);
345 script_counter.WaitForCount(0); 364 script_counter.WaitForCount(0);
346 } 365 }
347 366
348 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchHttps) { 367 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchHttps) {
368 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
369
349 UseHttpsSrcServer(); 370 UseHttpsSrcServer();
350 RequestCounter main_counter; 371 RequestCounter main_counter;
351 CountRequestFor(kPrefetchPage, &main_counter); 372 CountRequestFor(kPrefetchPage, &main_counter);
352 RequestCounter script_counter; 373 RequestCounter script_counter;
353 CountRequestFor(kPrefetchScript, &script_counter); 374 CountRequestFor(kPrefetchScript, &script_counter);
354 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 375 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
355 main_counter.WaitForCount(1); 376 main_counter.WaitForCount(1);
356 script_counter.WaitForCount(1); 377 script_counter.WaitForCount(1);
357 } 378 }
358 379
359 // Checks that an SSL error prevents prefetch. 380 // Checks that an SSL error prevents prefetch.
360 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, SSLError) { 381 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, SSLError) {
382 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
383
361 // Only send the loaded page, not the loader, through SSL. 384 // Only send the loaded page, not the loader, through SSL.
362 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); 385 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS);
363 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME); 386 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME);
364 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); 387 https_server.ServeFilesFromSourceDirectory("chrome/test/data");
365 ASSERT_TRUE(https_server.Start()); 388 ASSERT_TRUE(https_server.Start());
366 std::unique_ptr<TestPrerender> prerender = PrefetchFromURL( 389 std::unique_ptr<TestPrerender> prerender = PrefetchFromURL(
367 https_server.GetURL(MakeAbsolute(kPrefetchPage)), FINAL_STATUS_SSL_ERROR); 390 https_server.GetURL(MakeAbsolute(kPrefetchPage)), FINAL_STATUS_SSL_ERROR);
368 DestructionWaiter waiter(prerender->contents(), FINAL_STATUS_SSL_ERROR); 391 DestructionWaiter waiter(prerender->contents(), FINAL_STATUS_SSL_ERROR);
369 EXPECT_TRUE(waiter.WaitForDestroy()); 392 EXPECT_TRUE(waiter.WaitForDestroy());
370 } 393 }
371 394
372 // Checks that a subresource failing SSL does not prevent prefetch on the rest 395 // Checks that a subresource failing SSL does not prevent prefetch on the rest
373 // of the page. 396 // of the page.
374 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, SSLSubresourceError) { 397 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, SSLSubresourceError) {
398 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
399
375 // First confirm that the image loads as expected. 400 // First confirm that the image loads as expected.
376 401
377 // A separate HTTPS server is started for the subresource; src_server() is 402 // A separate HTTPS server is started for the subresource; src_server() is
378 // non-HTTPS. 403 // non-HTTPS.
379 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); 404 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS);
380 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME); 405 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME);
381 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); 406 https_server.ServeFilesFromSourceDirectory("chrome/test/data");
382 ASSERT_TRUE(https_server.Start()); 407 ASSERT_TRUE(https_server.Start());
383 GURL https_url = https_server.GetURL("/prerender/image.jpeg"); 408 GURL https_url = https_server.GetURL("/prerender/image.jpeg");
384 base::StringPairs replacement_text; 409 base::StringPairs replacement_text;
385 replacement_text.push_back( 410 replacement_text.push_back(
386 std::make_pair("REPLACE_WITH_IMAGE_URL", https_url.spec())); 411 std::make_pair("REPLACE_WITH_IMAGE_URL", https_url.spec()));
387 std::string main_page_path; 412 std::string main_page_path;
388 net::test_server::GetFilePathWithReplacements( 413 net::test_server::GetFilePathWithReplacements(
389 kPrefetchImagePage, replacement_text, &main_page_path); 414 kPrefetchImagePage, replacement_text, &main_page_path);
390 RequestCounter script_counter; 415 RequestCounter script_counter;
391 CountRequestFor(kPrefetchScript, &script_counter); 416 CountRequestFor(kPrefetchScript, &script_counter);
392 417
393 std::unique_ptr<TestPrerender> prerender = 418 std::unique_ptr<TestPrerender> prerender =
394 PrefetchFromFile(main_page_path, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 419 PrefetchFromFile(main_page_path, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
395 // Checks that the presumed failure of the image load didn't affect the script 420 // Checks that the presumed failure of the image load didn't affect the script
396 // fetch. This assumes waiting for the script load is enough to see any error 421 // fetch. This assumes waiting for the script load is enough to see any error
397 // from the image load. 422 // from the image load.
398 script_counter.WaitForCount(1); 423 script_counter.WaitForCount(1);
399 } 424 }
400 425
401 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Loop) { 426 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Loop) {
427 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
428
402 RequestCounter script_counter; 429 RequestCounter script_counter;
403 CountRequestFor(kPrefetchScript, &script_counter); 430 CountRequestFor(kPrefetchScript, &script_counter);
404 RequestCounter main_counter; 431 RequestCounter main_counter;
405 CountRequestFor(kPrefetchLoopPage, &main_counter); 432 CountRequestFor(kPrefetchLoopPage, &main_counter);
406 433
407 std::unique_ptr<TestPrerender> test_prerender = PrefetchFromFile( 434 std::unique_ptr<TestPrerender> test_prerender = PrefetchFromFile(
408 kPrefetchLoopPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 435 kPrefetchLoopPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
409 main_counter.WaitForCount(1); 436 main_counter.WaitForCount(1);
410 script_counter.WaitForCount(1); 437 script_counter.WaitForCount(1);
411 } 438 }
412 439
413 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, RendererCrash) { 440 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, RendererCrash) {
441 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
442
414 // Navigate to about:blank to get the session storage namespace. 443 // Navigate to about:blank to get the session storage namespace.
415 ui_test_utils::NavigateToURL(current_browser(), GURL(url::kAboutBlankURL)); 444 ui_test_utils::NavigateToURL(current_browser(), GURL(url::kAboutBlankURL));
416 content::SessionStorageNamespace* storage_namespace = 445 content::SessionStorageNamespace* storage_namespace =
417 GetActiveWebContents() 446 GetActiveWebContents()
418 ->GetController() 447 ->GetController()
419 .GetDefaultSessionStorageNamespace(); 448 .GetDefaultSessionStorageNamespace();
420 449
421 // Navigate to about:crash without an intermediate loader because chrome:// 450 // Navigate to about:crash without an intermediate loader because chrome://
422 // URLs are ignored in renderers, and the test server has no support for them. 451 // URLs are ignored in renderers, and the test server has no support for them.
423 const gfx::Size kSize(640, 480); 452 const gfx::Size kSize(640, 480);
424 std::unique_ptr<TestPrerender> test_prerender = 453 std::unique_ptr<TestPrerender> test_prerender =
425 prerender_contents_factory()->ExpectPrerenderContents( 454 prerender_contents_factory()->ExpectPrerenderContents(
426 FINAL_STATUS_RENDERER_CRASHED); 455 FINAL_STATUS_RENDERER_CRASHED);
427 std::unique_ptr<PrerenderHandle> prerender_handle( 456 std::unique_ptr<PrerenderHandle> prerender_handle(
428 GetPrerenderManager()->AddPrerenderFromExternalRequest( 457 GetPrerenderManager()->AddPrerenderFromExternalRequest(
429 GURL(content::kChromeUICrashURL), content::Referrer(), 458 GURL(content::kChromeUICrashURL), content::Referrer(),
430 storage_namespace, gfx::Rect(kSize))); 459 storage_namespace, gfx::Rect(kSize)));
431 ASSERT_EQ(prerender_handle->contents(), test_prerender->contents()); 460 ASSERT_EQ(prerender_handle->contents(), test_prerender->contents());
432 test_prerender->WaitForStop(); 461 test_prerender->WaitForStop();
433 } 462 }
434 463
435 // Checks that the prefetch of png correctly loads the png. 464 // Checks that the prefetch of png correctly loads the png.
436 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Png) { 465 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Png) {
466 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
467
437 RequestCounter counter; 468 RequestCounter counter;
438 CountRequestFor(kPrefetchPng, &counter); 469 CountRequestFor(kPrefetchPng, &counter);
439 PrefetchFromFile(kPrefetchPng, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 470 PrefetchFromFile(kPrefetchPng, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
440 counter.WaitForCount(1); 471 counter.WaitForCount(1);
441 } 472 }
442 473
443 // Checks that the prefetch of png correctly loads the jpeg. 474 // Checks that the prefetch of png correctly loads the jpeg.
444 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Jpeg) { 475 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Jpeg) {
476 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
477
445 RequestCounter counter; 478 RequestCounter counter;
446 CountRequestFor(kPrefetchJpeg, &counter); 479 CountRequestFor(kPrefetchJpeg, &counter);
447 PrefetchFromFile(kPrefetchJpeg, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 480 PrefetchFromFile(kPrefetchJpeg, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
448 counter.WaitForCount(1); 481 counter.WaitForCount(1);
449 } 482 }
450 483
451 // Checks that nothing is prefetched from malware sites. 484 // Checks that nothing is prefetched from malware sites.
452 // TODO(mattcary): disabled as prefetch process teardown is racey with prerender 485 // TODO(mattcary): disabled as prefetch process teardown is racey with prerender
453 // contents destruction, can fix when prefetch prerenderers are destroyed 486 // contents destruction, can fix when prefetch prerenderers are destroyed
454 // deterministically. 487 // deterministically.
455 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, 488 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest,
456 DISABLED_PrerenderSafeBrowsingTopLevel) { 489 DISABLED_PrerenderSafeBrowsingTopLevel) {
490 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
491
457 GURL url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); 492 GURL url = src_server()->GetURL(MakeAbsolute(kPrefetchPage));
458 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( 493 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl(
459 url, safe_browsing::SB_THREAT_TYPE_URL_MALWARE); 494 url, safe_browsing::SB_THREAT_TYPE_URL_MALWARE);
460 // Prefetch resources are blocked, but the prerender is not killed in any 495 // Prefetch resources are blocked, but the prerender is not killed in any
461 // special way. 496 // special way.
462 // TODO(mattcary): since the prerender will count itself as loaded even if the 497 // TODO(mattcary): since the prerender will count itself as loaded even if the
463 // fetch of the main resource fails, the test doesn't actually confirm what we 498 // fetch of the main resource fails, the test doesn't actually confirm what we
464 // want it to confirm. This may be fixed by planned changes to the prerender 499 // want it to confirm. This may be fixed by planned changes to the prerender
465 // lifecycle. 500 // lifecycle.
466 std::unique_ptr<TestPrerender> prerender = 501 std::unique_ptr<TestPrerender> prerender =
467 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_SAFE_BROWSING); 502 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_SAFE_BROWSING);
468 } 503 }
469 504
470 // Checks that prefetching a page does not add it to browsing history. 505 // Checks that prefetching a page does not add it to browsing history.
471 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, HistoryUntouchedByPrefetch) { 506 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, HistoryUntouchedByPrefetch) {
507 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
508
472 // Initialize. 509 // Initialize.
473 Profile* profile = current_browser()->profile(); 510 Profile* profile = current_browser()->profile();
474 ASSERT_TRUE(profile); 511 ASSERT_TRUE(profile);
475 ui_test_utils::WaitForHistoryToLoad(HistoryServiceFactory::GetForProfile( 512 ui_test_utils::WaitForHistoryToLoad(HistoryServiceFactory::GetForProfile(
476 profile, ServiceAccessType::EXPLICIT_ACCESS)); 513 profile, ServiceAccessType::EXPLICIT_ACCESS));
477 514
478 // Prefetch a page. 515 // Prefetch a page.
479 GURL prefetched_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); 516 GURL prefetched_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage));
480 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 517 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
481 WaitForHistoryBackendToRun(profile); 518 WaitForHistoryBackendToRun(profile);
(...skipping 10 matching lines...) Expand all
492 529
493 // Check that the URL that was prefetched is not in history. 530 // Check that the URL that was prefetched is not in history.
494 EXPECT_TRUE(std::find(urls.begin(), urls.end(), prefetched_url) == 531 EXPECT_TRUE(std::find(urls.begin(), urls.end(), prefetched_url) ==
495 urls.end()); 532 urls.end());
496 533
497 // The loader URL is the remaining entry. 534 // The loader URL is the remaining entry.
498 EXPECT_EQ(2U, urls.size()); 535 EXPECT_EQ(2U, urls.size());
499 } 536 }
500 537
501 } // namespace prerender 538 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698