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

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: re-enable PrerenderDeferredSynchronousXHR 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
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_contents.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 648 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 void OnPrerenderStop(PrerenderContents* contents) override { 659 void OnPrerenderStop(PrerenderContents* contents) override {
660 DCHECK(contents_); 660 DCHECK(contents_);
661 contents_ = NULL; 661 contents_ = NULL;
662 stop_loop_.Quit(); 662 stop_loop_.Quit();
663 // If there is a WaitForLoads call and it has yet to see the expected number 663 // If there is a WaitForLoads call and it has yet to see the expected number
664 // of loads, stop the loop so the test fails instead of timing out. 664 // of loads, stop the loop so the test fails instead of timing out.
665 if (load_waiter_) 665 if (load_waiter_)
666 load_waiter_->Quit(); 666 load_waiter_->Quit();
667 } 667 }
668 668
669 void OnPrerenderCreatedMatchCompleteReplacement(
670 PrerenderContents* contents,
671 PrerenderContents* replacement) override {}
672
673 private: 669 private:
674 TestPrerenderContents* contents_; 670 TestPrerenderContents* contents_;
675 int number_of_loads_; 671 int number_of_loads_;
676 672
677 int expected_number_of_loads_; 673 int expected_number_of_loads_;
678 std::unique_ptr<base::RunLoop> load_waiter_; 674 std::unique_ptr<base::RunLoop> load_waiter_;
679 675
680 base::RunLoop create_loop_; 676 base::RunLoop create_loop_;
681 base::RunLoop start_loop_; 677 base::RunLoop start_loop_;
682 base::RunLoop stop_loop_; 678 base::RunLoop stop_loop_;
(...skipping 2597 matching lines...) Expand 10 before | Expand all | Expand 10 after
3280 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, ControlGroupRendererInitiated) { 3276 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, ControlGroupRendererInitiated) {
3281 RestorePrerenderMode restore_prerender_mode; 3277 RestorePrerenderMode restore_prerender_mode;
3282 PrerenderManager::SetMode( 3278 PrerenderManager::SetMode(
3283 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); 3279 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP);
3284 DisableJavascriptCalls(); 3280 DisableJavascriptCalls();
3285 PrerenderTestURL("/prerender/prerender_xhr_put.html", 3281 PrerenderTestURL("/prerender/prerender_xhr_put.html",
3286 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); 3282 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0);
3287 OpenDestURLViaClick(); 3283 OpenDestURLViaClick();
3288 } 3284 }
3289 3285
3290 // Make sure that the MatchComplete dummy works in the normal case. Once
3291 // a prerender is cancelled because of a script, a dummy must be created to
3292 // account for the MatchComplete case, and it must have a final status of
3293 // FINAL_STATUS_WOULD_HAVE_BEEN_USED.
3294 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) {
3295 RestorePrerenderMode restore_prerender_mode;
3296 PrerenderManager::SetMode(
3297 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP);
3298
3299 std::vector<FinalStatus> expected_final_status_queue;
3300 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD);
3301 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED);
3302 PrerenderTestURL("/prerender/prerender_xhr_put.html",
3303 expected_final_status_queue, 1);
3304 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
3305 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
3306 histogram_tester().ExpectTotalCount(
3307 "Prerender.none_PerceivedPLTMatchedComplete", 0);
3308 histogram_tester().ExpectTotalCount(
3309 "Prerender.websame_PrerenderNotSwappedInPLT", 1);
3310
3311 NavigateToDestURL();
3312 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
3313 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched",
3314 0);
3315 histogram_tester().ExpectTotalCount(
3316 "Prerender.websame_PerceivedPLTMatchedComplete", 1);
3317 }
3318
3319 // Checks that the referrer policy is used when prerendering. 3286 // Checks that the referrer policy is used when prerendering.
3320 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReferrerPolicy) { 3287 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReferrerPolicy) {
3321 set_loader_path("/prerender/prerender_loader_with_referrer_policy.html"); 3288 set_loader_path("/prerender/prerender_loader_with_referrer_policy.html");
3322 PrerenderTestURL("/prerender/prerender_referrer_policy.html", 3289 PrerenderTestURL("/prerender/prerender_referrer_policy.html",
3323 FINAL_STATUS_USED, 1); 3290 FINAL_STATUS_USED, 1);
3324 NavigateToDestURL(); 3291 NavigateToDestURL();
3325 } 3292 }
3326 3293
3327 // Checks that the referrer policy is used when prerendering on HTTPS. 3294 // Checks that the referrer policy is used when prerendering on HTTPS.
3328 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 3295 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
3433 NavigateToDestURL(); 3400 NavigateToDestURL();
3434 channel_close_watcher.WaitForChannelClose(); 3401 channel_close_watcher.WaitForChannelClose();
3435 3402
3436 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); 3403 ASSERT_TRUE(IsEmptyPrerenderLinkManager());
3437 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 3404 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
3438 } 3405 }
3439 3406
3440 // Test that prerenders abort when navigating to a stream. 3407 // Test that prerenders abort when navigating to a stream.
3441 // See chrome/browser/extensions/api/streams_private/streams_private_apitest.cc 3408 // See chrome/browser/extensions/api/streams_private/streams_private_apitest.cc
3442 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, StreamsTest) { 3409 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, StreamsTest) {
3443 RestorePrerenderMode restore_prerender_mode;
3444 PrerenderManager::SetMode(
3445 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP);
3446
3447 ASSERT_TRUE(StartEmbeddedTestServer()); 3410 ASSERT_TRUE(StartEmbeddedTestServer());
3448 3411
3449 const extensions::Extension* extension = LoadExtension( 3412 const extensions::Extension* extension = LoadExtension(
3450 test_data_dir_.AppendASCII("streams_private/handle_mime_type")); 3413 test_data_dir_.AppendASCII("streams_private/handle_mime_type"));
3451 ASSERT_TRUE(extension); 3414 ASSERT_TRUE(extension);
3452 EXPECT_EQ(std::string(extension_misc::kMimeHandlerPrivateTestExtensionId), 3415 EXPECT_EQ(std::string(extension_misc::kMimeHandlerPrivateTestExtensionId),
3453 extension->id()); 3416 extension->id());
3454 MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension); 3417 MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension);
3455 ASSERT_TRUE(handler); 3418 ASSERT_TRUE(handler);
3456 EXPECT_TRUE(handler->CanHandleMIMEType("application/msword")); 3419 EXPECT_TRUE(handler->CanHandleMIMEType("application/msword"));
3457 3420
3458 PrerenderTestURL("/prerender/document.doc", FINAL_STATUS_DOWNLOAD, 0); 3421 PrerenderTestURL("/prerender/document.doc", FINAL_STATUS_DOWNLOAD, 0);
3459 3422
3460 // Sanity-check that the extension would have picked up the stream in a normal 3423 // Sanity-check that the extension would have picked up the stream in a normal
3461 // navigation had prerender not intercepted it. 3424 // navigation had prerender not intercepted it.
3462 // streams_private/handle_mime_type reports success if it has handled the 3425 // The extension streams_private/handle_mime_type reports success if it has
3463 // application/msword type. 3426 // handled the application/msword type.
3427 // Note: NavigateToDestURL() cannot be used because of the assertion shecking
3428 // for non-null PrerenderContents.
3464 extensions::ResultCatcher catcher; 3429 extensions::ResultCatcher catcher;
3465 NavigateToDestURL(); 3430 ui_test_utils::NavigateToURL(current_browser(), dest_url());
3466 EXPECT_TRUE(catcher.GetNextResult()); 3431 EXPECT_TRUE(catcher.GetNextResult());
3467 } 3432 }
3468 3433
3469 // Checks that non-http/https/chrome-extension subresource cancels the 3434 // Checks that non-http/https/chrome-extension subresource cancels the
3470 // prerender. 3435 // prerender.
3471 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 3436 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
3472 PrerenderCancelSubresourceUnsupportedScheme) { 3437 PrerenderCancelSubresourceUnsupportedScheme) {
3473 GURL image_url = GURL("invalidscheme://www.google.com/test.jpg"); 3438 GURL image_url = GURL("invalidscheme://www.google.com/test.jpg");
3474 base::StringPairs replacement_text; 3439 base::StringPairs replacement_text;
3475 replacement_text.push_back( 3440 replacement_text.push_back(
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
3626 // Mock out requests to the Web Store. 3591 // Mock out requests to the Web Store.
3627 base::FilePath file(GetTestPath("prerender_page.html")); 3592 base::FilePath file(GetTestPath("prerender_page.html"));
3628 BrowserThread::PostTask( 3593 BrowserThread::PostTask(
3629 BrowserThread::IO, FROM_HERE, 3594 BrowserThread::IO, FROM_HERE,
3630 base::Bind(&CreateMockInterceptorOnIO, GURL(webstore_url), file)); 3595 base::Bind(&CreateMockInterceptorOnIO, GURL(webstore_url), file));
3631 3596
3632 PrerenderTestURL(CreateClientRedirect(webstore_url), 3597 PrerenderTestURL(CreateClientRedirect(webstore_url),
3633 FINAL_STATUS_OPEN_URL, 1); 3598 FINAL_STATUS_OPEN_URL, 1);
3634 } 3599 }
3635 3600
3636 // Checks that canceling a MatchComplete dummy doesn't result in two
3637 // stop events.
3638 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, CancelMatchCompleteDummy) {
3639 RestorePrerenderMode restore_prerender_mode;
3640 PrerenderManager::SetMode(
3641 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP);
3642
3643 std::vector<FinalStatus> expected_final_status_queue;
3644 expected_final_status_queue.push_back(FINAL_STATUS_JAVASCRIPT_ALERT);
3645 expected_final_status_queue.push_back(FINAL_STATUS_CANCELLED);
3646 ScopedVector<TestPrerender> prerenders =
3647 PrerenderTestURL("/prerender/prerender_alert_before_onload.html",
3648 expected_final_status_queue, 0);
3649
3650 // Cancel the MatchComplete dummy.
3651 GetPrerenderManager()->CancelAllPrerenders();
3652 prerenders[1]->WaitForStop();
3653
3654 // Check the referring page only got one copy of the event.
3655 EXPECT_FALSE(HadPrerenderEventErrors());
3656 }
3657
3658 // Checks that a deferred redirect to an image is not loaded until the page is 3601 // Checks that a deferred redirect to an image is not loaded until the page is
3659 // visible. Also test the right histogram events are emitted in this case. 3602 // visible. Also test the right histogram events are emitted in this case.
3660 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { 3603 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) {
3661 DisableJavascriptCalls(); 3604 DisableJavascriptCalls();
3662 3605
3663 // The prerender will not completely load until after the swap, so wait for a 3606 // The prerender will not completely load until after the swap, so wait for a
3664 // title change before calling DidPrerenderPass. 3607 // title change before calling DidPrerenderPass.
3665 std::unique_ptr<TestPrerender> prerender = PrerenderTestURL( 3608 std::unique_ptr<TestPrerender> prerender = PrerenderTestURL(
3666 "/prerender/prerender_deferred_image.html", FINAL_STATUS_USED, 0); 3609 "/prerender/prerender_deferred_image.html", FINAL_STATUS_USED, 0);
3667 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); 3610 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
3737 // Checks that deferred redirects in the main frame are followed, even 3680 // Checks that deferred redirects in the main frame are followed, even
3738 // with a double-redirect. 3681 // with a double-redirect.
3739 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 3682 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
3740 PrerenderDeferredMainFrameAfterRedirect) { 3683 PrerenderDeferredMainFrameAfterRedirect) {
3741 DisableJavascriptCalls(); 3684 DisableJavascriptCalls();
3742 PrerenderTestURL(CreateServerRedirect("/prerender/image-deferred.png"), 3685 PrerenderTestURL(CreateServerRedirect("/prerender/image-deferred.png"),
3743 FINAL_STATUS_USED, 1); 3686 FINAL_STATUS_USED, 1);
3744 NavigateToDestURL(); 3687 NavigateToDestURL();
3745 } 3688 }
3746 3689
3747 // Checks that deferred redirects in a synchronous XHR abort the 3690 // Checks that deferred redirects in a synchronous XHR abort the prerender.
3748 // prerender.
3749 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredSynchronousXHR) { 3691 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredSynchronousXHR) {
3750 RestorePrerenderMode restore_prerender_mode;
3751 PrerenderManager::SetMode(
3752 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP);
3753 PrerenderTestURL("/prerender/prerender_deferred_sync_xhr.html", 3692 PrerenderTestURL("/prerender/prerender_deferred_sync_xhr.html",
3754 FINAL_STATUS_BAD_DEFERRED_REDIRECT, 0); 3693 FINAL_STATUS_BAD_DEFERRED_REDIRECT, 0);
3755 NavigateToDestURL(); 3694 ui_test_utils::NavigateToURL(current_browser(), dest_url());
3756 } 3695 }
3757 3696
3758 // Checks that prerenders are not swapped for navigations with extra headers. 3697 // Checks that prerenders are not swapped for navigations with extra headers.
3759 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExtraHeadersNoSwap) { 3698 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExtraHeadersNoSwap) {
3760 PrerenderTestURL("/prerender/prerender_page.html", 3699 PrerenderTestURL("/prerender/prerender_page.html",
3761 FINAL_STATUS_APP_TERMINATING, 1); 3700 FINAL_STATUS_APP_TERMINATING, 1);
3762 3701
3763 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, 3702 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB,
3764 ui::PAGE_TRANSITION_TYPED, false); 3703 ui::PAGE_TRANSITION_TYPED, false);
3765 params.extra_headers = "X-Custom-Header: 42\r\n"; 3704 params.extra_headers = "X-Custom-Header: 42\r\n";
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
4004 browser()->tab_strip_model()->GetActiveWebContents(); 3943 browser()->tab_strip_model()->GetActiveWebContents();
4005 bool display_test_result = false; 3944 bool display_test_result = false;
4006 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(web_contents, 3945 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(web_contents,
4007 "DidDisplayReallyPass()", 3946 "DidDisplayReallyPass()",
4008 &display_test_result)); 3947 &display_test_result));
4009 ASSERT_TRUE(display_test_result); 3948 ASSERT_TRUE(display_test_result);
4010 } 3949 }
4011 #endif // !defined(DISABLE_NACL) 3950 #endif // !defined(DISABLE_NACL)
4012 3951
4013 } // namespace prerender 3952 } // namespace prerender
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_contents.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698