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

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

Issue 6171007: For prerendering, keep track of all the intermediate redirects, and hook into... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/time.h" 5 #include "base/time.h"
6 #include "chrome/browser/prerender/prerender_contents.h" 6 #include "chrome/browser/prerender/prerender_contents.h"
7 #include "chrome/browser/prerender/prerender_manager.h" 7 #include "chrome/browser/prerender/prerender_manager.h"
8 #include "googleurl/src/gurl.h" 8 #include "googleurl/src/gurl.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
11 namespace { 11 namespace {
12 12
13 class DummyPrerenderContents : public PrerenderContents { 13 class DummyPrerenderContents : public PrerenderContents {
14 public: 14 public:
15 DummyPrerenderContents(PrerenderManager* prerender_manager, const GURL& url) 15 DummyPrerenderContents(PrerenderManager* prerender_manager, const GURL& url)
16 : PrerenderContents(prerender_manager, NULL, url), 16 : PrerenderContents(prerender_manager, NULL, url,
17 std::vector<GURL>()),
17 has_started_(false) { 18 has_started_(false) {
18 } 19 }
19 20
20 virtual void StartPrerendering() { 21 virtual void StartPrerendering() {
21 has_started_ = true; 22 has_started_ = true;
22 } 23 }
23 24
24 bool has_started() const { return has_started_; } 25 bool has_started() const { return has_started_; }
25 26
26 private: 27 private:
27 bool has_started_; 28 bool has_started_;
28 }; 29 };
29 30
30 class TestPrerenderManager : public PrerenderManager { 31 class TestPrerenderManager : public PrerenderManager {
31 public: 32 public:
32 TestPrerenderManager() 33 TestPrerenderManager()
33 : PrerenderManager(NULL), 34 : PrerenderManager(NULL),
34 time_(base::Time::Now()), 35 time_(base::Time::Now()),
35 next_pc_(NULL) { 36 next_pc_(NULL) {
36 } 37 }
37 38
38 void AdvanceTime(base::TimeDelta delta) { 39 void AdvanceTime(base::TimeDelta delta) {
39 time_ += delta; 40 time_ += delta;
40 } 41 }
41 42
42 void SetNextPrerenderContents(PrerenderContents* pc) { 43 void SetNextPrerenderContents(PrerenderContents* pc) {
43 next_pc_.reset(pc); 44 next_pc_.reset(pc);
44 } 45 }
45 46
47 // Shorthand to add a simple preload with no aliases.
48 void AddSimplePreload(const GURL& url) {
cbentzel 2011/01/14 02:01:13 Should you add a unit test for the multiple alias_
tburkard 2011/01/18 22:29:18 Done.
49 AddPreload(url, std::vector<GURL>());
50 }
51
46 PrerenderContents* next_pc() { return next_pc_.get(); } 52 PrerenderContents* next_pc() { return next_pc_.get(); }
47 53
48 protected: 54 protected:
49 virtual ~TestPrerenderManager() { 55 virtual ~TestPrerenderManager() {
50 } 56 }
51 57
52 private: 58 private:
53 virtual base::Time GetCurrentTime() const { 59 virtual base::Time GetCurrentTime() const {
54 return time_; 60 return time_;
55 } 61 }
56 62
57 virtual PrerenderContents* CreatePrerenderContents(const GURL& url) { 63 virtual PrerenderContents* CreatePrerenderContents(
64 const GURL& url,
65 const std::vector<GURL>& alias_urls) {
58 return next_pc_.release(); 66 return next_pc_.release();
59 } 67 }
60 68
61 base::Time time_; 69 base::Time time_;
62 scoped_ptr<PrerenderContents> next_pc_; 70 scoped_ptr<PrerenderContents> next_pc_;
63 }; 71 };
64 72
65 } // namespace 73 } // namespace
66 74
67 class PrerenderManagerTest : public testing::Test { 75 class PrerenderManagerTest : public testing::Test {
68 public: 76 public:
69 PrerenderManagerTest() : prerender_manager_(new TestPrerenderManager()) { 77 PrerenderManagerTest() : prerender_manager_(new TestPrerenderManager()) {
70 } 78 }
71 79
72 protected: 80 protected:
73 scoped_refptr<TestPrerenderManager> prerender_manager_; 81 scoped_refptr<TestPrerenderManager> prerender_manager_;
74 }; 82 };
75 83
76 TEST_F(PrerenderManagerTest, EmptyTest) { 84 TEST_F(PrerenderManagerTest, EmptyTest) {
77 GURL url("http://www.google.com/"); 85 GURL url("http://www.google.com/");
78 EXPECT_FALSE(prerender_manager_->MaybeUsePreloadedPage(NULL, url)); 86 EXPECT_FALSE(prerender_manager_->MaybeUsePreloadedPage(NULL, url));
79 } 87 }
80 88
81 TEST_F(PrerenderManagerTest, FoundTest) { 89 TEST_F(PrerenderManagerTest, FoundTest) {
82 GURL url("http://www.google.com/"); 90 GURL url("http://www.google.com/");
83 DummyPrerenderContents* pc = 91 DummyPrerenderContents* pc =
84 new DummyPrerenderContents(prerender_manager_.get(), url); 92 new DummyPrerenderContents(prerender_manager_.get(), url);
85 prerender_manager_->SetNextPrerenderContents(pc); 93 prerender_manager_->SetNextPrerenderContents(pc);
86 prerender_manager_->AddPreload(url); 94 prerender_manager_->AddSimplePreload(url);
87 EXPECT_TRUE(pc->has_started()); 95 EXPECT_TRUE(pc->has_started());
88 EXPECT_EQ(pc, prerender_manager_->GetEntry(url)); 96 EXPECT_EQ(pc, prerender_manager_->GetEntry(url));
89 delete pc; 97 delete pc;
90 } 98 }
91 99
92 // Make sure that if queue a request, and a second prerender request for the 100 // Make sure that if queue a request, and a second prerender request for the
93 // same URL comes in, that we drop the second request and keep the first one. 101 // same URL comes in, that we drop the second request and keep the first one.
94 TEST_F(PrerenderManagerTest, DropSecondRequestTest) { 102 TEST_F(PrerenderManagerTest, DropSecondRequestTest) {
95 GURL url("http://www.google.com/"); 103 GURL url("http://www.google.com/");
96 DummyPrerenderContents* pc = 104 DummyPrerenderContents* pc =
97 new DummyPrerenderContents(prerender_manager_.get(), url); 105 new DummyPrerenderContents(prerender_manager_.get(), url);
98 DummyPrerenderContents* null = NULL; 106 DummyPrerenderContents* null = NULL;
99 prerender_manager_->SetNextPrerenderContents(pc); 107 prerender_manager_->SetNextPrerenderContents(pc);
100 prerender_manager_->AddPreload(url); 108 prerender_manager_->AddSimplePreload(url);
101 EXPECT_EQ(null, prerender_manager_->next_pc()); 109 EXPECT_EQ(null, prerender_manager_->next_pc());
102 EXPECT_TRUE(pc->has_started()); 110 EXPECT_TRUE(pc->has_started());
103 DummyPrerenderContents* pc1 = 111 DummyPrerenderContents* pc1 =
104 new DummyPrerenderContents(prerender_manager_.get(), url); 112 new DummyPrerenderContents(prerender_manager_.get(), url);
105 prerender_manager_->SetNextPrerenderContents(pc1); 113 prerender_manager_->SetNextPrerenderContents(pc1);
106 prerender_manager_->AddPreload(url); 114 prerender_manager_->AddSimplePreload(url);
107 EXPECT_EQ(pc1, prerender_manager_->next_pc()); 115 EXPECT_EQ(pc1, prerender_manager_->next_pc());
108 EXPECT_FALSE(pc1->has_started()); 116 EXPECT_FALSE(pc1->has_started());
109 EXPECT_EQ(pc, prerender_manager_->GetEntry(url)); 117 EXPECT_EQ(pc, prerender_manager_->GetEntry(url));
110 delete pc; 118 delete pc;
111 } 119 }
112 120
113 // Ensure that we expire a prerendered page after the max. permitted time. 121 // Ensure that we expire a prerendered page after the max. permitted time.
114 TEST_F(PrerenderManagerTest, ExpireTest) { 122 TEST_F(PrerenderManagerTest, ExpireTest) {
115 GURL url("http://www.google.com/"); 123 GURL url("http://www.google.com/");
116 DummyPrerenderContents* pc = 124 DummyPrerenderContents* pc =
117 new DummyPrerenderContents(prerender_manager_.get(), url); 125 new DummyPrerenderContents(prerender_manager_.get(), url);
118 DummyPrerenderContents* null = NULL; 126 DummyPrerenderContents* null = NULL;
119 prerender_manager_->SetNextPrerenderContents(pc); 127 prerender_manager_->SetNextPrerenderContents(pc);
120 prerender_manager_->AddPreload(url); 128 prerender_manager_->AddSimplePreload(url);
121 EXPECT_EQ(null, prerender_manager_->next_pc()); 129 EXPECT_EQ(null, prerender_manager_->next_pc());
122 EXPECT_TRUE(pc->has_started()); 130 EXPECT_TRUE(pc->has_started());
123 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age() 131 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age()
124 + base::TimeDelta::FromSeconds(1)); 132 + base::TimeDelta::FromSeconds(1));
125 EXPECT_EQ(null, prerender_manager_->GetEntry(url)); 133 EXPECT_EQ(null, prerender_manager_->GetEntry(url));
126 } 134 }
127 135
128 // LRU Test. Make sure that if we prerender more than one request, that 136 // LRU Test. Make sure that if we prerender more than one request, that
129 // the oldest one will be dropped. 137 // the oldest one will be dropped.
130 TEST_F(PrerenderManagerTest, DropOldestRequestTest) { 138 TEST_F(PrerenderManagerTest, DropOldestRequestTest) {
131 GURL url("http://www.google.com/"); 139 GURL url("http://www.google.com/");
132 DummyPrerenderContents* pc = 140 DummyPrerenderContents* pc =
133 new DummyPrerenderContents(prerender_manager_.get(), url); 141 new DummyPrerenderContents(prerender_manager_.get(), url);
134 DummyPrerenderContents* null = NULL; 142 DummyPrerenderContents* null = NULL;
135 prerender_manager_->SetNextPrerenderContents(pc); 143 prerender_manager_->SetNextPrerenderContents(pc);
136 prerender_manager_->AddPreload(url); 144 prerender_manager_->AddSimplePreload(url);
137 EXPECT_EQ(null, prerender_manager_->next_pc()); 145 EXPECT_EQ(null, prerender_manager_->next_pc());
138 EXPECT_TRUE(pc->has_started()); 146 EXPECT_TRUE(pc->has_started());
139 GURL url1("http://news.google.com/"); 147 GURL url1("http://news.google.com/");
140 DummyPrerenderContents* pc1 = 148 DummyPrerenderContents* pc1 =
141 new DummyPrerenderContents(prerender_manager_.get(), url1); 149 new DummyPrerenderContents(prerender_manager_.get(), url1);
142 prerender_manager_->SetNextPrerenderContents(pc1); 150 prerender_manager_->SetNextPrerenderContents(pc1);
143 prerender_manager_->AddPreload(url1); 151 prerender_manager_->AddSimplePreload(url1);
144 EXPECT_EQ(null, prerender_manager_->next_pc()); 152 EXPECT_EQ(null, prerender_manager_->next_pc());
145 EXPECT_TRUE(pc1->has_started()); 153 EXPECT_TRUE(pc1->has_started());
146 EXPECT_EQ(null, prerender_manager_->GetEntry(url)); 154 EXPECT_EQ(null, prerender_manager_->GetEntry(url));
147 EXPECT_EQ(pc1, prerender_manager_->GetEntry(url1)); 155 EXPECT_EQ(pc1, prerender_manager_->GetEntry(url1));
148 delete pc1; 156 delete pc1;
149 } 157 }
150 158
151 // Two element prerender test. Ensure that the LRU operates correctly if we 159 // Two element prerender test. Ensure that the LRU operates correctly if we
152 // permit 2 elements to be kept prerendered. 160 // permit 2 elements to be kept prerendered.
153 TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) { 161 TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) {
154 prerender_manager_->set_max_elements(2); 162 prerender_manager_->set_max_elements(2);
155 GURL url("http://www.google.com/"); 163 GURL url("http://www.google.com/");
156 DummyPrerenderContents* pc = 164 DummyPrerenderContents* pc =
157 new DummyPrerenderContents(prerender_manager_.get(), url); 165 new DummyPrerenderContents(prerender_manager_.get(), url);
158 DummyPrerenderContents* null = NULL; 166 DummyPrerenderContents* null = NULL;
159 prerender_manager_->SetNextPrerenderContents(pc); 167 prerender_manager_->SetNextPrerenderContents(pc);
160 prerender_manager_->AddPreload(url); 168 prerender_manager_->AddSimplePreload(url);
161 EXPECT_EQ(null, prerender_manager_->next_pc()); 169 EXPECT_EQ(null, prerender_manager_->next_pc());
162 EXPECT_TRUE(pc->has_started()); 170 EXPECT_TRUE(pc->has_started());
163 GURL url1("http://news.google.com/"); 171 GURL url1("http://news.google.com/");
164 DummyPrerenderContents* pc1 = 172 DummyPrerenderContents* pc1 =
165 new DummyPrerenderContents(prerender_manager_.get(), url1); 173 new DummyPrerenderContents(prerender_manager_.get(), url1);
166 prerender_manager_->SetNextPrerenderContents(pc1); 174 prerender_manager_->SetNextPrerenderContents(pc1);
167 prerender_manager_->AddPreload(url1); 175 prerender_manager_->AddSimplePreload(url1);
168 EXPECT_EQ(null, prerender_manager_->next_pc()); 176 EXPECT_EQ(null, prerender_manager_->next_pc());
169 EXPECT_TRUE(pc1->has_started()); 177 EXPECT_TRUE(pc1->has_started());
170 GURL url2("http://images.google.com/"); 178 GURL url2("http://images.google.com/");
171 DummyPrerenderContents* pc2 = 179 DummyPrerenderContents* pc2 =
172 new DummyPrerenderContents(prerender_manager_.get(), url2); 180 new DummyPrerenderContents(prerender_manager_.get(), url2);
173 prerender_manager_->SetNextPrerenderContents(pc2); 181 prerender_manager_->SetNextPrerenderContents(pc2);
174 prerender_manager_->AddPreload(url2); 182 prerender_manager_->AddSimplePreload(url2);
175 EXPECT_EQ(null, prerender_manager_->next_pc()); 183 EXPECT_EQ(null, prerender_manager_->next_pc());
176 EXPECT_TRUE(pc2->has_started()); 184 EXPECT_TRUE(pc2->has_started());
177 EXPECT_EQ(null, prerender_manager_->GetEntry(url)); 185 EXPECT_EQ(null, prerender_manager_->GetEntry(url));
178 EXPECT_EQ(pc1, prerender_manager_->GetEntry(url1)); 186 EXPECT_EQ(pc1, prerender_manager_->GetEntry(url1));
179 EXPECT_EQ(pc2, prerender_manager_->GetEntry(url2)); 187 EXPECT_EQ(pc2, prerender_manager_->GetEntry(url2));
180 delete pc1; 188 delete pc1;
181 delete pc2; 189 delete pc2;
182 } 190 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698