| 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/prerender/prerender_handle.h" | 9 #include "chrome/browser/prerender/prerender_handle.h" |
| 10 #include "chrome/browser/prerender/prerender_manager.h" | 10 #include "chrome/browser/prerender/prerender_manager.h" |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 CountRequestForUrl(second_script_url, kPrefetchScript2, &second_script); | 193 CountRequestForUrl(second_script_url, kPrefetchScript2, &second_script); |
| 194 PrefetchFromFile(kPrefetchMetaCSP, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 194 PrefetchFromFile(kPrefetchMetaCSP, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 195 // TODO(mattcary): See test comment above. If the meta CSP tag were parsed, | 195 // TODO(mattcary): See test comment above. If the meta CSP tag were parsed, |
| 196 // |second_script| would be loaded. Instead as the background scanner bails as | 196 // |second_script| would be loaded. Instead as the background scanner bails as |
| 197 // soon as the meta CSP tag is seen, only |main_page| is fetched. | 197 // soon as the meta CSP tag is seen, only |main_page| is fetched. |
| 198 main_page.WaitForCount(1); | 198 main_page.WaitForCount(1); |
| 199 second_script.WaitForCount(0); | 199 second_script.WaitForCount(0); |
| 200 first_script.WaitForCount(0); | 200 first_script.WaitForCount(0); |
| 201 } | 201 } |
| 202 | 202 |
| 203 // Checks that the second prefetch request succeeds. TODO(pasko): This test | 203 // Checks that the second prefetch request succeeds. This test waits for |
| 204 // waits for Prerender Stop before starting the second request, add a test that | 204 // Prerender Stop before starting the second request. |
| 205 // starts the second request from the UI thread immediately without waiting. | 205 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchMultipleRequest) { |
| 206 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimultaneous) { | |
| 207 RequestCounter first_main_counter; | 206 RequestCounter first_main_counter; |
| 208 CountRequestFor(kPrefetchPage, &first_main_counter); | 207 CountRequestFor(kPrefetchPage, &first_main_counter); |
| 209 RequestCounter second_main_counter; | 208 RequestCounter second_main_counter; |
| 210 CountRequestFor(kPrefetchPage2, &second_main_counter); | 209 CountRequestFor(kPrefetchPage2, &second_main_counter); |
| 211 RequestCounter first_script_counter; | 210 RequestCounter first_script_counter; |
| 212 CountRequestFor(kPrefetchScript, &first_script_counter); | 211 CountRequestFor(kPrefetchScript, &first_script_counter); |
| 213 RequestCounter second_script_counter; | 212 RequestCounter second_script_counter; |
| 214 CountRequestFor(kPrefetchScript2, &second_script_counter); | 213 CountRequestFor(kPrefetchScript2, &second_script_counter); |
| 215 | 214 |
| 216 // The first prerender is marked as canceled. When the second prerender | |
| 217 // starts, it sees that the first has been abandoned (because the earlier | |
| 218 // prerender is detached immediately and so dies quickly). | |
| 219 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 215 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 220 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 216 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 221 first_main_counter.WaitForCount(1); | 217 first_main_counter.WaitForCount(1); |
| 222 second_main_counter.WaitForCount(1); | 218 second_main_counter.WaitForCount(1); |
| 223 first_script_counter.WaitForCount(1); | 219 first_script_counter.WaitForCount(1); |
| 224 second_script_counter.WaitForCount(1); | 220 second_script_counter.WaitForCount(1); |
| 225 } | 221 } |
| 226 | 222 |
| 223 // Checks that a second prefetch request, started before the first stops, |
| 224 // succeeds. |
| 225 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimultaneous) { |
| 226 RequestCounter second_main_counter; |
| 227 CountRequestFor(kPrefetchPage2, &second_main_counter); |
| 228 RequestCounter second_script_counter; |
| 229 CountRequestFor(kPrefetchScript2, &second_script_counter); |
| 230 |
| 231 GURL first_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); |
| 232 base::FilePath first_path = ui_test_utils::GetTestFilePath( |
| 233 base::FilePath(), base::FilePath().AppendASCII(kPrefetchPage)); |
| 234 |
| 235 content::BrowserThread::PostTask( |
| 236 content::BrowserThread::IO, FROM_HERE, |
| 237 base::Bind(&test_utils::CreateHangingFirstRequestInterceptorOnIO, |
| 238 first_url, first_path, base::Closure())); |
| 239 |
| 240 // Start the first prefetch directly instead of via PrefetchFromFile for the |
| 241 // first prefetch to avoid the wait on prerender stop. |
| 242 GURL first_loader_url = ServeLoaderURL( |
| 243 kPrefetchLoaderPath, "REPLACE_WITH_PREFETCH_URL", first_url, ""); |
| 244 std::vector<FinalStatus> first_expected_status_queue(1, |
| 245 FINAL_STATUS_CANCELLED); |
| 246 NavigateWithPrerenders(first_loader_url, first_expected_status_queue); |
| 247 |
| 248 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 249 second_main_counter.WaitForCount(1); |
| 250 second_script_counter.WaitForCount(1); |
| 251 } |
| 252 |
| 227 // Checks a prefetch to a nonexisting page. | 253 // Checks a prefetch to a nonexisting page. |
| 228 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchNonexisting) { | 254 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchNonexisting) { |
| 229 std::unique_ptr<TestPrerender> test_prerender = PrefetchFromFile( | 255 std::unique_ptr<TestPrerender> test_prerender = PrefetchFromFile( |
| 230 "nonexisting-page.html", FINAL_STATUS_UNSUPPORTED_SCHEME); | 256 "nonexisting-page.html", FINAL_STATUS_UNSUPPORTED_SCHEME); |
| 231 } | 257 } |
| 232 | 258 |
| 233 // Checks that a 301 redirect is followed. | 259 // Checks that a 301 redirect is followed. |
| 234 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Redirect) { | 260 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Redirect) { |
| 235 RequestCounter script_counter; | 261 RequestCounter script_counter; |
| 236 CountRequestFor(kPrefetchScript, &script_counter); | 262 CountRequestFor(kPrefetchScript, &script_counter); |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 // special way. | 411 // special way. |
| 386 // TODO(mattcary): since the prerender will count itself as loaded even if the | 412 // TODO(mattcary): since the prerender will count itself as loaded even if the |
| 387 // fetch of the main resource fails, the test doesn't actually confirm what we | 413 // fetch of the main resource fails, the test doesn't actually confirm what we |
| 388 // want it to confirm. This may be fixed by planned changes to the prerender | 414 // want it to confirm. This may be fixed by planned changes to the prerender |
| 389 // lifecycle. | 415 // lifecycle. |
| 390 std::unique_ptr<TestPrerender> prerender = | 416 std::unique_ptr<TestPrerender> prerender = |
| 391 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_SAFE_BROWSING); | 417 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_SAFE_BROWSING); |
| 392 } | 418 } |
| 393 | 419 |
| 394 } // namespace prerender | 420 } // namespace prerender |
| OLD | NEW |