Chromium Code Reviews| 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 |