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

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

Issue 1896403002: Prerender: Remove MatchComplete (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: added TODO for MatchCompleteStatus Created 4 years, 7 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 <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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_contents.h » ('j') | chrome/browser/prerender/prerender_contents.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698