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

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

Issue 11316311: Make PrerenderHandle an observer of PrerenderContents. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix windows build Created 8 years 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 | Annotate | Revision Log
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 "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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698