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

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

Issue 6685012: Give prerendering RVH's RenderWidgetHostViews. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Sync to trunk Created 9 years, 8 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/memory/scoped_vector.h"
5 #include "base/time.h" 6 #include "base/time.h"
6 #include "chrome/browser/prerender/prerender_contents.h" 7 #include "chrome/browser/prerender/prerender_contents.h"
7 #include "chrome/browser/prerender/prerender_manager.h" 8 #include "chrome/browser/prerender/prerender_manager.h"
8 #include "content/browser/browser_thread.h" 9 #include "content/browser/browser_thread.h"
9 #include "content/browser/renderer_host/render_view_host.h" 10 #include "content/browser/renderer_host/render_view_host.h"
10 #include "content/browser/renderer_host/render_process_host.h" 11 #include "content/browser/renderer_host/render_process_host.h"
11 #include "googleurl/src/gurl.h" 12 #include "googleurl/src/gurl.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 namespace prerender { 15 namespace prerender {
15 16
16 namespace { 17 namespace {
17 18
18 class DummyPrerenderContents : public PrerenderContents { 19 class DummyPrerenderContents : public PrerenderContents {
19 public: 20 public:
20 DummyPrerenderContents(PrerenderManager* prerender_manager, 21 DummyPrerenderContents(PrerenderManager* prerender_manager,
21 const GURL& url, 22 const GURL& url,
22 FinalStatus expected_final_status)
23 : PrerenderContents(prerender_manager, NULL, url,
24 std::vector<GURL>(), GURL()),
25 has_started_(false),
26 expected_final_status_(expected_final_status) {
27 }
28
29 DummyPrerenderContents(PrerenderManager* prerender_manager,
30 const GURL& url,
31 const std::vector<GURL> alias_urls, 23 const std::vector<GURL> alias_urls,
32 FinalStatus expected_final_status) 24 FinalStatus expected_final_status)
33 : PrerenderContents(prerender_manager, NULL, url, alias_urls, GURL()), 25 : PrerenderContents(prerender_manager, NULL, url, alias_urls, GURL()),
34 has_started_(false), 26 has_started_(false),
35 expected_final_status_(expected_final_status) { 27 expected_final_status_(expected_final_status) {
36 } 28 }
37 29
38 virtual ~DummyPrerenderContents() { 30 virtual ~DummyPrerenderContents() {
39 EXPECT_EQ(expected_final_status_, final_status()); 31 EXPECT_EQ(expected_final_status_, final_status());
40 } 32 }
41 33
42 virtual void StartPrerendering() OVERRIDE { 34 virtual void StartPrerendering(
35 const RenderViewHost* source_render_view_host) OVERRIDE {
43 has_started_ = true; 36 has_started_ = true;
44 } 37 }
45 38
46 virtual bool GetChildId(int* child_id) const OVERRIDE { 39 virtual bool GetChildId(int* child_id) const OVERRIDE {
47 *child_id = 0; 40 *child_id = 0;
48 return true; 41 return true;
49 } 42 }
50 43
51 virtual bool GetRouteId(int* route_id) const OVERRIDE { 44 virtual bool GetRouteId(int* route_id) const OVERRIDE {
52 *route_id = 0; 45 *route_id = 0;
53 return true; 46 return true;
54 } 47 }
55 48
56 bool has_started() const { return has_started_; } 49 bool has_started() const { return has_started_; }
57 50
51 FinalStatus expected_final_status() const { return expected_final_status_; }
52
58 private: 53 private:
59 bool has_started_; 54 bool has_started_;
60 FinalStatus expected_final_status_; 55 FinalStatus expected_final_status_;
61 }; 56 };
62 57
63 class TestPrerenderManager : public PrerenderManager { 58 class TestPrerenderManager : public PrerenderManager {
64 public: 59 public:
65 TestPrerenderManager() 60 TestPrerenderManager()
66 : PrerenderManager(NULL), 61 : PrerenderManager(NULL),
67 time_(base::Time::Now()), 62 time_(base::Time::Now()),
68 time_ticks_(base::TimeTicks::Now()), 63 time_ticks_(base::TimeTicks::Now()),
69 next_pc_(NULL) { 64 next_pc_(NULL) {
70 rate_limit_enabled_ = false; 65 rate_limit_enabled_ = false;
71 } 66 }
72 67
73 void AdvanceTime(base::TimeDelta delta) { 68 void AdvanceTime(base::TimeDelta delta) {
74 time_ += delta; 69 time_ += delta;
75 } 70 }
76 71
77 void AdvanceTimeTicks(base::TimeDelta delta) { 72 void AdvanceTimeTicks(base::TimeDelta delta) {
78 time_ticks_ += delta; 73 time_ticks_ += delta;
79 } 74 }
80 75
81 void SetNextPrerenderContents(PrerenderContents* pc) { 76 DummyPrerenderContents* CreateNextPrerenderContents(
82 next_pc_.reset(pc); 77 const GURL& url,
78 FinalStatus expected_final_status) {
79 DummyPrerenderContents* pc =
80 new DummyPrerenderContents(this, url, std::vector<GURL>(),
81 expected_final_status);
82 SetNextPrerenderContents(pc);
83 return pc;
84 }
85
86 DummyPrerenderContents* CreateNextPrerenderContents(
87 const GURL& url,
88 const std::vector<GURL> alias_urls,
89 FinalStatus expected_final_status) {
90 DummyPrerenderContents* pc =
91 new DummyPrerenderContents(this, url, alias_urls,
92 expected_final_status);
93 SetNextPrerenderContents(pc);
94 return pc;
83 } 95 }
84 96
85 // Shorthand to add a simple preload with no aliases. 97 // Shorthand to add a simple preload with no aliases.
86 bool AddSimplePreload(const GURL& url) { 98 bool AddSimplePreload(const GURL& url) {
87 return AddPreload(url, std::vector<GURL>(), GURL()); 99 return AddPreload(std::pair<int, int>(-1, -1), url, std::vector<GURL>(),
100 GURL());
88 } 101 }
89 102
90 bool IsPendingEntry(const GURL& url) { 103 bool IsPendingEntry(const GURL& url) {
91 return (PrerenderManager::FindPendingEntry(url) != NULL); 104 return (PrerenderManager::FindPendingEntry(url) != NULL);
92 } 105 }
93 106
94 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; } 107 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; }
95 108
109 // Shorthand to add a simple preload with aliases.
110 bool AddSimplePreloadWithAliases(const GURL& url,
111 const std::vector<GURL>& alias_urls) {
112 return AddPreload(std::pair<int, int>(-1, -1), url, alias_urls, GURL());
113 }
114
96 PrerenderContents* next_pc() { return next_pc_.get(); } 115 PrerenderContents* next_pc() { return next_pc_.get(); }
97 116
98 protected: 117 protected:
99 virtual ~TestPrerenderManager() { 118 virtual ~TestPrerenderManager() {
100 if (next_pc()) { 119 if (next_pc()) {
101 next_pc()->set_final_status( 120 next_pc()->set_final_status(
102 FINAL_STATUS_MANAGER_SHUTDOWN); 121 FINAL_STATUS_MANAGER_SHUTDOWN);
103 } 122 }
123 // Set the final status for all PrerenderContents with an expected final
124 // status of FINAL_STATUS_USED. These values are normally set when the
125 // prerendered RVH is swapped into a tab, which doesn't happen in these
126 // unit tests.
127 for (ScopedVector<PrerenderContents>::iterator it = used_pcs_.begin();
128 it != used_pcs_.end(); ++it) {
129 (*it)->set_final_status(FINAL_STATUS_USED);
130 }
104 } 131 }
105 132
106 private: 133 private:
134 void SetNextPrerenderContents(DummyPrerenderContents* pc) {
135 DCHECK(!next_pc_.get());
136 next_pc_.reset(pc);
137 if (pc->expected_final_status() == FINAL_STATUS_USED)
138 used_pcs_.push_back(pc);
139 }
140
107 virtual base::Time GetCurrentTime() const OVERRIDE { 141 virtual base::Time GetCurrentTime() const OVERRIDE {
108 return time_; 142 return time_;
109 } 143 }
110 144
111 virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE { 145 virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE {
112 return time_ticks_; 146 return time_ticks_;
113 } 147 }
114 148
115 virtual PrerenderContents* CreatePrerenderContents( 149 virtual PrerenderContents* CreatePrerenderContents(
116 const GURL& url, 150 const GURL& url,
117 const std::vector<GURL>& alias_urls, 151 const std::vector<GURL>& alias_urls,
118 const GURL& referrer) OVERRIDE { 152 const GURL& referrer) OVERRIDE {
119 DCHECK(next_pc_.get()); 153 DCHECK(next_pc_.get());
120 return next_pc_.release(); 154 return next_pc_.release();
121 } 155 }
122 156
123 base::Time time_; 157 base::Time time_;
124 base::TimeTicks time_ticks_; 158 base::TimeTicks time_ticks_;
125 scoped_ptr<PrerenderContents> next_pc_; 159 scoped_ptr<PrerenderContents> next_pc_;
160 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED,
161 // tracked so they will be automatically deleted.
162 ScopedVector<PrerenderContents> used_pcs_;
126 }; 163 };
127 164
128 class RestorePrerenderMode { 165 class RestorePrerenderMode {
129 public: 166 public:
130 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) { 167 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) {
131 } 168 }
132 169
133 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); } 170 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); }
134 private: 171 private:
135 PrerenderManager::PrerenderManagerMode prev_mode_; 172 PrerenderManager::PrerenderManagerMode prev_mode_;
(...skipping 17 matching lines...) Expand all
153 }; 190 };
154 191
155 TEST_F(PrerenderManagerTest, EmptyTest) { 192 TEST_F(PrerenderManagerTest, EmptyTest) {
156 GURL url("http://www.google.com/"); 193 GURL url("http://www.google.com/");
157 EXPECT_FALSE(prerender_manager_->MaybeUsePreloadedPage(NULL, url)); 194 EXPECT_FALSE(prerender_manager_->MaybeUsePreloadedPage(NULL, url));
158 } 195 }
159 196
160 TEST_F(PrerenderManagerTest, FoundTest) { 197 TEST_F(PrerenderManagerTest, FoundTest) {
161 GURL url("http://www.google.com/"); 198 GURL url("http://www.google.com/");
162 DummyPrerenderContents* pc = 199 DummyPrerenderContents* pc =
163 new DummyPrerenderContents(prerender_manager_.get(), 200 prerender_manager_->CreateNextPrerenderContents(
164 url, 201 url,
165 FINAL_STATUS_USED); 202 FINAL_STATUS_USED);
166 prerender_manager_->SetNextPrerenderContents(pc);
167 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 203 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
168 EXPECT_TRUE(pc->has_started()); 204 EXPECT_TRUE(pc->has_started());
169 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 205 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
170 pc->set_final_status(FINAL_STATUS_USED);
171 delete pc;
172 } 206 }
173 207
174 // Make sure that if queue a request, and a second prerender request for the 208 // Make sure that if queue a request, and a second prerender request for the
175 // same URL comes in, that we drop the second request and keep the first one. 209 // same URL comes in, that we drop the second request and keep the first one.
176 TEST_F(PrerenderManagerTest, DropSecondRequestTest) { 210 TEST_F(PrerenderManagerTest, DropSecondRequestTest) {
177 GURL url("http://www.google.com/"); 211 GURL url("http://www.google.com/");
178 DummyPrerenderContents* pc = 212 DummyPrerenderContents* pc =
179 new DummyPrerenderContents(prerender_manager_.get(), url, 213 prerender_manager_->CreateNextPrerenderContents(
180 FINAL_STATUS_USED); 214 url,
215 FINAL_STATUS_USED);
181 DummyPrerenderContents* null = NULL; 216 DummyPrerenderContents* null = NULL;
182 prerender_manager_->SetNextPrerenderContents(pc);
183 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 217 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
184 EXPECT_EQ(null, prerender_manager_->next_pc()); 218 EXPECT_EQ(null, prerender_manager_->next_pc());
185 EXPECT_TRUE(pc->has_started()); 219 EXPECT_TRUE(pc->has_started());
220
186 DummyPrerenderContents* pc1 = 221 DummyPrerenderContents* pc1 =
187 new DummyPrerenderContents( 222 prerender_manager_->CreateNextPrerenderContents(
188 prerender_manager_.get(), url, 223 url,
189 FINAL_STATUS_MANAGER_SHUTDOWN); 224 FINAL_STATUS_MANAGER_SHUTDOWN);
190 prerender_manager_->SetNextPrerenderContents(pc1);
191 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url)); 225 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url));
192 EXPECT_EQ(pc1, prerender_manager_->next_pc()); 226 EXPECT_EQ(pc1, prerender_manager_->next_pc());
193 EXPECT_FALSE(pc1->has_started()); 227 EXPECT_FALSE(pc1->has_started());
228
194 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 229 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
195 pc->set_final_status(FINAL_STATUS_USED);
196 delete pc;
197 } 230 }
198 231
199 // Ensure that we expire a prerendered page after the max. permitted time. 232 // Ensure that we expire a prerendered page after the max. permitted time.
200 TEST_F(PrerenderManagerTest, ExpireTest) { 233 TEST_F(PrerenderManagerTest, ExpireTest) {
201 GURL url("http://www.google.com/"); 234 GURL url("http://www.google.com/");
202 DummyPrerenderContents* pc = 235 DummyPrerenderContents* pc =
203 new DummyPrerenderContents(prerender_manager_.get(), url, 236 prerender_manager_->CreateNextPrerenderContents(
204 FINAL_STATUS_TIMED_OUT); 237 url,
238 FINAL_STATUS_TIMED_OUT);
205 DummyPrerenderContents* null = NULL; 239 DummyPrerenderContents* null = NULL;
206 prerender_manager_->SetNextPrerenderContents(pc);
207 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 240 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
208 EXPECT_EQ(null, prerender_manager_->next_pc()); 241 EXPECT_EQ(null, prerender_manager_->next_pc());
209 EXPECT_TRUE(pc->has_started()); 242 EXPECT_TRUE(pc->has_started());
210 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age() 243 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age()
211 + base::TimeDelta::FromSeconds(1)); 244 + base::TimeDelta::FromSeconds(1));
212 ASSERT_EQ(null, prerender_manager_->GetEntry(url)); 245 ASSERT_EQ(null, prerender_manager_->GetEntry(url));
213 } 246 }
214 247
215 // LRU Test. Make sure that if we prerender more than one request, that 248 // LRU Test. Make sure that if we prerender more than one request, that
216 // the oldest one will be dropped. 249 // the oldest one will be dropped.
217 TEST_F(PrerenderManagerTest, DropOldestRequestTest) { 250 TEST_F(PrerenderManagerTest, DropOldestRequestTest) {
218 GURL url("http://www.google.com/"); 251 GURL url("http://www.google.com/");
219 DummyPrerenderContents* pc = 252 DummyPrerenderContents* pc =
220 new DummyPrerenderContents(prerender_manager_.get(), url, 253 prerender_manager_->CreateNextPrerenderContents(
221 FINAL_STATUS_EVICTED); 254 url,
255 FINAL_STATUS_EVICTED);
222 DummyPrerenderContents* null = NULL; 256 DummyPrerenderContents* null = NULL;
223 prerender_manager_->SetNextPrerenderContents(pc);
224 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 257 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
225 EXPECT_EQ(null, prerender_manager_->next_pc()); 258 EXPECT_EQ(null, prerender_manager_->next_pc());
226 EXPECT_TRUE(pc->has_started()); 259 EXPECT_TRUE(pc->has_started());
260
227 GURL url1("http://news.google.com/"); 261 GURL url1("http://news.google.com/");
228 DummyPrerenderContents* pc1 = 262 DummyPrerenderContents* pc1 =
229 new DummyPrerenderContents(prerender_manager_.get(), url1, 263 prerender_manager_->CreateNextPrerenderContents(
230 FINAL_STATUS_USED); 264 url1,
231 prerender_manager_->SetNextPrerenderContents(pc1); 265 FINAL_STATUS_USED);
232 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1)); 266 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1));
233 EXPECT_EQ(null, prerender_manager_->next_pc()); 267 EXPECT_EQ(null, prerender_manager_->next_pc());
234 EXPECT_TRUE(pc1->has_started()); 268 EXPECT_TRUE(pc1->has_started());
269
235 ASSERT_EQ(null, prerender_manager_->GetEntry(url)); 270 ASSERT_EQ(null, prerender_manager_->GetEntry(url));
236 ASSERT_EQ(pc1, prerender_manager_->GetEntry(url1)); 271 ASSERT_EQ(pc1, prerender_manager_->GetEntry(url1));
237 pc1->set_final_status(FINAL_STATUS_USED);
238 delete pc1;
239 } 272 }
240 273
241 // Two element prerender test. Ensure that the LRU operates correctly if we 274 // Two element prerender test. Ensure that the LRU operates correctly if we
242 // permit 2 elements to be kept prerendered. 275 // permit 2 elements to be kept prerendered.
243 TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) { 276 TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) {
244 prerender_manager_->set_max_elements(2); 277 prerender_manager_->set_max_elements(2);
245 GURL url("http://www.google.com/"); 278 GURL url("http://www.google.com/");
246 DummyPrerenderContents* pc = 279 DummyPrerenderContents* pc =
247 new DummyPrerenderContents(prerender_manager_.get(), url, 280 prerender_manager_->CreateNextPrerenderContents(
248 FINAL_STATUS_EVICTED); 281 url,
282 FINAL_STATUS_EVICTED);
249 DummyPrerenderContents* null = NULL; 283 DummyPrerenderContents* null = NULL;
250 prerender_manager_->SetNextPrerenderContents(pc);
251 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 284 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
252 EXPECT_EQ(null, prerender_manager_->next_pc()); 285 EXPECT_EQ(null, prerender_manager_->next_pc());
253 EXPECT_TRUE(pc->has_started()); 286 EXPECT_TRUE(pc->has_started());
287
254 GURL url1("http://news.google.com/"); 288 GURL url1("http://news.google.com/");
255 DummyPrerenderContents* pc1 = 289 DummyPrerenderContents* pc1 =
256 new DummyPrerenderContents(prerender_manager_.get(), url1, 290 prerender_manager_->CreateNextPrerenderContents(
257 FINAL_STATUS_USED); 291 url1,
258 prerender_manager_->SetNextPrerenderContents(pc1); 292 FINAL_STATUS_USED);
259 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1)); 293 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1));
260 EXPECT_EQ(null, prerender_manager_->next_pc()); 294 EXPECT_EQ(null, prerender_manager_->next_pc());
261 EXPECT_TRUE(pc1->has_started()); 295 EXPECT_TRUE(pc1->has_started());
296
262 GURL url2("http://images.google.com/"); 297 GURL url2("http://images.google.com/");
263 DummyPrerenderContents* pc2 = 298 DummyPrerenderContents* pc2 =
264 new DummyPrerenderContents(prerender_manager_.get(), url2, 299 prerender_manager_->CreateNextPrerenderContents(
265 FINAL_STATUS_USED); 300 url2,
266 prerender_manager_->SetNextPrerenderContents(pc2); 301 FINAL_STATUS_USED);
267 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url2)); 302 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url2));
268 EXPECT_EQ(null, prerender_manager_->next_pc()); 303 EXPECT_EQ(null, prerender_manager_->next_pc());
269 EXPECT_TRUE(pc2->has_started()); 304 EXPECT_TRUE(pc2->has_started());
305
270 ASSERT_EQ(null, prerender_manager_->GetEntry(url)); 306 ASSERT_EQ(null, prerender_manager_->GetEntry(url));
271 ASSERT_EQ(pc1, prerender_manager_->GetEntry(url1)); 307 ASSERT_EQ(pc1, prerender_manager_->GetEntry(url1));
272 ASSERT_EQ(pc2, prerender_manager_->GetEntry(url2)); 308 ASSERT_EQ(pc2, prerender_manager_->GetEntry(url2));
273 pc1->set_final_status(FINAL_STATUS_USED);
274 delete pc1;
275 pc2->set_final_status(FINAL_STATUS_USED);
276 delete pc2;
277 } 309 }
278 310
279 TEST_F(PrerenderManagerTest, AliasURLTest) { 311 TEST_F(PrerenderManagerTest, AliasURLTest) {
280 GURL url("http://www.google.com/"); 312 GURL url("http://www.google.com/");
281 GURL alias_url1("http://www.google.com/index.html"); 313 GURL alias_url1("http://www.google.com/index.html");
282 GURL alias_url2("http://google.com/"); 314 GURL alias_url2("http://google.com/");
283 GURL not_an_alias_url("http://google.com/index.html"); 315 GURL not_an_alias_url("http://google.com/index.html");
284 std::vector<GURL> alias_urls; 316 std::vector<GURL> alias_urls;
285 alias_urls.push_back(alias_url1); 317 alias_urls.push_back(alias_url1);
286 alias_urls.push_back(alias_url2); 318 alias_urls.push_back(alias_url2);
319
320 // Test that all of the aliases work, but nont_an_alias_url does not.
287 DummyPrerenderContents* pc = 321 DummyPrerenderContents* pc =
288 new DummyPrerenderContents(prerender_manager_.get(), url, alias_urls, 322 prerender_manager_->CreateNextPrerenderContents(
289 FINAL_STATUS_USED); 323 url, alias_urls, FINAL_STATUS_USED);
290 // Test that all of the aliases work, but nont_an_alias_url does not. 324 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls));
291 prerender_manager_->SetNextPrerenderContents(pc);
292 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL()));
293 ASSERT_EQ(NULL, prerender_manager_->GetEntry(not_an_alias_url)); 325 ASSERT_EQ(NULL, prerender_manager_->GetEntry(not_an_alias_url));
294 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url1)); 326 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url1));
295 prerender_manager_->SetNextPrerenderContents(pc); 327 pc = prerender_manager_->CreateNextPrerenderContents(
296 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); 328 url, alias_urls, FINAL_STATUS_USED);
329 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls));
297 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url2)); 330 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url2));
298 prerender_manager_->SetNextPrerenderContents(pc); 331 pc = prerender_manager_->CreateNextPrerenderContents(
299 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); 332 url, alias_urls, FINAL_STATUS_USED);
333 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls));
300 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 334 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
301 335
302 // Test that alias URLs can not be added. 336 // Test that alias URLs can not be added.
303 prerender_manager_->SetNextPrerenderContents(pc); 337 pc = prerender_manager_->CreateNextPrerenderContents(
304 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); 338 url, alias_urls, FINAL_STATUS_USED);
339 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls));
305 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url)); 340 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url));
306 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url1)); 341 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url1));
307 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url2)); 342 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url2));
308 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 343 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
309
310 pc->set_final_status(FINAL_STATUS_USED);
311 delete pc;
312 } 344 }
313 345
314 // Ensure that we ignore prerender requests within the rate limit. 346 // Ensure that we ignore prerender requests within the rate limit.
315 TEST_F(PrerenderManagerTest, RateLimitInWindowTest) { 347 TEST_F(PrerenderManagerTest, RateLimitInWindowTest) {
316 GURL url("http://www.google.com/"); 348 GURL url("http://www.google.com/");
317 DummyPrerenderContents* pc = 349 DummyPrerenderContents* pc =
318 new DummyPrerenderContents(prerender_manager_.get(), url, 350 prerender_manager_->CreateNextPrerenderContents(
319 FINAL_STATUS_MANAGER_SHUTDOWN); 351 url,
352 FINAL_STATUS_MANAGER_SHUTDOWN);
320 DummyPrerenderContents* null = NULL; 353 DummyPrerenderContents* null = NULL;
321 prerender_manager_->SetNextPrerenderContents(pc);
322 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 354 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
323 EXPECT_EQ(null, prerender_manager_->next_pc()); 355 EXPECT_EQ(null, prerender_manager_->next_pc());
324 EXPECT_TRUE(pc->has_started()); 356 EXPECT_TRUE(pc->has_started());
325 357
326 prerender_manager_->set_rate_limit_enabled(true); 358 prerender_manager_->set_rate_limit_enabled(true);
327 prerender_manager_->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(1)); 359 prerender_manager_->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(1));
328 360
329 GURL url1("http://news.google.com/"); 361 GURL url1("http://news.google.com/");
330 DummyPrerenderContents* rate_limit_pc = 362 prerender_manager_->CreateNextPrerenderContents(
331 new DummyPrerenderContents(prerender_manager_.get(), url1, 363 url,
332 FINAL_STATUS_MANAGER_SHUTDOWN); 364 FINAL_STATUS_MANAGER_SHUTDOWN);
333 prerender_manager_->SetNextPrerenderContents(rate_limit_pc);
334 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url1)); 365 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url1));
335 prerender_manager_->set_rate_limit_enabled(false); 366 prerender_manager_->set_rate_limit_enabled(false);
336 } 367 }
337 368
338 // Ensure that we don't ignore prerender requests outside the rate limit. 369 // Ensure that we don't ignore prerender requests outside the rate limit.
339 TEST_F(PrerenderManagerTest, RateLimitOutsideWindowTest) { 370 TEST_F(PrerenderManagerTest, RateLimitOutsideWindowTest) {
340 GURL url("http://www.google.com/"); 371 GURL url("http://www.google.com/");
341 DummyPrerenderContents* pc = 372 DummyPrerenderContents* pc =
342 new DummyPrerenderContents(prerender_manager_.get(), url, 373 prerender_manager_->CreateNextPrerenderContents(
343 FINAL_STATUS_EVICTED); 374 url,
375 FINAL_STATUS_EVICTED);
344 DummyPrerenderContents* null = NULL; 376 DummyPrerenderContents* null = NULL;
345 prerender_manager_->SetNextPrerenderContents(pc);
346 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 377 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
347 EXPECT_EQ(null, prerender_manager_->next_pc()); 378 EXPECT_EQ(null, prerender_manager_->next_pc());
348 EXPECT_TRUE(pc->has_started()); 379 EXPECT_TRUE(pc->has_started());
349 380
350 prerender_manager_->set_rate_limit_enabled(true); 381 prerender_manager_->set_rate_limit_enabled(true);
351 prerender_manager_->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(2000)); 382 prerender_manager_->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(2000));
352 383
353 GURL url1("http://news.google.com/"); 384 GURL url1("http://news.google.com/");
354 DummyPrerenderContents* rate_limit_pc = 385 DummyPrerenderContents* rate_limit_pc =
355 new DummyPrerenderContents(prerender_manager_.get(), url1, 386 prerender_manager_->CreateNextPrerenderContents(
356 FINAL_STATUS_MANAGER_SHUTDOWN); 387 url1,
357 prerender_manager_->SetNextPrerenderContents(rate_limit_pc); 388 FINAL_STATUS_MANAGER_SHUTDOWN);
358 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1)); 389 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1));
359 EXPECT_EQ(null, prerender_manager_->next_pc()); 390 EXPECT_EQ(null, prerender_manager_->next_pc());
360 EXPECT_TRUE(rate_limit_pc->has_started()); 391 EXPECT_TRUE(rate_limit_pc->has_started());
361 prerender_manager_->set_rate_limit_enabled(false); 392 prerender_manager_->set_rate_limit_enabled(false);
362 } 393 }
363 394
364 TEST_F(PrerenderManagerTest, PendingPreloadTest) { 395 TEST_F(PrerenderManagerTest, PendingPreloadTest) {
365 GURL url("http://www.google.com/"); 396 GURL url("http://www.google.com/");
366 DummyPrerenderContents* pc = 397 DummyPrerenderContents* pc =
367 new DummyPrerenderContents(prerender_manager_.get(), 398 prerender_manager_->CreateNextPrerenderContents(
368 url, 399 url,
369 FINAL_STATUS_USED); 400 FINAL_STATUS_USED);
370 prerender_manager_->SetNextPrerenderContents(pc);
371 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 401 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
372 402
373 int child_id; 403 int child_id;
374 int route_id; 404 int route_id;
375 ASSERT_TRUE(pc->GetChildId(&child_id)); 405 ASSERT_TRUE(pc->GetChildId(&child_id));
376 ASSERT_TRUE(pc->GetRouteId(&route_id)); 406 ASSERT_TRUE(pc->GetRouteId(&route_id));
377 407
378 GURL pending_url("http://news.google.com/"); 408 GURL pending_url("http://news.google.com/");
379 409
380 prerender_manager_->AddPendingPreload(std::make_pair(child_id, route_id), 410 prerender_manager_->AddPendingPreload(std::make_pair(child_id, route_id),
381 pending_url, 411 pending_url,
382 std::vector<GURL>(), 412 std::vector<GURL>(),
383 url); 413 url);
384 414
385 EXPECT_TRUE(prerender_manager_->IsPendingEntry(pending_url)); 415 EXPECT_TRUE(prerender_manager_->IsPendingEntry(pending_url));
386 EXPECT_TRUE(pc->has_started()); 416 EXPECT_TRUE(pc->has_started());
387 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 417 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
388 pc->set_final_status(FINAL_STATUS_USED);
389
390 delete pc;
391 } 418 }
392 419
393 TEST_F(PrerenderManagerTest, PendingPreloadSkippedTest) { 420 TEST_F(PrerenderManagerTest, PendingPreloadSkippedTest) {
394 GURL url("http://www.google.com/"); 421 GURL url("http://www.google.com/");
395 DummyPrerenderContents* pc = 422 DummyPrerenderContents* pc =
396 new DummyPrerenderContents(prerender_manager_.get(), 423 prerender_manager_->CreateNextPrerenderContents(
397 url, 424 url,
398 FINAL_STATUS_TIMED_OUT); 425 FINAL_STATUS_TIMED_OUT);
399 prerender_manager_->SetNextPrerenderContents(pc);
400 426
401 int child_id; 427 int child_id;
402 int route_id; 428 int route_id;
403 ASSERT_TRUE(pc->GetChildId(&child_id)); 429 ASSERT_TRUE(pc->GetChildId(&child_id));
404 ASSERT_TRUE(pc->GetRouteId(&route_id)); 430 ASSERT_TRUE(pc->GetRouteId(&route_id));
405 431
406 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 432 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
407 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age() 433 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age()
408 + base::TimeDelta::FromSeconds(1)); 434 + base::TimeDelta::FromSeconds(1));
409 // GetEntry will cull old entries which should now include pc. 435 // GetEntry will cull old entries which should now include pc.
(...skipping 27 matching lines...) Expand all
437 } 463 }
438 464
439 // Tests that a PrerenderManager created for a browser session in the control 465 // Tests that a PrerenderManager created for a browser session in the control
440 // group will not be able to override FINAL_STATUS_CONTROL_GROUP. 466 // group will not be able to override FINAL_STATUS_CONTROL_GROUP.
441 TEST_F(PrerenderManagerTest, ControlGroup) { 467 TEST_F(PrerenderManagerTest, ControlGroup) {
442 RestorePrerenderMode restore_prerender_mode; 468 RestorePrerenderMode restore_prerender_mode;
443 PrerenderManager::SetMode( 469 PrerenderManager::SetMode(
444 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); 470 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP);
445 GURL url("http://www.google.com/"); 471 GURL url("http://www.google.com/");
446 DummyPrerenderContents* pc = 472 DummyPrerenderContents* pc =
447 new DummyPrerenderContents(prerender_manager_.get(), 473 prerender_manager_->CreateNextPrerenderContents(
448 url, 474 url,
449 FINAL_STATUS_CONTROL_GROUP); 475 FINAL_STATUS_CONTROL_GROUP);
450 prerender_manager_->SetNextPrerenderContents(pc);
451 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 476 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
452 EXPECT_FALSE(pc->has_started()); 477 EXPECT_FALSE(pc->has_started());
453 } 478 }
454 479
480 // Tests that prerendering is cancelled when the source render view does not
481 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be
482 // triggered.
483 TEST_F(PrerenderManagerTest, SourceRenderViewClosed) {
484 GURL url("http://www.google.com/");
485 prerender_manager_->CreateNextPrerenderContents(
486 url,
487 FINAL_STATUS_MANAGER_SHUTDOWN);
488 EXPECT_FALSE(prerender_manager_->AddPreload(
489 std::pair<int, int>(100, 100), url, std::vector<GURL>(), GURL()));
490 }
491
455 } // namespace prerender 492 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_manager.cc ('k') | chrome/browser/prerender/prerender_render_widget_host_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698