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 <stddef.h> | 5 #include <stddef.h> |
6 #include <deque> | 6 #include <deque> |
7 #include <set> | 7 #include <set> |
8 #include <string> | 8 #include <string> |
9 #include <unordered_map> | 9 #include <unordered_map> |
10 #include <utility> | 10 #include <utility> |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
136 using content::Referrer; | 136 using content::Referrer; |
137 using content::RenderFrameHost; | 137 using content::RenderFrameHost; |
138 using content::RenderViewHost; | 138 using content::RenderViewHost; |
139 using content::RenderWidgetHost; | 139 using content::RenderWidgetHost; |
140 using content::TestNavigationObserver; | 140 using content::TestNavigationObserver; |
141 using content::WebContents; | 141 using content::WebContents; |
142 using content::WebContentsObserver; | 142 using content::WebContentsObserver; |
143 using net::NetworkChangeNotifier; | 143 using net::NetworkChangeNotifier; |
144 using prerender::test_utils::RequestCounter; | 144 using prerender::test_utils::RequestCounter; |
145 using prerender::test_utils::CreateCountingInterceptorOnIO; | 145 using prerender::test_utils::CreateCountingInterceptorOnIO; |
146 using prerender::test_utils::CreateHangingFirstRequestInterceptorOnIO; | 146 using prerender::test_utils::CreateHangingFirstRequestInterceptor; |
147 using prerender::test_utils::CreateMockInterceptorOnIO; | 147 using prerender::test_utils::CreateMockInterceptorOnIO; |
148 using prerender::test_utils::TestPrerender; | 148 using prerender::test_utils::TestPrerender; |
149 using prerender::test_utils::TestPrerenderContents; | 149 using prerender::test_utils::TestPrerenderContents; |
150 using task_manager::browsertest_util::WaitForTaskManagerRows; | 150 using task_manager::browsertest_util::WaitForTaskManagerRows; |
151 | 151 |
152 // crbug.com/708158 | 152 // crbug.com/708158 |
153 #if !defined(OS_MACOSX) || !defined(ADDRESS_SANITIZER) | 153 #if !defined(OS_MACOSX) || !defined(ADDRESS_SANITIZER) |
154 | 154 |
155 // Prerender tests work as follows: | 155 // Prerender tests work as follows: |
156 // | 156 // |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
532 base::FilePath(FILE_PATH_LITERAL("prerender")), | 532 base::FilePath(FILE_PATH_LITERAL("prerender")), |
533 base::FilePath().AppendASCII(file_name)); | 533 base::FilePath().AppendASCII(file_name)); |
534 } | 534 } |
535 | 535 |
536 page_load_metrics::PageLoadExtraInfo GenericPageLoadExtraInfo( | 536 page_load_metrics::PageLoadExtraInfo GenericPageLoadExtraInfo( |
537 const GURL& dest_url) { | 537 const GURL& dest_url) { |
538 return page_load_metrics::PageLoadExtraInfo::CreateForTesting( | 538 return page_load_metrics::PageLoadExtraInfo::CreateForTesting( |
539 dest_url, false /* started_in_foreground */); | 539 dest_url, false /* started_in_foreground */); |
540 } | 540 } |
541 | 541 |
542 // Helper function, to allow passing a UI closure to | |
543 // CreateHangingFirstRequestInterceptor() instead of a IO callback. | |
544 base::Callback<void(net::URLRequest*)> GetIOCallbackFromUIClosure( | |
545 base::Closure ui_closure) { | |
546 auto lambda = [](base::Closure closure, net::URLRequest*) { | |
547 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, | |
548 closure); | |
549 }; | |
550 return base::Bind(lambda, ui_closure); | |
551 } | |
552 | |
542 } // namespace | 553 } // namespace |
543 | 554 |
544 class PrerenderBrowserTest : public test_utils::PrerenderInProcessBrowserTest { | 555 class PrerenderBrowserTest : public test_utils::PrerenderInProcessBrowserTest { |
545 public: | 556 public: |
546 PrerenderBrowserTest() | 557 PrerenderBrowserTest() |
547 : call_javascript_(true), | 558 : call_javascript_(true), |
548 check_load_events_(true), | 559 check_load_events_(true), |
549 loader_path_("/prerender/prerender_loader.html") {} | 560 loader_path_("/prerender/prerender_loader.html") {} |
550 | 561 |
551 ~PrerenderBrowserTest() override {} | 562 ~PrerenderBrowserTest() override {} |
(...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1295 #define MAYBE_PrerenderNoCommitNoSwap PrerenderNoCommitNoSwap | 1306 #define MAYBE_PrerenderNoCommitNoSwap PrerenderNoCommitNoSwap |
1296 #endif | 1307 #endif |
1297 // Checks that the prerendering of a page is canceled correctly if we try to | 1308 // Checks that the prerendering of a page is canceled correctly if we try to |
1298 // swap it in before it commits. | 1309 // swap it in before it commits. |
1299 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MAYBE_PrerenderNoCommitNoSwap) { | 1310 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MAYBE_PrerenderNoCommitNoSwap) { |
1300 // Navigate to a page that triggers a prerender for a URL that never commits. | 1311 // Navigate to a page that triggers a prerender for a URL that never commits. |
1301 const GURL kNoCommitUrl("http://never-respond.example.com"); | 1312 const GURL kNoCommitUrl("http://never-respond.example.com"); |
1302 base::FilePath file(GetTestPath("prerender_page.html")); | 1313 base::FilePath file(GetTestPath("prerender_page.html")); |
1303 | 1314 |
1304 base::RunLoop prerender_start_loop; | 1315 base::RunLoop prerender_start_loop; |
1305 BrowserThread::PostTask( | 1316 CreateHangingFirstRequestInterceptor( |
1306 BrowserThread::IO, FROM_HERE, | 1317 kNoCommitUrl, file, |
1307 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, kNoCommitUrl, file, | 1318 GetIOCallbackFromUIClosure(prerender_start_loop.QuitClosure())); |
1308 prerender_start_loop.QuitClosure())); | |
1309 DisableJavascriptCalls(); | 1319 DisableJavascriptCalls(); |
1310 PrerenderTestURL(kNoCommitUrl, | 1320 PrerenderTestURL(kNoCommitUrl, |
1311 FINAL_STATUS_NAVIGATION_UNCOMMITTED, | 1321 FINAL_STATUS_NAVIGATION_UNCOMMITTED, |
1312 0); | 1322 0); |
1313 // Wait for the hanging request to be scheduled. | 1323 // Wait for the hanging request to be scheduled. |
1314 prerender_start_loop.Run(); | 1324 prerender_start_loop.Run(); |
1315 | 1325 |
1316 // Navigate to the URL, but assume the contents won't be swapped in. | 1326 // Navigate to the URL, but assume the contents won't be swapped in. |
1317 NavigateToDestURLWithDisposition(WindowOpenDisposition::CURRENT_TAB, false); | 1327 NavigateToDestURLWithDisposition(WindowOpenDisposition::CURRENT_TAB, false); |
1318 } | 1328 } |
1319 | 1329 |
1320 // crbug.com/708158 | 1330 // crbug.com/708158 |
1321 #if defined(OS_MACOSX) && defined(ADDRESS_SANITIZER) | 1331 #if defined(OS_MACOSX) && defined(ADDRESS_SANITIZER) |
1322 #define MAYBE_PrerenderNoCommitNoSwap2 DISABLED_PrerenderNoCommitNoSwap2 | 1332 #define MAYBE_PrerenderNoCommitNoSwap2 DISABLED_PrerenderNoCommitNoSwap2 |
1323 #else | 1333 #else |
1324 #define MAYBE_PrerenderNoCommitNoSwap2 PrerenderNoCommitNoSwap2 | 1334 #define MAYBE_PrerenderNoCommitNoSwap2 PrerenderNoCommitNoSwap2 |
1325 #endif | 1335 #endif |
1326 // Checks that client redirects don't add alias URLs until after they commit. | 1336 // Checks that client redirects don't add alias URLs until after they commit. |
1327 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MAYBE_PrerenderNoCommitNoSwap2) { | 1337 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MAYBE_PrerenderNoCommitNoSwap2) { |
1328 // Navigate to a page that then navigates to a URL that never commits. | 1338 // Navigate to a page that then navigates to a URL that never commits. |
1329 const GURL kNoCommitUrl("http://never-respond.example.com"); | 1339 const GURL kNoCommitUrl("http://never-respond.example.com"); |
1330 base::FilePath file(GetTestPath("prerender_page.html")); | 1340 base::FilePath file(GetTestPath("prerender_page.html")); |
1331 | 1341 |
1332 base::RunLoop prerender_start_loop; | 1342 base::RunLoop prerender_start_loop; |
1333 BrowserThread::PostTask( | 1343 CreateHangingFirstRequestInterceptor( |
1334 BrowserThread::IO, FROM_HERE, | 1344 kNoCommitUrl, file, |
1335 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, kNoCommitUrl, file, | 1345 GetIOCallbackFromUIClosure(prerender_start_loop.QuitClosure())); |
1336 prerender_start_loop.QuitClosure())); | |
1337 DisableJavascriptCalls(); | 1346 DisableJavascriptCalls(); |
1338 PrerenderTestURL(CreateClientRedirect(kNoCommitUrl.spec()), | 1347 PrerenderTestURL(CreateClientRedirect(kNoCommitUrl.spec()), |
1339 FINAL_STATUS_APP_TERMINATING, 1); | 1348 FINAL_STATUS_APP_TERMINATING, 1); |
1340 // Wait for the hanging request to be scheduled. | 1349 // Wait for the hanging request to be scheduled. |
1341 prerender_start_loop.Run(); | 1350 prerender_start_loop.Run(); |
1342 | 1351 |
1343 // Navigating to the second URL should not swap. | 1352 // Navigating to the second URL should not swap. |
1344 NavigateToURLWithDisposition(kNoCommitUrl, WindowOpenDisposition::CURRENT_TAB, | 1353 NavigateToURLWithDisposition(kNoCommitUrl, WindowOpenDisposition::CURRENT_TAB, |
1345 false); | 1354 false); |
1346 } | 1355 } |
(...skipping 1137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2484 destruction_observer.Wait(); | 2493 destruction_observer.Wait(); |
2485 } | 2494 } |
2486 | 2495 |
2487 // Checks that a hanging unload on the referring page of a prerender swap does | 2496 // Checks that a hanging unload on the referring page of a prerender swap does |
2488 // not crash the browser on exit. | 2497 // not crash the browser on exit. |
2489 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHangingUnload) { | 2498 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHangingUnload) { |
2490 // Matches URL in prerender_loader_with_unload.html. | 2499 // Matches URL in prerender_loader_with_unload.html. |
2491 const GURL hang_url("http://unload-url.test"); | 2500 const GURL hang_url("http://unload-url.test"); |
2492 base::FilePath empty_file = ui_test_utils::GetTestFilePath( | 2501 base::FilePath empty_file = ui_test_utils::GetTestFilePath( |
2493 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); | 2502 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); |
2494 BrowserThread::PostTask( | 2503 CreateHangingFirstRequestInterceptor( |
2495 BrowserThread::IO, FROM_HERE, | 2504 hang_url, empty_file, base::Callback<void(net::URLRequest*)>()); |
2496 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, | |
2497 hang_url, empty_file, | |
2498 base::Closure())); | |
2499 | 2505 |
2500 set_loader_path("/prerender/prerender_loader_with_unload.html"); | 2506 set_loader_path("/prerender/prerender_loader_with_unload.html"); |
2501 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 2507 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
2502 NavigateToDestURL(); | 2508 NavigateToDestURL(); |
2503 } | 2509 } |
2504 | 2510 |
2505 | 2511 |
2506 // Checks that when the history is cleared, prerendering is cancelled and | 2512 // Checks that when the history is cleared, prerendering is cancelled and |
2507 // prerendering history is cleared. | 2513 // prerendering history is cleared. |
2508 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClearHistory) { | 2514 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClearHistory) { |
(...skipping 775 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3284 done_url, empty_file, done_counter.AsWeakPtr())); | 3290 done_url, empty_file, done_counter.AsWeakPtr())); |
3285 // Loading may finish or be interrupted. The final result is important only. | 3291 // Loading may finish or be interrupted. The final result is important only. |
3286 DisableLoadEventCheck(); | 3292 DisableLoadEventCheck(); |
3287 // TestPrenderContents is always created before the Autosignin JS can run, so | 3293 // TestPrenderContents is always created before the Autosignin JS can run, so |
3288 // waiting for PrerenderContents to stop should be reliable. | 3294 // waiting for PrerenderContents to stop should be reliable. |
3289 PrerenderTestURL("/password/autosignin.html", | 3295 PrerenderTestURL("/password/autosignin.html", |
3290 FINAL_STATUS_CREDENTIAL_MANAGER_API, 0); | 3296 FINAL_STATUS_CREDENTIAL_MANAGER_API, 0); |
3291 EXPECT_EQ(0, done_counter.count()); | 3297 EXPECT_EQ(0, done_counter.count()); |
3292 } | 3298 } |
3293 | 3299 |
3300 // Checks that the requests from a prerender are IDLE priority before the swap | |
3301 // (except on Android), but normal priority after the swap. | |
3302 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, ResourcePriority) { | |
3303 GURL before_swap_url = | |
3304 embedded_test_server()->GetURL("/prerender/image.jpeg"); | |
3305 GURL after_swap_url = embedded_test_server()->GetURL("/prerender/image.png"); | |
mattcary
2017/04/14 09:28:46
nit: if this gets in after cl/2819523002 (which is
droger
2017/04/14 11:38:36
Done.
| |
3306 base::StringPairs replacement_text; | |
3307 replacement_text.push_back( | |
3308 std::make_pair("REPLACE_WITH_IMAGE_URL", before_swap_url.spec())); | |
3309 std::string replacement_path; | |
3310 net::test_server::GetFilePathWithReplacements( | |
3311 "/prerender/prerender_with_image.html", replacement_text, | |
3312 &replacement_path); | |
3313 | |
3314 // Setup request interceptors for subresources. | |
3315 auto get_priority_lambda = [](net::RequestPriority* out_priority, | |
3316 net::URLRequest* request) { | |
3317 *out_priority = request->priority(); | |
3318 }; | |
3319 RequestCounter before_swap_counter; | |
3320 net::RequestPriority before_swap_priority = net::THROTTLED; | |
3321 InterceptRequestAndCount( | |
3322 before_swap_url, &before_swap_counter, | |
3323 base::Bind(get_priority_lambda, &before_swap_priority)); | |
mattcary
2017/04/14 09:28:46
So before_swap_priority doesn't need to be base::U
droger
2017/04/14 11:38:36
Done.
Unretained is often not used in these cases
| |
3324 RequestCounter after_swap_counter; | |
3325 net::RequestPriority after_swap_priority = net::THROTTLED; | |
3326 InterceptRequestAndCount( | |
3327 after_swap_url, &after_swap_counter, | |
3328 base::Bind(get_priority_lambda, &after_swap_priority)); | |
3329 | |
3330 // Start the prerender. | |
3331 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); | |
3332 | |
3333 // Check priority before swap. | |
3334 before_swap_counter.WaitForCount(1); | |
3335 #if defined(OS_ANDROID) | |
3336 EXPECT_NE(net::IDLE, before_swap_priority); | |
mattcary
2017/04/14 09:28:46
why not kDefaultImagePriority, as below?
droger
2017/04/14 11:38:36
Done.
| |
3337 #else | |
3338 EXPECT_EQ(net::IDLE, before_swap_priority); | |
3339 #endif | |
3340 | |
3341 // Swap. | |
3342 NavigateToDestURL(); | |
3343 | |
3344 // Check priority after swap. | |
3345 GetActiveWebContents()->GetMainFrame()->ExecuteJavaScriptForTests( | |
3346 base::ASCIIToUTF16( | |
3347 "var img=new Image(); img.src='/prerender/image.png'")); | |
3348 after_swap_counter.WaitForCount(1); | |
3349 EXPECT_NE(net::IDLE, after_swap_priority); | |
3350 } | |
3351 | |
3352 // Checks that a request started before the swap gets its original priority back | |
3353 // after the swap. | |
3354 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, ResourcePriorityOverlappingSwap) { | |
3355 GURL image_url = embedded_test_server()->GetURL("/prerender/image.jpeg"); | |
3356 base::StringPairs replacement_text; | |
3357 replacement_text.push_back( | |
3358 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); | |
3359 std::string replacement_path; | |
3360 net::test_server::GetFilePathWithReplacements( | |
3361 "/prerender/prerender_with_image.html", replacement_text, | |
3362 &replacement_path); | |
3363 | |
3364 // Setup request interceptors for subresources. | |
3365 net::URLRequest* url_request = nullptr; | |
3366 net::RequestPriority priority = net::THROTTLED; | |
3367 base::RunLoop wait_loop; | |
3368 const net::RequestPriority kDefaultImagePriority = net::MEDIUM; | |
3369 auto io_lambda = [](net::URLRequest** out_request, | |
3370 net::RequestPriority* out_priority, base::Closure closure, | |
3371 net::URLRequest* request) { | |
3372 if (out_request) | |
3373 *out_request = request; | |
3374 content::BrowserThread::PostTask( | |
3375 content::BrowserThread::UI, FROM_HERE, | |
3376 base::Bind( | |
3377 [](net::RequestPriority priority, | |
3378 net::RequestPriority* out_priority, base::Closure closure) { | |
3379 *out_priority = priority; | |
3380 closure.Run(); | |
3381 }, | |
3382 request->priority(), out_priority, closure)); | |
3383 }; | |
3384 | |
3385 CreateHangingFirstRequestInterceptor( | |
3386 image_url, base::FilePath(), | |
3387 base::Bind(io_lambda, &url_request, &priority, wait_loop.QuitClosure())); | |
3388 | |
3389 // The prerender will hang on the image resource, can't run the usual checks. | |
3390 DisableLoadEventCheck(); | |
3391 DisableJavascriptCalls(); | |
3392 // Start the prerender. | |
3393 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 0); | |
3394 | |
3395 // Check priority before swap. | |
3396 net::RequestPriority expected_priority = | |
3397 #if defined(OS_ANDROID) | |
3398 kDefaultImagePriority; | |
3399 #else | |
3400 net::IDLE; | |
3401 #endif | |
3402 if (priority != expected_priority) | |
3403 wait_loop.Run(); | |
3404 EXPECT_EQ(expected_priority, priority); | |
3405 | |
3406 // Swap. Cannot use NavigateToDestURL, because it waits for the load to | |
3407 // complete, but the resource is still hung. | |
3408 current_browser()->OpenURL(content::OpenURLParams( | |
3409 dest_url(), Referrer(), WindowOpenDisposition::CURRENT_TAB, | |
3410 ui::PAGE_TRANSITION_TYPED, false)); | |
3411 | |
3412 // Check priority after swap. | |
mattcary
2017/04/14 09:28:46
Clarify that the test will timeout if the priority
droger
2017/04/14 11:38:36
Done, and changed the test a bit so that it should
| |
3413 priority = net::THROTTLED; | |
3414 do { | |
3415 base::RunLoop loop; | |
3416 content::BrowserThread::PostTask( | |
3417 content::BrowserThread::IO, FROM_HERE, | |
3418 base::Bind(io_lambda, nullptr, &priority, loop.QuitClosure(), | |
3419 url_request)); | |
3420 loop.Run(); | |
3421 } while (priority != kDefaultImagePriority); | |
3422 } | |
3423 | |
3294 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, FirstContentfulPaintTimingSimple) { | 3424 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, FirstContentfulPaintTimingSimple) { |
3295 GetPrerenderManager()->DisablePageLoadMetricsObserverForTesting(); | 3425 GetPrerenderManager()->DisablePageLoadMetricsObserverForTesting(); |
3296 base::SimpleTestTickClock* clock = OverridePrerenderManagerTimeTicks(); | 3426 base::SimpleTestTickClock* clock = OverridePrerenderManagerTimeTicks(); |
3297 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 3427 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
3298 | 3428 |
3299 base::TimeTicks load_start = clock->NowTicks(); | 3429 base::TimeTicks load_start = clock->NowTicks(); |
3300 clock->Advance(base::TimeDelta::FromSeconds(1)); | 3430 clock->Advance(base::TimeDelta::FromSeconds(1)); |
3301 NavigateToDestURL(); | 3431 NavigateToDestURL(); |
3302 | 3432 |
3303 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), | 3433 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), |
(...skipping 12 matching lines...) Expand all Loading... | |
3316 histogram_tester().ExpectUniqueSample( | 3446 histogram_tester().ExpectUniqueSample( |
3317 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1654, 1); | 3447 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1654, 1); |
3318 } | 3448 } |
3319 | 3449 |
3320 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, FirstContentfulPaintTimingReuse) { | 3450 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, FirstContentfulPaintTimingReuse) { |
3321 GetPrerenderManager()->DisablePageLoadMetricsObserverForTesting(); | 3451 GetPrerenderManager()->DisablePageLoadMetricsObserverForTesting(); |
3322 base::SimpleTestTickClock* clock = OverridePrerenderManagerTimeTicks(); | 3452 base::SimpleTestTickClock* clock = OverridePrerenderManagerTimeTicks(); |
3323 | 3453 |
3324 GURL url = embedded_test_server()->GetURL("/prerender/prerender_page.html"); | 3454 GURL url = embedded_test_server()->GetURL("/prerender/prerender_page.html"); |
3325 base::RunLoop hanging_request_waiter; | 3455 base::RunLoop hanging_request_waiter; |
3326 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 3456 CreateHangingFirstRequestInterceptor( |
3327 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, | 3457 url, GetTestPath("prerender_page.html"), |
3328 url, GetTestPath("prerender_page.html"), | 3458 GetIOCallbackFromUIClosure(hanging_request_waiter.QuitClosure())); |
3329 hanging_request_waiter.QuitClosure())); | |
3330 // As this load will be canceled, it is not waited for, and hence no | 3459 // As this load will be canceled, it is not waited for, and hence no |
3331 // javascript is executed. | 3460 // javascript is executed. |
3332 DisableJavascriptCalls(); | 3461 DisableJavascriptCalls(); |
3333 PrerenderTestURL(url, FINAL_STATUS_CANCELLED, 0); | 3462 PrerenderTestURL(url, FINAL_STATUS_CANCELLED, 0); |
3334 hanging_request_waiter.Run(); | 3463 hanging_request_waiter.Run(); |
3335 | 3464 |
3336 // This prerender cancels and reuses the first. | 3465 // This prerender cancels and reuses the first. |
3337 clock->Advance(base::TimeDelta::FromSeconds(1)); | 3466 clock->Advance(base::TimeDelta::FromSeconds(1)); |
3338 base::TimeTicks load_start = clock->NowTicks(); | 3467 base::TimeTicks load_start = clock->NowTicks(); |
3339 EnableJavascriptCalls(); | 3468 EnableJavascriptCalls(); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3404 FirstContentfulPaintTimingNoCommit) { | 3533 FirstContentfulPaintTimingNoCommit) { |
3405 GetPrerenderManager()->DisablePageLoadMetricsObserverForTesting(); | 3534 GetPrerenderManager()->DisablePageLoadMetricsObserverForTesting(); |
3406 base::SimpleTestTickClock* clock = OverridePrerenderManagerTimeTicks(); | 3535 base::SimpleTestTickClock* clock = OverridePrerenderManagerTimeTicks(); |
3407 | 3536 |
3408 GURL url = embedded_test_server()->GetURL("/prerender/prerender_page.html"); | 3537 GURL url = embedded_test_server()->GetURL("/prerender/prerender_page.html"); |
3409 base::FilePath url_file = ui_test_utils::GetTestFilePath( | 3538 base::FilePath url_file = ui_test_utils::GetTestFilePath( |
3410 base::FilePath(), | 3539 base::FilePath(), |
3411 base::FilePath(FILE_PATH_LITERAL("prerender/prerender_page.html"))); | 3540 base::FilePath(FILE_PATH_LITERAL("prerender/prerender_page.html"))); |
3412 | 3541 |
3413 base::RunLoop prerender_start_loop; | 3542 base::RunLoop prerender_start_loop; |
3414 BrowserThread::PostTask( | 3543 CreateHangingFirstRequestInterceptor( |
3415 BrowserThread::IO, FROM_HERE, | 3544 url, url_file, |
3416 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, url, url_file, | 3545 GetIOCallbackFromUIClosure(prerender_start_loop.QuitClosure())); |
3417 prerender_start_loop.QuitClosure())); | |
3418 // As this load is uncommitted, it is not waited for, and hence no | 3546 // As this load is uncommitted, it is not waited for, and hence no |
3419 // javascript is executed. | 3547 // javascript is executed. |
3420 DisableJavascriptCalls(); | 3548 DisableJavascriptCalls(); |
3421 PrerenderTestURL(url, FINAL_STATUS_NAVIGATION_UNCOMMITTED, 0); | 3549 PrerenderTestURL(url, FINAL_STATUS_NAVIGATION_UNCOMMITTED, 0); |
3422 prerender_start_loop.Run(); | 3550 prerender_start_loop.Run(); |
3423 | 3551 |
3424 clock->Advance(base::TimeDelta::FromSeconds(1)); | 3552 clock->Advance(base::TimeDelta::FromSeconds(1)); |
3425 NavigateToDestURLWithDisposition(WindowOpenDisposition::CURRENT_TAB, false); | 3553 NavigateToDestURLWithDisposition(WindowOpenDisposition::CURRENT_TAB, false); |
3426 | 3554 |
3427 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), | 3555 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3524 FirstContentfulPaintHiddenNoCommit) { | 3652 FirstContentfulPaintHiddenNoCommit) { |
3525 GetPrerenderManager()->DisablePageLoadMetricsObserverForTesting(); | 3653 GetPrerenderManager()->DisablePageLoadMetricsObserverForTesting(); |
3526 base::SimpleTestTickClock* clock = OverridePrerenderManagerTimeTicks(); | 3654 base::SimpleTestTickClock* clock = OverridePrerenderManagerTimeTicks(); |
3527 | 3655 |
3528 GURL url = embedded_test_server()->GetURL("/prerender/prerender_page.html"); | 3656 GURL url = embedded_test_server()->GetURL("/prerender/prerender_page.html"); |
3529 base::FilePath url_file = ui_test_utils::GetTestFilePath( | 3657 base::FilePath url_file = ui_test_utils::GetTestFilePath( |
3530 base::FilePath(), | 3658 base::FilePath(), |
3531 base::FilePath(FILE_PATH_LITERAL("prerender/prerender_page.html"))); | 3659 base::FilePath(FILE_PATH_LITERAL("prerender/prerender_page.html"))); |
3532 | 3660 |
3533 base::RunLoop prerender_start_loop; | 3661 base::RunLoop prerender_start_loop; |
3534 BrowserThread::PostTask( | 3662 CreateHangingFirstRequestInterceptor( |
3535 BrowserThread::IO, FROM_HERE, | 3663 url, url_file, |
3536 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, url, url_file, | 3664 GetIOCallbackFromUIClosure(prerender_start_loop.QuitClosure())); |
3537 prerender_start_loop.QuitClosure())); | |
3538 // As this load is uncommitted, it is not waited for, and hence no | 3665 // As this load is uncommitted, it is not waited for, and hence no |
3539 // javascript is executed. | 3666 // javascript is executed. |
3540 DisableJavascriptCalls(); | 3667 DisableJavascriptCalls(); |
3541 PrerenderTestURL(url, FINAL_STATUS_NAVIGATION_UNCOMMITTED, 0); | 3668 PrerenderTestURL(url, FINAL_STATUS_NAVIGATION_UNCOMMITTED, 0); |
3542 prerender_start_loop.Run(); | 3669 prerender_start_loop.Run(); |
3543 | 3670 |
3544 clock->Advance(base::TimeDelta::FromSeconds(1)); | 3671 clock->Advance(base::TimeDelta::FromSeconds(1)); |
3545 NavigateToDestURLWithDisposition(WindowOpenDisposition::CURRENT_TAB, false); | 3672 NavigateToDestURLWithDisposition(WindowOpenDisposition::CURRENT_TAB, false); |
3546 | 3673 |
3547 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), | 3674 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3787 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(web_contents, | 3914 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(web_contents, |
3788 "DidDisplayReallyPass()", | 3915 "DidDisplayReallyPass()", |
3789 &display_test_result)); | 3916 &display_test_result)); |
3790 ASSERT_TRUE(display_test_result); | 3917 ASSERT_TRUE(display_test_result); |
3791 } | 3918 } |
3792 #endif // !defined(DISABLE_NACL) | 3919 #endif // !defined(DISABLE_NACL) |
3793 | 3920 |
3794 } // namespace prerender | 3921 } // namespace prerender |
3795 | 3922 |
3796 #endif // !defined(OS_MACOSX) || !defined(ADDRESS_SANITIZER) | 3923 #endif // !defined(OS_MACOSX) || !defined(ADDRESS_SANITIZER) |
OLD | NEW |