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 <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 660 void OnPrerenderStop(PrerenderContents* contents) override { | 660 void OnPrerenderStop(PrerenderContents* contents) override { |
| 661 DCHECK(contents_); | 661 DCHECK(contents_); |
| 662 contents_ = NULL; | 662 contents_ = NULL; |
| 663 stop_loop_.Quit(); | 663 stop_loop_.Quit(); |
| 664 // If there is a WaitForLoads call and it has yet to see the expected number | 664 // If there is a WaitForLoads call and it has yet to see the expected number |
| 665 // of loads, stop the loop so the test fails instead of timing out. | 665 // of loads, stop the loop so the test fails instead of timing out. |
| 666 if (load_waiter_) | 666 if (load_waiter_) |
| 667 load_waiter_->Quit(); | 667 load_waiter_->Quit(); |
| 668 } | 668 } |
| 669 | 669 |
| 670 void OnPrerenderCreatedMatchCompleteReplacement( | |
| 671 PrerenderContents* contents, | |
| 672 PrerenderContents* replacement) override {} | |
| 673 | |
| 674 private: | 670 private: |
| 675 TestPrerenderContents* contents_; | 671 TestPrerenderContents* contents_; |
| 676 int number_of_loads_; | 672 int number_of_loads_; |
| 677 | 673 |
| 678 int expected_number_of_loads_; | 674 int expected_number_of_loads_; |
| 679 std::unique_ptr<base::RunLoop> load_waiter_; | 675 std::unique_ptr<base::RunLoop> load_waiter_; |
| 680 | 676 |
| 681 base::RunLoop create_loop_; | 677 base::RunLoop create_loop_; |
| 682 base::RunLoop start_loop_; | 678 base::RunLoop start_loop_; |
| 683 base::RunLoop stop_loop_; | 679 base::RunLoop stop_loop_; |
| (...skipping 2609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3293 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, ControlGroupRendererInitiated) { | 3289 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, ControlGroupRendererInitiated) { |
| 3294 RestorePrerenderMode restore_prerender_mode; | 3290 RestorePrerenderMode restore_prerender_mode; |
| 3295 PrerenderManager::SetMode( | 3291 PrerenderManager::SetMode( |
| 3296 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); | 3292 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); |
| 3297 DisableJavascriptCalls(); | 3293 DisableJavascriptCalls(); |
| 3298 PrerenderTestURL("/prerender/prerender_xhr_put.html", | 3294 PrerenderTestURL("/prerender/prerender_xhr_put.html", |
| 3299 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); | 3295 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); |
| 3300 OpenDestURLViaClick(); | 3296 OpenDestURLViaClick(); |
| 3301 } | 3297 } |
| 3302 | 3298 |
| 3303 // Make sure that the MatchComplete dummy works in the normal case. Once | |
| 3304 // a prerender is cancelled because of a script, a dummy must be created to | |
| 3305 // account for the MatchComplete case, and it must have a final status of | |
| 3306 // FINAL_STATUS_WOULD_HAVE_BEEN_USED. | |
| 3307 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) { | |
| 3308 RestorePrerenderMode restore_prerender_mode; | |
| 3309 PrerenderManager::SetMode( | |
| 3310 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); | |
| 3311 | |
| 3312 std::vector<FinalStatus> expected_final_status_queue; | |
| 3313 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); | |
| 3314 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); | |
| 3315 PrerenderTestURL("/prerender/prerender_xhr_put.html", | |
| 3316 expected_final_status_queue, 1); | |
| 3317 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | |
| 3318 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | |
| 3319 histogram_tester().ExpectTotalCount( | |
| 3320 "Prerender.none_PerceivedPLTMatchedComplete", 0); | |
| 3321 histogram_tester().ExpectTotalCount( | |
| 3322 "Prerender.websame_PrerenderNotSwappedInPLT", 1); | |
| 3323 | |
| 3324 NavigateToDestURL(); | |
| 3325 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | |
| 3326 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", | |
| 3327 0); | |
| 3328 histogram_tester().ExpectTotalCount( | |
| 3329 "Prerender.websame_PerceivedPLTMatchedComplete", 1); | |
| 3330 } | |
| 3331 | |
| 3332 // Checks that the referrer policy is used when prerendering. | 3299 // Checks that the referrer policy is used when prerendering. |
| 3333 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReferrerPolicy) { | 3300 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReferrerPolicy) { |
| 3334 set_loader_path("/prerender/prerender_loader_with_referrer_policy.html"); | 3301 set_loader_path("/prerender/prerender_loader_with_referrer_policy.html"); |
| 3335 PrerenderTestURL("/prerender/prerender_referrer_policy.html", | 3302 PrerenderTestURL("/prerender/prerender_referrer_policy.html", |
| 3336 FINAL_STATUS_USED, 1); | 3303 FINAL_STATUS_USED, 1); |
| 3337 NavigateToDestURL(); | 3304 NavigateToDestURL(); |
| 3338 } | 3305 } |
| 3339 | 3306 |
| 3340 // Checks that the referrer policy is used when prerendering on HTTPS. | 3307 // Checks that the referrer policy is used when prerendering on HTTPS. |
| 3341 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3308 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3446 NavigateToDestURL(); | 3413 NavigateToDestURL(); |
| 3447 channel_close_watcher.WaitForChannelClose(); | 3414 channel_close_watcher.WaitForChannelClose(); |
| 3448 | 3415 |
| 3449 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 3416 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
| 3450 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); | 3417 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); |
| 3451 } | 3418 } |
| 3452 | 3419 |
| 3453 // Test that prerenders abort when navigating to a stream. | 3420 // Test that prerenders abort when navigating to a stream. |
| 3454 // See chrome/browser/extensions/api/streams_private/streams_private_apitest.cc | 3421 // See chrome/browser/extensions/api/streams_private/streams_private_apitest.cc |
| 3455 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, StreamsTest) { | 3422 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, StreamsTest) { |
| 3456 RestorePrerenderMode restore_prerender_mode; | |
| 3457 PrerenderManager::SetMode( | |
| 3458 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); | |
| 3459 | |
| 3460 ASSERT_TRUE(StartEmbeddedTestServer()); | 3423 ASSERT_TRUE(StartEmbeddedTestServer()); |
| 3461 | 3424 |
| 3462 const extensions::Extension* extension = LoadExtension( | 3425 const extensions::Extension* extension = LoadExtension( |
| 3463 test_data_dir_.AppendASCII("streams_private/handle_mime_type")); | 3426 test_data_dir_.AppendASCII("streams_private/handle_mime_type")); |
| 3464 ASSERT_TRUE(extension); | 3427 ASSERT_TRUE(extension); |
| 3465 EXPECT_EQ(std::string(extension_misc::kMimeHandlerPrivateTestExtensionId), | 3428 EXPECT_EQ(std::string(extension_misc::kMimeHandlerPrivateTestExtensionId), |
| 3466 extension->id()); | 3429 extension->id()); |
| 3467 MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension); | 3430 MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension); |
| 3468 ASSERT_TRUE(handler); | 3431 ASSERT_TRUE(handler); |
| 3469 EXPECT_TRUE(handler->CanHandleMIMEType("application/msword")); | 3432 EXPECT_TRUE(handler->CanHandleMIMEType("application/msword")); |
| 3470 | 3433 |
| 3471 PrerenderTestURL("/prerender/document.doc", FINAL_STATUS_DOWNLOAD, 0); | 3434 PrerenderTestURL("/prerender/document.doc", FINAL_STATUS_DOWNLOAD, 0); |
| 3472 | 3435 |
| 3473 // Sanity-check that the extension would have picked up the stream in a normal | 3436 // Sanity-check that the extension would have picked up the stream in a normal |
| 3474 // navigation had prerender not intercepted it. | 3437 // navigation had prerender not intercepted it. |
| 3475 // streams_private/handle_mime_type reports success if it has handled the | 3438 // The extension streams_private/handle_mime_type reports success if it has |
| 3476 // application/msword type. | 3439 // handled the application/msword type. |
| 3440 // Note: NavigateToDestURL() cannot be used because of the assertion shecking | |
| 3441 // for non-null PrerenderContents. | |
| 3442 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, | |
| 3443 ui::PAGE_TRANSITION_TYPED, false); | |
| 3477 extensions::ResultCatcher catcher; | 3444 extensions::ResultCatcher catcher; |
| 3478 NavigateToDestURL(); | 3445 current_browser()->OpenURL(params); |
|
mmenke
2016/05/04 19:21:52
Can you just use NavigateToURL(browser(), dest_url
pasko
2016/05/09 16:07:51
Done. Thank you, I did not know about the existenc
mmenke
2016/05/09 20:04:38
OpenURL is the production code method to start a n
pasko
2016/05/10 13:52:26
Acknowledged. Thank you.
| |
| 3479 EXPECT_TRUE(catcher.GetNextResult()); | 3446 EXPECT_TRUE(catcher.GetNextResult()); |
| 3480 } | 3447 } |
| 3481 | 3448 |
| 3482 // Checks that non-http/https/chrome-extension subresource cancels the | 3449 // Checks that non-http/https/chrome-extension subresource cancels the |
| 3483 // prerender. | 3450 // prerender. |
| 3484 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3451 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3485 PrerenderCancelSubresourceUnsupportedScheme) { | 3452 PrerenderCancelSubresourceUnsupportedScheme) { |
| 3486 GURL image_url = GURL("invalidscheme://www.google.com/test.jpg"); | 3453 GURL image_url = GURL("invalidscheme://www.google.com/test.jpg"); |
| 3487 base::StringPairs replacement_text; | 3454 base::StringPairs replacement_text; |
| 3488 replacement_text.push_back( | 3455 replacement_text.push_back( |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3639 // Mock out requests to the Web Store. | 3606 // Mock out requests to the Web Store. |
| 3640 base::FilePath file(GetTestPath("prerender_page.html")); | 3607 base::FilePath file(GetTestPath("prerender_page.html")); |
| 3641 BrowserThread::PostTask( | 3608 BrowserThread::PostTask( |
| 3642 BrowserThread::IO, FROM_HERE, | 3609 BrowserThread::IO, FROM_HERE, |
| 3643 base::Bind(&CreateMockInterceptorOnIO, GURL(webstore_url), file)); | 3610 base::Bind(&CreateMockInterceptorOnIO, GURL(webstore_url), file)); |
| 3644 | 3611 |
| 3645 PrerenderTestURL(CreateClientRedirect(webstore_url), | 3612 PrerenderTestURL(CreateClientRedirect(webstore_url), |
| 3646 FINAL_STATUS_OPEN_URL, 1); | 3613 FINAL_STATUS_OPEN_URL, 1); |
| 3647 } | 3614 } |
| 3648 | 3615 |
| 3649 // Checks that canceling a MatchComplete dummy doesn't result in two | |
| 3650 // stop events. | |
| 3651 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, CancelMatchCompleteDummy) { | |
| 3652 RestorePrerenderMode restore_prerender_mode; | |
| 3653 PrerenderManager::SetMode( | |
| 3654 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); | |
| 3655 | |
| 3656 std::vector<FinalStatus> expected_final_status_queue; | |
| 3657 expected_final_status_queue.push_back(FINAL_STATUS_JAVASCRIPT_ALERT); | |
| 3658 expected_final_status_queue.push_back(FINAL_STATUS_CANCELLED); | |
| 3659 ScopedVector<TestPrerender> prerenders = | |
| 3660 PrerenderTestURL("/prerender/prerender_alert_before_onload.html", | |
| 3661 expected_final_status_queue, 0); | |
| 3662 | |
| 3663 // Cancel the MatchComplete dummy. | |
| 3664 GetPrerenderManager()->CancelAllPrerenders(); | |
| 3665 prerenders[1]->WaitForStop(); | |
| 3666 | |
| 3667 // Check the referring page only got one copy of the event. | |
| 3668 EXPECT_FALSE(HadPrerenderEventErrors()); | |
| 3669 } | |
| 3670 | |
| 3671 // Checks that a deferred redirect to an image is not loaded until the page is | 3616 // Checks that a deferred redirect to an image is not loaded until the page is |
| 3672 // visible. Also test the right histogram events are emitted in this case. | 3617 // visible. Also test the right histogram events are emitted in this case. |
| 3673 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { | 3618 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { |
| 3674 DisableJavascriptCalls(); | 3619 DisableJavascriptCalls(); |
| 3675 | 3620 |
| 3676 // The prerender will not completely load until after the swap, so wait for a | 3621 // The prerender will not completely load until after the swap, so wait for a |
| 3677 // title change before calling DidPrerenderPass. | 3622 // title change before calling DidPrerenderPass. |
| 3678 std::unique_ptr<TestPrerender> prerender = PrerenderTestURL( | 3623 std::unique_ptr<TestPrerender> prerender = PrerenderTestURL( |
| 3679 "/prerender/prerender_deferred_image.html", FINAL_STATUS_USED, 0); | 3624 "/prerender/prerender_deferred_image.html", FINAL_STATUS_USED, 0); |
| 3680 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); | 3625 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3750 // Checks that deferred redirects in the main frame are followed, even | 3695 // Checks that deferred redirects in the main frame are followed, even |
| 3751 // with a double-redirect. | 3696 // with a double-redirect. |
| 3752 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3697 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3753 PrerenderDeferredMainFrameAfterRedirect) { | 3698 PrerenderDeferredMainFrameAfterRedirect) { |
| 3754 DisableJavascriptCalls(); | 3699 DisableJavascriptCalls(); |
| 3755 PrerenderTestURL(CreateServerRedirect("/prerender/image-deferred.png"), | 3700 PrerenderTestURL(CreateServerRedirect("/prerender/image-deferred.png"), |
| 3756 FINAL_STATUS_USED, 1); | 3701 FINAL_STATUS_USED, 1); |
| 3757 NavigateToDestURL(); | 3702 NavigateToDestURL(); |
| 3758 } | 3703 } |
| 3759 | 3704 |
| 3760 // Checks that deferred redirects in a synchronous XHR abort the | |
| 3761 // prerender. | |
| 3762 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredSynchronousXHR) { | |
| 3763 RestorePrerenderMode restore_prerender_mode; | |
| 3764 PrerenderManager::SetMode( | |
| 3765 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); | |
|
mmenke
2016/05/04 19:21:52
Why does this test require this call? Seems like
pasko
2016/05/09 16:07:51
As in the StreamsTest, we cannot use NavigateToDes
mmenke
2016/05/09 20:04:38
I want to try and get some idea what's going on th
pasko
2016/05/10 13:52:26
The argument for more integration-kind of tests is
| |
| 3766 PrerenderTestURL("/prerender/prerender_deferred_sync_xhr.html", | |
| 3767 FINAL_STATUS_BAD_DEFERRED_REDIRECT, 0); | |
| 3768 NavigateToDestURL(); | |
| 3769 } | |
| 3770 | |
| 3771 // Checks that prerenders are not swapped for navigations with extra headers. | 3705 // Checks that prerenders are not swapped for navigations with extra headers. |
| 3772 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExtraHeadersNoSwap) { | 3706 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExtraHeadersNoSwap) { |
| 3773 PrerenderTestURL("/prerender/prerender_page.html", | 3707 PrerenderTestURL("/prerender/prerender_page.html", |
| 3774 FINAL_STATUS_APP_TERMINATING, 1); | 3708 FINAL_STATUS_APP_TERMINATING, 1); |
| 3775 | 3709 |
| 3776 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, | 3710 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, |
| 3777 ui::PAGE_TRANSITION_TYPED, false); | 3711 ui::PAGE_TRANSITION_TYPED, false); |
| 3778 params.extra_headers = "X-Custom-Header: 42\r\n"; | 3712 params.extra_headers = "X-Custom-Header: 42\r\n"; |
| 3779 NavigateToURLWithParams(params, false); | 3713 NavigateToURLWithParams(params, false); |
| 3780 } | 3714 } |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4086 | 4020 |
| 4087 NavigateToDestURL(); | 4021 NavigateToDestURL(); |
| 4088 EXPECT_EQ(1U, task_manager.tasks().size()); | 4022 EXPECT_EQ(1U, task_manager.tasks().size()); |
| 4089 } | 4023 } |
| 4090 | 4024 |
| 4091 } // namespace | 4025 } // namespace |
| 4092 | 4026 |
| 4093 #endif // defined(ENABLE_TASK_MANAGER) | 4027 #endif // defined(ENABLE_TASK_MANAGER) |
| 4094 | 4028 |
| 4095 } // namespace prerender | 4029 } // namespace prerender |
| OLD | NEW |