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

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

Issue 2807163002: [Prerender] Restore request priorities when swapped in (Closed)
Patch Set: More comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <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
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
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
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
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
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
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
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
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
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)
OLDNEW
« no previous file with comments | « chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc ('k') | chrome/browser/prerender/prerender_contents.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698