@@ -143,7 +143,7 @@ using content::WebContentsObserver;
143143using net::NetworkChangeNotifier;
144144using prerender::test_utils::RequestCounter;
145145using prerender::test_utils::CreateCountingInterceptorOnIO;
146- using prerender::test_utils::CreateHangingFirstRequestInterceptor ;
146+ using prerender::test_utils::CreateHangingFirstRequestInterceptorOnIO ;
147147using prerender::test_utils::CreateMockInterceptorOnIO;
148148using prerender::test_utils::TestPrerender;
149149using prerender::test_utils::TestPrerenderContents;
@@ -166,8 +166,6 @@ namespace prerender {
166166
167167namespace {
168168
169- const char kPrefetchJpeg [] = " /prerender/image.jpeg" ;
170-
171169class FaviconUpdateWatcher : public favicon ::FaviconDriverObserver {
172170 public:
173171 explicit FaviconUpdateWatcher (content::WebContents* web_contents)
@@ -541,17 +539,6 @@ page_load_metrics::PageLoadExtraInfo GenericPageLoadExtraInfo(
541539 dest_url, false /* started_in_foreground */ );
542540}
543541
544- // Helper function, to allow passing a UI closure to
545- // CreateHangingFirstRequestInterceptor() instead of a IO callback.
546- base::Callback<void (net::URLRequest*)> GetIOCallbackFromUIClosure(
547- base::Closure ui_closure) {
548- auto lambda = [](base::Closure closure, net::URLRequest*) {
549- content::BrowserThread::PostTask (content::BrowserThread::UI, FROM_HERE,
550- closure);
551- };
552- return base::Bind (lambda, ui_closure);
553- }
554-
555542} // namespace
556543
557544class PrerenderBrowserTest : public test_utils ::PrerenderInProcessBrowserTest {
@@ -1315,9 +1302,10 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MAYBE_PrerenderNoCommitNoSwap) {
13151302 base::FilePath file (GetTestPath (" prerender_page.html" ));
13161303
13171304 base::RunLoop prerender_start_loop;
1318- CreateHangingFirstRequestInterceptor (
1319- kNoCommitUrl , file,
1320- GetIOCallbackFromUIClosure (prerender_start_loop.QuitClosure ()));
1305+ BrowserThread::PostTask (
1306+ BrowserThread::IO, FROM_HERE,
1307+ base::Bind (&CreateHangingFirstRequestInterceptorOnIO, kNoCommitUrl , file,
1308+ prerender_start_loop.QuitClosure ()));
13211309 DisableJavascriptCalls ();
13221310 PrerenderTestURL (kNoCommitUrl ,
13231311 FINAL_STATUS_NAVIGATION_UNCOMMITTED,
@@ -1342,9 +1330,10 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MAYBE_PrerenderNoCommitNoSwap2) {
13421330 base::FilePath file (GetTestPath (" prerender_page.html" ));
13431331
13441332 base::RunLoop prerender_start_loop;
1345- CreateHangingFirstRequestInterceptor (
1346- kNoCommitUrl , file,
1347- GetIOCallbackFromUIClosure (prerender_start_loop.QuitClosure ()));
1333+ BrowserThread::PostTask (
1334+ BrowserThread::IO, FROM_HERE,
1335+ base::Bind (&CreateHangingFirstRequestInterceptorOnIO, kNoCommitUrl , file,
1336+ prerender_start_loop.QuitClosure ()));
13481337 DisableJavascriptCalls ();
13491338 PrerenderTestURL (CreateClientRedirect (kNoCommitUrl .spec ()),
13501339 FINAL_STATUS_APP_TERMINATING, 1 );
@@ -2120,7 +2109,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderImagePng) {
21202109// Checks that prerendering a JPG works correctly.
21212110IN_PROC_BROWSER_TEST_F (PrerenderBrowserTest, PrerenderImageJpeg) {
21222111 DisableJavascriptCalls ();
2123- PrerenderTestURL (kPrefetchJpeg , FINAL_STATUS_USED, 1 );
2112+ PrerenderTestURL (" /prerender/image.jpeg " , FINAL_STATUS_USED, 1 );
21242113 NavigateToDestURL ();
21252114}
21262115
@@ -2192,7 +2181,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLErrorSubresource) {
21922181 https_server.SetSSLConfig (net::EmbeddedTestServer::CERT_MISMATCHED_NAME);
21932182 https_server.ServeFilesFromSourceDirectory (" chrome/test/data" );
21942183 ASSERT_TRUE (https_server.Start ());
2195- GURL https_url = https_server.GetURL (kPrefetchJpeg );
2184+ GURL https_url = https_server.GetURL (" /prerender/image.jpeg " );
21962185 base::StringPairs replacement_text;
21972186 replacement_text.push_back (
21982187 std::make_pair (" REPLACE_WITH_IMAGE_URL" , https_url.spec ()));
@@ -2304,7 +2293,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
23042293 https_server.SetSSLConfig (net::EmbeddedTestServer::CERT_OK, ssl_config);
23052294 https_server.ServeFilesFromSourceDirectory (" chrome/test/data" );
23062295 ASSERT_TRUE (https_server.Start ());
2307- GURL https_url = https_server.GetURL (kPrefetchJpeg );
2296+ GURL https_url = https_server.GetURL (" /prerender/image.jpeg " );
23082297 base::StringPairs replacement_text;
23092298 replacement_text.push_back (
23102299 std::make_pair (" REPLACE_WITH_IMAGE_URL" , https_url.spec ()));
@@ -2378,7 +2367,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
23782367
23792368// Ensures that we do not prerender pages which have a malware subresource.
23802369IN_PROC_BROWSER_TEST_F (PrerenderBrowserTest, PrerenderSafeBrowsingSubresource) {
2381- GURL image_url = embedded_test_server ()->GetURL (kPrefetchJpeg );
2370+ GURL image_url = embedded_test_server ()->GetURL (" /prerender/image.jpeg " );
23822371 GetFakeSafeBrowsingDatabaseManager ()->SetThreatTypeForUrl (
23832372 image_url, safe_browsing::SB_THREAT_TYPE_URL_MALWARE);
23842373 base::StringPairs replacement_text;
@@ -2502,8 +2491,11 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHangingUnload) {
25022491 const GURL hang_url (" http://unload-url.test" );
25032492 base::FilePath empty_file = ui_test_utils::GetTestFilePath (
25042493 base::FilePath (), base::FilePath (FILE_PATH_LITERAL (" empty.html" )));
2505- CreateHangingFirstRequestInterceptor (
2506- hang_url, empty_file, base::Callback<void (net::URLRequest*)>());
2494+ BrowserThread::PostTask (
2495+ BrowserThread::IO, FROM_HERE,
2496+ base::Bind (&CreateHangingFirstRequestInterceptorOnIO,
2497+ hang_url, empty_file,
2498+ base::Closure ()));
25072499
25082500 set_loader_path (" /prerender/prerender_loader_with_unload.html" );
25092501 PrerenderTestURL (" /prerender/prerender_page.html" , FINAL_STATUS_USED, 1 );
@@ -3299,122 +3291,6 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, AutosigninInPrerenderer) {
32993291 EXPECT_EQ (0 , done_counter.count ());
33003292}
33013293
3302- // Checks that the requests from a prerender are IDLE priority before the swap
3303- // (except on Android), but normal priority after the swap.
3304- IN_PROC_BROWSER_TEST_F (PrerenderBrowserTest, ResourcePriority) {
3305- GURL before_swap_url = embedded_test_server ()->GetURL (kPrefetchJpeg );
3306- GURL after_swap_url = embedded_test_server ()->GetURL (" /prerender/image.png" );
3307- GURL main_page_url =
3308- GetURLWithReplacement (" /prerender/prerender_with_image.html" ,
3309- " REPLACE_WITH_IMAGE_URL" , kPrefetchJpeg );
3310-
3311- // Setup request interceptors for subresources.
3312- auto get_priority_lambda = [](net::RequestPriority* out_priority,
3313- net::URLRequest* request) {
3314- *out_priority = request->priority ();
3315- };
3316- RequestCounter before_swap_counter;
3317- net::RequestPriority before_swap_priority = net::THROTTLED;
3318- InterceptRequestAndCount (
3319- before_swap_url, &before_swap_counter,
3320- base::Bind (get_priority_lambda, base::Unretained (&before_swap_priority)));
3321- RequestCounter after_swap_counter;
3322- net::RequestPriority after_swap_priority = net::THROTTLED;
3323- InterceptRequestAndCount (
3324- after_swap_url, &after_swap_counter,
3325- base::Bind (get_priority_lambda, base::Unretained (&after_swap_priority)));
3326-
3327- // Start the prerender.
3328- PrerenderTestURL (main_page_url, FINAL_STATUS_USED, 1 );
3329-
3330- // Check priority before swap.
3331- before_swap_counter.WaitForCount (1 );
3332- #if defined(OS_ANDROID)
3333- EXPECT_GT (before_swap_priority, net::IDLE);
3334- #else
3335- EXPECT_EQ (net::IDLE, before_swap_priority);
3336- #endif
3337-
3338- // Swap.
3339- NavigateToDestURL ();
3340-
3341- // Check priority after swap.
3342- GetActiveWebContents ()->GetMainFrame ()->ExecuteJavaScriptForTests (
3343- base::ASCIIToUTF16 (
3344- " var img=new Image(); img.src='/prerender/image.png'" ));
3345- after_swap_counter.WaitForCount (1 );
3346- EXPECT_NE (net::IDLE, after_swap_priority);
3347- }
3348-
3349- // Checks that a request started before the swap gets its original priority back
3350- // after the swap.
3351- IN_PROC_BROWSER_TEST_F (PrerenderBrowserTest, ResourcePriorityOverlappingSwap) {
3352- GURL image_url = embedded_test_server ()->GetURL (kPrefetchJpeg );
3353- GURL main_page_url =
3354- GetURLWithReplacement (" /prerender/prerender_with_image.html" ,
3355- " REPLACE_WITH_IMAGE_URL" , kPrefetchJpeg );
3356-
3357- // Setup request interceptors for subresources.
3358- net::URLRequest* url_request = nullptr ;
3359- net::RequestPriority priority = net::THROTTLED;
3360- base::RunLoop wait_loop;
3361- auto io_lambda = [](net::URLRequest** out_request,
3362- net::RequestPriority* out_priority, base::Closure closure,
3363- net::URLRequest* request) {
3364- if (out_request)
3365- *out_request = request;
3366- content::BrowserThread::PostTask (
3367- content::BrowserThread::UI, FROM_HERE,
3368- base::Bind (
3369- [](net::RequestPriority priority,
3370- net::RequestPriority* out_priority, base::Closure closure) {
3371- *out_priority = priority;
3372- closure.Run ();
3373- },
3374- request->priority (), base::Unretained (out_priority), closure));
3375- };
3376-
3377- CreateHangingFirstRequestInterceptor (
3378- image_url, base::FilePath (),
3379- base::Bind (io_lambda, base::Unretained (&url_request),
3380- base::Unretained (&priority), wait_loop.QuitClosure ()));
3381-
3382- // The prerender will hang on the image resource, can't run the usual checks.
3383- DisableLoadEventCheck ();
3384- DisableJavascriptCalls ();
3385- // Start the prerender.
3386- PrerenderTestURL (main_page_url, FINAL_STATUS_USED, 0 );
3387-
3388- // Check priority before swap.
3389- #if defined(OS_ANDROID)
3390- if (priority <= net::IDLE)
3391- wait_loop.Run ();
3392- EXPECT_GT (priority, net::IDLE);
3393- #else
3394- if (priority != net::IDLE)
3395- wait_loop.Run ();
3396- EXPECT_EQ (net::IDLE, priority);
3397- #endif
3398-
3399- // Swap. Cannot use NavigateToDestURL, because it waits for the load to
3400- // complete, but the resource is still hung.
3401- current_browser ()->OpenURL (content::OpenURLParams (
3402- dest_url (), Referrer (), WindowOpenDisposition::CURRENT_TAB,
3403- ui::PAGE_TRANSITION_TYPED, false ));
3404-
3405- // Check priority after swap. The test may timeout in case of failure.
3406- priority = net::THROTTLED;
3407- do {
3408- base::RunLoop loop;
3409- content::BrowserThread::PostTask (
3410- content::BrowserThread::IO, FROM_HERE,
3411- base::Bind (io_lambda, nullptr , base::Unretained (&priority),
3412- loop.QuitClosure (), base::Unretained (url_request)));
3413- loop.Run ();
3414- } while (priority <= net::IDLE);
3415- EXPECT_GT (priority, net::IDLE);
3416- }
3417-
34183294IN_PROC_BROWSER_TEST_F (PrerenderBrowserTest, FirstContentfulPaintTimingSimple) {
34193295 GetPrerenderManager ()->DisablePageLoadMetricsObserverForTesting ();
34203296 base::SimpleTestTickClock* clock = OverridePrerenderManagerTimeTicks ();
@@ -3447,9 +3323,10 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, FirstContentfulPaintTimingReuse) {
34473323
34483324 GURL url = embedded_test_server ()->GetURL (" /prerender/prerender_page.html" );
34493325 base::RunLoop hanging_request_waiter;
3450- CreateHangingFirstRequestInterceptor (
3451- url, GetTestPath (" prerender_page.html" ),
3452- GetIOCallbackFromUIClosure (hanging_request_waiter.QuitClosure ()));
3326+ BrowserThread::PostTask (BrowserThread::IO, FROM_HERE,
3327+ base::Bind (&CreateHangingFirstRequestInterceptorOnIO,
3328+ url, GetTestPath (" prerender_page.html" ),
3329+ hanging_request_waiter.QuitClosure ()));
34533330 // As this load will be canceled, it is not waited for, and hence no
34543331 // javascript is executed.
34553332 DisableJavascriptCalls ();
@@ -3534,9 +3411,10 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
35343411 base::FilePath (FILE_PATH_LITERAL (" prerender/prerender_page.html" )));
35353412
35363413 base::RunLoop prerender_start_loop;
3537- CreateHangingFirstRequestInterceptor (
3538- url, url_file,
3539- GetIOCallbackFromUIClosure (prerender_start_loop.QuitClosure ()));
3414+ BrowserThread::PostTask (
3415+ BrowserThread::IO, FROM_HERE,
3416+ base::Bind (&CreateHangingFirstRequestInterceptorOnIO, url, url_file,
3417+ prerender_start_loop.QuitClosure ()));
35403418 // As this load is uncommitted, it is not waited for, and hence no
35413419 // javascript is executed.
35423420 DisableJavascriptCalls ();
@@ -3653,9 +3531,10 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
36533531 base::FilePath (FILE_PATH_LITERAL (" prerender/prerender_page.html" )));
36543532
36553533 base::RunLoop prerender_start_loop;
3656- CreateHangingFirstRequestInterceptor (
3657- url, url_file,
3658- GetIOCallbackFromUIClosure (prerender_start_loop.QuitClosure ()));
3534+ BrowserThread::PostTask (
3535+ BrowserThread::IO, FROM_HERE,
3536+ base::Bind (&CreateHangingFirstRequestInterceptorOnIO, url, url_file,
3537+ prerender_start_loop.QuitClosure ()));
36593538 // As this load is uncommitted, it is not waited for, and hence no
36603539 // javascript is executed.
36613540 DisableJavascriptCalls ();
0 commit comments