| 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 <deque> | 5 #include <deque> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 3339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3350 PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 3350 PrerenderTestURL("files/prerender/prerender_xhr_put.html", |
| 3351 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); | 3351 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); |
| 3352 OpenDestURLViaClick(); | 3352 OpenDestURLViaClick(); |
| 3353 } | 3353 } |
| 3354 | 3354 |
| 3355 // Make sure that the MatchComplete dummy works in the normal case. Once | 3355 // Make sure that the MatchComplete dummy works in the normal case. Once |
| 3356 // a prerender is cancelled because of a script, a dummy must be created to | 3356 // a prerender is cancelled because of a script, a dummy must be created to |
| 3357 // account for the MatchComplete case, and it must have a final status of | 3357 // account for the MatchComplete case, and it must have a final status of |
| 3358 // FINAL_STATUS_WOULD_HAVE_BEEN_USED. | 3358 // FINAL_STATUS_WOULD_HAVE_BEEN_USED. |
| 3359 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) { | 3359 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) { |
| 3360 RestorePrerenderMode restore_prerender_mode; |
| 3361 PrerenderManager::SetMode( |
| 3362 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); |
| 3360 | 3363 |
| 3361 std::vector<FinalStatus> expected_final_status_queue; | 3364 std::vector<FinalStatus> expected_final_status_queue; |
| 3362 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); | 3365 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); |
| 3363 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); | 3366 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); |
| 3364 PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 3367 PrerenderTestURL("files/prerender/prerender_xhr_put.html", |
| 3365 expected_final_status_queue, 1); | 3368 expected_final_status_queue, 1); |
| 3366 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 3369 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 3367 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 3370 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 3368 histogram_tester().ExpectTotalCount( | 3371 histogram_tester().ExpectTotalCount( |
| 3369 "Prerender.none_PerceivedPLTMatchedComplete", 0); | 3372 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 3370 histogram_tester().ExpectTotalCount( | 3373 histogram_tester().ExpectTotalCount( |
| 3371 "Prerender.websame_PrerenderNotSwappedInPLT", 1); | 3374 "Prerender.websame_PrerenderNotSwappedInPLT", 1); |
| 3372 | 3375 |
| 3373 NavigateToDestURL(); | 3376 NavigateToDestURL(); |
| 3374 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 3377 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); |
| 3375 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", | 3378 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", |
| 3376 0); | 3379 0); |
| 3377 histogram_tester().ExpectTotalCount( | 3380 histogram_tester().ExpectTotalCount( |
| 3378 "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 3381 "Prerender.websame_PerceivedPLTMatchedComplete", 1); |
| 3379 } | 3382 } |
| 3380 | 3383 |
| 3381 // Verify that a navigation that hits a MatchComplete dummy while another is in | 3384 // Verify that a navigation that hits a MatchComplete dummy while another is in |
| 3382 // progress does not also classify the previous navigation as a MatchComplete. | 3385 // progress does not also classify the previous navigation as a MatchComplete. |
| 3383 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3386 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3384 MatchCompleteDummyCancelNavigation) { | 3387 MatchCompleteDummyCancelNavigation) { |
| 3388 RestorePrerenderMode restore_prerender_mode; |
| 3389 PrerenderManager::SetMode( |
| 3390 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); |
| 3391 |
| 3385 // Arrange for a URL to hang. | 3392 // Arrange for a URL to hang. |
| 3386 const GURL kNoCommitUrl("http://never-respond.example.com"); | 3393 const GURL kNoCommitUrl("http://never-respond.example.com"); |
| 3387 base::FilePath file(FILE_PATH_LITERAL( | 3394 base::FilePath file(FILE_PATH_LITERAL( |
| 3388 "chrome/test/data/prerender/prerender_page.html")); | 3395 "chrome/test/data/prerender/prerender_page.html")); |
| 3389 base::RunLoop hang_loop; | 3396 base::RunLoop hang_loop; |
| 3390 BrowserThread::PostTask( | 3397 BrowserThread::PostTask( |
| 3391 BrowserThread::IO, FROM_HERE, | 3398 BrowserThread::IO, FROM_HERE, |
| 3392 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, kNoCommitUrl, | 3399 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, kNoCommitUrl, |
| 3393 file, hang_loop.QuitClosure())); | 3400 file, hang_loop.QuitClosure())); |
| 3394 | 3401 |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3580 NavigateToDestURL(); | 3587 NavigateToDestURL(); |
| 3581 channel_close_watcher.WaitForChannelClose(); | 3588 channel_close_watcher.WaitForChannelClose(); |
| 3582 | 3589 |
| 3583 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 3590 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
| 3584 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); | 3591 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); |
| 3585 } | 3592 } |
| 3586 | 3593 |
| 3587 // Test that prerenders abort when navigating to a stream. | 3594 // Test that prerenders abort when navigating to a stream. |
| 3588 // See chrome/browser/extensions/api/streams_private/streams_private_apitest.cc | 3595 // See chrome/browser/extensions/api/streams_private/streams_private_apitest.cc |
| 3589 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, StreamsTest) { | 3596 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, StreamsTest) { |
| 3597 RestorePrerenderMode restore_prerender_mode; |
| 3598 PrerenderManager::SetMode( |
| 3599 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); |
| 3600 |
| 3590 ASSERT_TRUE(StartSpawnedTestServer()); | 3601 ASSERT_TRUE(StartSpawnedTestServer()); |
| 3591 | 3602 |
| 3592 const extensions::Extension* extension = LoadExtension( | 3603 const extensions::Extension* extension = LoadExtension( |
| 3593 test_data_dir_.AppendASCII("streams_private/handle_mime_type")); | 3604 test_data_dir_.AppendASCII("streams_private/handle_mime_type")); |
| 3594 ASSERT_TRUE(extension); | 3605 ASSERT_TRUE(extension); |
| 3595 EXPECT_EQ(std::string(extension_misc::kStreamsPrivateTestExtensionId), | 3606 EXPECT_EQ(std::string(extension_misc::kStreamsPrivateTestExtensionId), |
| 3596 extension->id()); | 3607 extension->id()); |
| 3597 MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension); | 3608 MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension); |
| 3598 ASSERT_TRUE(handler); | 3609 ASSERT_TRUE(handler); |
| 3599 EXPECT_TRUE(handler->CanHandleMIMEType("application/msword")); | 3610 EXPECT_TRUE(handler->CanHandleMIMEType("application/msword")); |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3780 BrowserThread::IO, FROM_HERE, | 3791 BrowserThread::IO, FROM_HERE, |
| 3781 base::Bind(&CreateMockInterceptorOnIO, GURL(webstore_url), file)); | 3792 base::Bind(&CreateMockInterceptorOnIO, GURL(webstore_url), file)); |
| 3782 | 3793 |
| 3783 PrerenderTestURL(CreateClientRedirect(webstore_url), | 3794 PrerenderTestURL(CreateClientRedirect(webstore_url), |
| 3784 FINAL_STATUS_OPEN_URL, 1); | 3795 FINAL_STATUS_OPEN_URL, 1); |
| 3785 } | 3796 } |
| 3786 | 3797 |
| 3787 // Checks that canceling a MatchComplete dummy doesn't result in two | 3798 // Checks that canceling a MatchComplete dummy doesn't result in two |
| 3788 // stop events. | 3799 // stop events. |
| 3789 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, CancelMatchCompleteDummy) { | 3800 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, CancelMatchCompleteDummy) { |
| 3801 RestorePrerenderMode restore_prerender_mode; |
| 3802 PrerenderManager::SetMode( |
| 3803 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); |
| 3804 |
| 3790 std::vector<FinalStatus> expected_final_status_queue; | 3805 std::vector<FinalStatus> expected_final_status_queue; |
| 3791 expected_final_status_queue.push_back(FINAL_STATUS_JAVASCRIPT_ALERT); | 3806 expected_final_status_queue.push_back(FINAL_STATUS_JAVASCRIPT_ALERT); |
| 3792 expected_final_status_queue.push_back(FINAL_STATUS_CANCELLED); | 3807 expected_final_status_queue.push_back(FINAL_STATUS_CANCELLED); |
| 3793 ScopedVector<TestPrerender> prerenders = | 3808 ScopedVector<TestPrerender> prerenders = |
| 3794 PrerenderTestURL("files/prerender/prerender_alert_before_onload.html", | 3809 PrerenderTestURL("files/prerender/prerender_alert_before_onload.html", |
| 3795 expected_final_status_queue, 0); | 3810 expected_final_status_queue, 0); |
| 3796 | 3811 |
| 3797 // Cancel the MatchComplete dummy. | 3812 // Cancel the MatchComplete dummy. |
| 3798 GetPrerenderManager()->CancelAllPrerenders(); | 3813 GetPrerenderManager()->CancelAllPrerenders(); |
| 3799 prerenders[1]->WaitForStop(); | 3814 prerenders[1]->WaitForStop(); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3894 DisableJavascriptCalls(); | 3909 DisableJavascriptCalls(); |
| 3895 PrerenderTestURL( | 3910 PrerenderTestURL( |
| 3896 CreateServerRedirect("files/prerender/image-deferred.png"), | 3911 CreateServerRedirect("files/prerender/image-deferred.png"), |
| 3897 FINAL_STATUS_USED, 1); | 3912 FINAL_STATUS_USED, 1); |
| 3898 NavigateToDestURL(); | 3913 NavigateToDestURL(); |
| 3899 } | 3914 } |
| 3900 | 3915 |
| 3901 // Checks that deferred redirects in a synchronous XHR abort the | 3916 // Checks that deferred redirects in a synchronous XHR abort the |
| 3902 // prerender. | 3917 // prerender. |
| 3903 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredSynchronousXHR) { | 3918 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredSynchronousXHR) { |
| 3919 RestorePrerenderMode restore_prerender_mode; |
| 3920 PrerenderManager::SetMode( |
| 3921 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); |
| 3904 PrerenderTestURL("files/prerender/prerender_deferred_sync_xhr.html", | 3922 PrerenderTestURL("files/prerender/prerender_deferred_sync_xhr.html", |
| 3905 FINAL_STATUS_BAD_DEFERRED_REDIRECT, 0); | 3923 FINAL_STATUS_BAD_DEFERRED_REDIRECT, 0); |
| 3906 NavigateToDestURL(); | 3924 NavigateToDestURL(); |
| 3907 } | 3925 } |
| 3908 | 3926 |
| 3909 // Checks that prerenders are not swapped for navigations with extra headers. | 3927 // Checks that prerenders are not swapped for navigations with extra headers. |
| 3910 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExtraHeadersNoSwap) { | 3928 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExtraHeadersNoSwap) { |
| 3911 PrerenderTestURL("files/prerender/prerender_page.html", | 3929 PrerenderTestURL("files/prerender/prerender_page.html", |
| 3912 FINAL_STATUS_APP_TERMINATING, 1); | 3930 FINAL_STATUS_APP_TERMINATING, 1); |
| 3913 | 3931 |
| (...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4428 | 4446 |
| 4429 // Navigate to the URL entered. | 4447 // Navigate to the URL entered. |
| 4430 omnibox_view->model()->AcceptInput(CURRENT_TAB, false); | 4448 omnibox_view->model()->AcceptInput(CURRENT_TAB, false); |
| 4431 | 4449 |
| 4432 // Prerender should be running, but abandoned. | 4450 // Prerender should be running, but abandoned. |
| 4433 EXPECT_TRUE( | 4451 EXPECT_TRUE( |
| 4434 GetAutocompleteActionPredictor()->IsPrerenderAbandonedForTesting()); | 4452 GetAutocompleteActionPredictor()->IsPrerenderAbandonedForTesting()); |
| 4435 } | 4453 } |
| 4436 | 4454 |
| 4437 } // namespace prerender | 4455 } // namespace prerender |
| OLD | NEW |