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 "base/command_line.h" | 5 #include "base/command_line.h" |
6 #include "base/memory/scoped_vector.h" | 6 #include "base/memory/scoped_vector.h" |
7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
9 #include "base/time.h" | 9 #include "base/time.h" |
10 #include "chrome/browser/prerender/prerender_contents.h" | 10 #include "chrome/browser/prerender/prerender_contents.h" |
(...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
642 DummyPrerenderContents* pending_prerender_contents = | 642 DummyPrerenderContents* pending_prerender_contents = |
643 prerender_manager()->CreateNextPrerenderContents( | 643 prerender_manager()->CreateNextPrerenderContents( |
644 pending_url, | 644 pending_url, |
645 ORIGIN_GWS_PRERENDER, | 645 ORIGIN_GWS_PRERENDER, |
646 FINAL_STATUS_USED); | 646 FINAL_STATUS_USED); |
647 scoped_ptr<PrerenderHandle> pending_prerender_handle( | 647 scoped_ptr<PrerenderHandle> pending_prerender_handle( |
648 prerender_manager()->AddPrerenderFromLinkRelPrerender( | 648 prerender_manager()->AddPrerenderFromLinkRelPrerender( |
649 child_id, route_id, pending_url, | 649 child_id, route_id, pending_url, |
650 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); | 650 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); |
651 CHECK(pending_prerender_handle.get()); | 651 CHECK(pending_prerender_handle.get()); |
652 EXPECT_TRUE(pending_prerender_handle->IsValid()); | 652 EXPECT_FALSE(pending_prerender_handle->IsValid()); |
653 EXPECT_TRUE(pending_prerender_handle->IsPending()); | |
654 | 653 |
655 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 654 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
656 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | 655 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); |
657 | 656 |
658 EXPECT_FALSE(pending_prerender_handle->IsPending()); | 657 EXPECT_TRUE(pending_prerender_handle->IsValid()); |
659 ASSERT_EQ(pending_prerender_contents, | 658 ASSERT_EQ(pending_prerender_contents, |
660 prerender_manager()->FindAndUseEntry(pending_url)); | 659 prerender_manager()->FindAndUseEntry(pending_url)); |
661 } | 660 } |
662 | 661 |
663 TEST_F(PrerenderTest, InvalidPendingPrerenderTest) { | 662 TEST_F(PrerenderTest, InvalidPendingPrerenderTest) { |
664 GURL url("http://www.google.com/"); | 663 GURL url("http://www.google.com/"); |
665 DummyPrerenderContents* prerender_contents = | 664 DummyPrerenderContents* prerender_contents = |
666 prerender_manager()->CreateNextPrerenderContents( | 665 prerender_manager()->CreateNextPrerenderContents( |
667 url, | 666 url, |
668 FINAL_STATUS_USED); | 667 FINAL_STATUS_USED); |
(...skipping 10 matching lines...) Expand all Loading... | |
679 | 678 |
680 prerender_manager()->CreateNextPrerenderContents( | 679 prerender_manager()->CreateNextPrerenderContents( |
681 pending_url, | 680 pending_url, |
682 ORIGIN_GWS_PRERENDER, | 681 ORIGIN_GWS_PRERENDER, |
683 FINAL_STATUS_UNSUPPORTED_SCHEME); | 682 FINAL_STATUS_UNSUPPORTED_SCHEME); |
684 scoped_ptr<PrerenderHandle> pending_prerender_handle( | 683 scoped_ptr<PrerenderHandle> pending_prerender_handle( |
685 prerender_manager()->AddPrerenderFromLinkRelPrerender( | 684 prerender_manager()->AddPrerenderFromLinkRelPrerender( |
686 child_id, route_id, pending_url, | 685 child_id, route_id, pending_url, |
687 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); | 686 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); |
688 DCHECK(pending_prerender_handle.get()); | 687 DCHECK(pending_prerender_handle.get()); |
689 EXPECT_TRUE(pending_prerender_handle->IsValid()); | 688 EXPECT_FALSE(pending_prerender_handle->IsValid()); |
690 EXPECT_TRUE(pending_prerender_handle->IsPending()); | |
691 | 689 |
692 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 690 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
693 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | 691 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); |
694 | 692 |
695 EXPECT_FALSE(pending_prerender_handle->IsValid()); | 693 EXPECT_FALSE(pending_prerender_handle->IsValid()); |
696 EXPECT_FALSE(pending_prerender_handle->IsPending()); | |
697 } | 694 } |
698 | 695 |
699 TEST_F(PrerenderTest, CancelPendingPrerenderTest) { | 696 TEST_F(PrerenderTest, CancelPendingPrerenderTest) { |
700 GURL url("http://www.google.com/"); | 697 GURL url("http://www.google.com/"); |
701 DummyPrerenderContents* prerender_contents = | 698 DummyPrerenderContents* prerender_contents = |
702 prerender_manager()->CreateNextPrerenderContents( | 699 prerender_manager()->CreateNextPrerenderContents( |
703 url, | 700 url, |
704 FINAL_STATUS_USED); | 701 FINAL_STATUS_USED); |
705 EXPECT_TRUE(AddSimplePrerender(url)); | 702 EXPECT_TRUE(AddSimplePrerender(url)); |
706 | 703 |
707 int child_id; | 704 int child_id; |
708 int route_id; | 705 int route_id; |
709 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); | 706 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); |
710 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); | 707 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); |
711 | 708 |
712 GURL pending_url("http://news.google.com/"); | 709 GURL pending_url("http://news.google.com/"); |
713 | 710 |
714 scoped_ptr<PrerenderHandle> pending_prerender_handle( | 711 scoped_ptr<PrerenderHandle> pending_prerender_handle( |
715 prerender_manager()->AddPrerenderFromLinkRelPrerender( | 712 prerender_manager()->AddPrerenderFromLinkRelPrerender( |
716 child_id, route_id, pending_url, | 713 child_id, route_id, pending_url, |
717 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); | 714 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); |
718 CHECK(pending_prerender_handle.get()); | 715 CHECK(pending_prerender_handle.get()); |
719 EXPECT_TRUE(pending_prerender_handle->IsValid()); | 716 EXPECT_FALSE(pending_prerender_handle->IsValid()); |
720 EXPECT_TRUE(pending_prerender_handle->IsPending()); | |
721 | 717 |
722 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 718 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
723 | 719 |
724 pending_prerender_handle->OnCancel(); | 720 pending_prerender_handle->OnCancel(); |
725 EXPECT_FALSE(pending_prerender_handle->IsValid()); | 721 EXPECT_FALSE(pending_prerender_handle->IsPrerendering()); |
726 | 722 |
727 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | 723 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); |
728 } | 724 } |
729 | 725 |
730 // Tests that a PrerenderManager created for a browser session in the control | 726 // Tests that a PrerenderManager created for a browser session in the control |
731 // group works as expected. | 727 // group works as expected. |
732 TEST_F(PrerenderTest, ControlGroup) { | 728 TEST_F(PrerenderTest, ControlGroup) { |
733 RestorePrerenderMode restore_prerender_mode; | 729 RestorePrerenderMode restore_prerender_mode; |
734 PrerenderManager::SetMode( | 730 PrerenderManager::SetMode( |
735 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); | 731 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
832 EXPECT_TRUE(AddSimplePrerender(url)); | 828 EXPECT_TRUE(AddSimplePrerender(url)); |
833 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 829 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
834 // Force the creation of a match complete dummy. | 830 // Force the creation of a match complete dummy. |
835 DummyPrerenderContents* duplicate_prerender_contents = | 831 DummyPrerenderContents* duplicate_prerender_contents = |
836 prerender_manager()->CreateNextPrerenderContents(url, | 832 prerender_manager()->CreateNextPrerenderContents(url, |
837 FINAL_STATUS_CANCELLED); | 833 FINAL_STATUS_CANCELLED); |
838 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); | 834 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
839 prerender_contents->Destroy(FINAL_STATUS_JAVASCRIPT_ALERT); | 835 prerender_contents->Destroy(FINAL_STATUS_JAVASCRIPT_ALERT); |
840 ASSERT_EQ(duplicate_prerender_contents, prerender_manager()->FindEntry(url)); | 836 ASSERT_EQ(duplicate_prerender_contents, prerender_manager()->FindEntry(url)); |
841 | 837 |
838 // Surprisingly, OnCancelPrerender isn't expected to do anything because the | |
839 // PrerenderLinkManager has already removed this prerender. | |
mmenke
2012/12/07 16:46:08
Doesn't this mess up book keeping? If the prerend
gavinp
2012/12/10 17:55:10
But the PrerenderStop event was sent, and that rem
| |
842 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, | 840 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, |
843 last_prerender_id()); | 841 last_prerender_id()); |
842 ASSERT_EQ(duplicate_prerender_contents, prerender_manager()->FindEntry(url)); | |
843 | |
844 // But the PrerenderContents will exist, albiet with no handle. | |
845 duplicate_prerender_contents->Destroy(FINAL_STATUS_CANCELLED); | |
844 DummyPrerenderContents* null = NULL; | 846 DummyPrerenderContents* null = NULL; |
845 ASSERT_EQ(null, prerender_manager()->FindEntry(url)); | 847 ASSERT_EQ(null, prerender_manager()->FindEntry(url)); |
846 } | 848 } |
847 | 849 |
848 | |
849 // Tests that the prerender manager matches include the fragment. | 850 // Tests that the prerender manager matches include the fragment. |
850 TEST_F(PrerenderTest, FragmentMatchesTest) { | 851 TEST_F(PrerenderTest, FragmentMatchesTest) { |
851 GURL fragment_url("http://www.google.com/#test"); | 852 GURL fragment_url("http://www.google.com/#test"); |
852 | 853 |
853 DummyPrerenderContents* prerender_contents = | 854 DummyPrerenderContents* prerender_contents = |
854 prerender_manager()->CreateNextPrerenderContents(fragment_url, | 855 prerender_manager()->CreateNextPrerenderContents(fragment_url, |
855 FINAL_STATUS_USED); | 856 FINAL_STATUS_USED); |
856 EXPECT_TRUE(AddSimplePrerender(fragment_url)); | 857 EXPECT_TRUE(AddSimplePrerender(fragment_url)); |
857 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 858 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
858 ASSERT_EQ(prerender_contents, | 859 ASSERT_EQ(prerender_contents, |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
979 | 980 |
980 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 981 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
981 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); | 982 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); |
982 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); | 983 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
983 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | 984 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
984 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, | 985 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
985 last_prerender_id()); | 986 last_prerender_id()); |
986 | 987 |
987 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); | 988 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); |
988 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | 989 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); |
989 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | |
990 } | 990 } |
991 | 991 |
992 TEST_F(PrerenderTest, LinkManagerCancelTwice) { | 992 TEST_F(PrerenderTest, LinkManagerCancelTwice) { |
993 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 993 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
994 GURL url("http://www.myexample.com"); | 994 GURL url("http://www.myexample.com"); |
995 DummyPrerenderContents* prerender_contents = | 995 DummyPrerenderContents* prerender_contents = |
996 prerender_manager()->CreateNextPrerenderContents( | 996 prerender_manager()->CreateNextPrerenderContents( |
997 url, FINAL_STATUS_CANCELLED); | 997 url, FINAL_STATUS_CANCELLED); |
998 | 998 |
999 EXPECT_TRUE(AddSimplePrerender(url)); | 999 EXPECT_TRUE(AddSimplePrerender(url)); |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1109 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); | 1109 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); |
1110 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); | 1110 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
1111 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, | 1111 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
1112 first_prerender_id); | 1112 first_prerender_id); |
1113 | 1113 |
1114 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); | 1114 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); |
1115 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); | 1115 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
1116 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, | 1116 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
1117 second_prerender_id); | 1117 second_prerender_id); |
1118 | 1118 |
1119 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | |
1120 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); | 1119 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); |
1121 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | 1120 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); |
1122 } | 1121 } |
1123 | 1122 |
1124 // TODO(gavinp): After abandon shortens the expire time on a Prerender, | 1123 // TODO(gavinp): After abandon shortens the expire time on a Prerender, |
1125 // add a series of tests testing advancing the time by either the abandon | 1124 // add a series of tests testing advancing the time by either the abandon |
1126 // or normal expire, and verifying the expected behaviour with groups | 1125 // or normal expire, and verifying the expected behaviour with groups |
1127 // of links. | 1126 // of links. |
1128 TEST_F(PrerenderTest, LinkManagerExpireThenCancel) { | 1127 TEST_F(PrerenderTest, LinkManagerExpireThenCancel) { |
1129 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1128 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1165 prerender_manager()->config().time_to_live + TimeDelta::FromSeconds(1)); | 1164 prerender_manager()->config().time_to_live + TimeDelta::FromSeconds(1)); |
1166 DummyPrerenderContents* null = NULL; | 1165 DummyPrerenderContents* null = NULL; |
1167 ASSERT_EQ(null, prerender_manager()->FindEntry(url)); | 1166 ASSERT_EQ(null, prerender_manager()->FindEntry(url)); |
1168 DummyPrerenderContents* second_prerender_contents = | 1167 DummyPrerenderContents* second_prerender_contents = |
1169 prerender_manager()->CreateNextPrerenderContents( | 1168 prerender_manager()->CreateNextPrerenderContents( |
1170 url, FINAL_STATUS_USED); | 1169 url, FINAL_STATUS_USED); |
1171 EXPECT_TRUE(AddSimplePrerender(url)); | 1170 EXPECT_TRUE(AddSimplePrerender(url)); |
1172 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); | 1171 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); |
1173 ASSERT_EQ(second_prerender_contents, | 1172 ASSERT_EQ(second_prerender_contents, |
1174 prerender_manager()->FindAndUseEntry(url)); | 1173 prerender_manager()->FindAndUseEntry(url)); |
1175 // The PrerenderLinkManager is not empty since we never removed the first | |
1176 // prerender. | |
1177 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | |
1178 } | 1174 } |
1179 | 1175 |
1180 TEST_F(PrerenderTest, LinkManagerCancelThenAddAgain) { | 1176 TEST_F(PrerenderTest, LinkManagerCancelThenAddAgain) { |
1181 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1177 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
1182 GURL url("http://www.myexample.com"); | 1178 GURL url("http://www.myexample.com"); |
1183 DummyPrerenderContents* first_prerender_contents = | 1179 DummyPrerenderContents* first_prerender_contents = |
1184 prerender_manager()->CreateNextPrerenderContents( | 1180 prerender_manager()->CreateNextPrerenderContents( |
1185 url, FINAL_STATUS_CANCELLED); | 1181 url, FINAL_STATUS_CANCELLED); |
1186 EXPECT_TRUE(AddSimplePrerender(url)); | 1182 EXPECT_TRUE(AddSimplePrerender(url)); |
1187 EXPECT_TRUE(first_prerender_contents->prerendering_has_started()); | 1183 EXPECT_TRUE(first_prerender_contents->prerendering_has_started()); |
1188 EXPECT_FALSE(first_prerender_contents->prerendering_has_been_cancelled()); | 1184 EXPECT_FALSE(first_prerender_contents->prerendering_has_been_cancelled()); |
1189 ASSERT_EQ(first_prerender_contents, prerender_manager()->FindEntry(url)); | 1185 ASSERT_EQ(first_prerender_contents, prerender_manager()->FindEntry(url)); |
1190 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, | 1186 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, |
1191 last_prerender_id()); | 1187 last_prerender_id()); |
1192 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1188 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
1193 EXPECT_TRUE(first_prerender_contents->prerendering_has_been_cancelled()); | 1189 EXPECT_TRUE(first_prerender_contents->prerendering_has_been_cancelled()); |
1194 DummyPrerenderContents* null = NULL; | 1190 DummyPrerenderContents* null = NULL; |
1195 ASSERT_EQ(null, prerender_manager()->FindEntry(url)); | 1191 ASSERT_EQ(null, prerender_manager()->FindEntry(url)); |
1196 DummyPrerenderContents* second_prerender_contents = | 1192 DummyPrerenderContents* second_prerender_contents = |
1197 prerender_manager()->CreateNextPrerenderContents( | 1193 prerender_manager()->CreateNextPrerenderContents( |
1198 url, FINAL_STATUS_USED); | 1194 url, FINAL_STATUS_USED); |
1199 EXPECT_TRUE(AddSimplePrerender(url)); | 1195 EXPECT_TRUE(AddSimplePrerender(url)); |
1200 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); | 1196 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); |
1201 ASSERT_EQ(second_prerender_contents, | 1197 ASSERT_EQ(second_prerender_contents, |
1202 prerender_manager()->FindAndUseEntry(url)); | 1198 prerender_manager()->FindAndUseEntry(url)); |
1203 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | |
1204 } | 1199 } |
1205 | 1200 |
1206 } // namespace prerender | 1201 } // namespace prerender |
OLD | NEW |