OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |