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

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

Issue 10553029: Handle interface to prerenders. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remediation to reviews, and unit test improvements. Created 8 years, 5 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) 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/time.h" 8 #include "base/time.h"
9 #include "chrome/browser/prerender/prerender_contents.h" 9 #include "chrome/browser/prerender/prerender_contents.h"
10 #include "chrome/browser/prerender/prerender_handle.h"
10 #include "chrome/browser/prerender/prerender_link_manager.h" 11 #include "chrome/browser/prerender/prerender_link_manager.h"
11 #include "chrome/browser/prerender/prerender_manager.h" 12 #include "chrome/browser/prerender/prerender_manager.h"
12 #include "chrome/browser/prerender/prerender_origin.h" 13 #include "chrome/browser/prerender/prerender_origin.h"
13 #include "chrome/common/chrome_switches.h" 14 #include "chrome/common/chrome_switches.h"
14 #include "chrome/test/base/testing_browser_process.h" 15 #include "chrome/test/base/testing_browser_process.h"
15 #include "chrome/test/base/testing_profile.h" 16 #include "chrome/test/base/testing_profile.h"
16 #include "content/public/browser/render_view_host.h" 17 #include "content/public/browser/render_view_host.h"
17 #include "content/public/test/test_browser_thread.h" 18 #include "content/public/test/test_browser_thread.h"
18 #include "googleurl/src/gurl.h" 19 #include "googleurl/src/gurl.h"
19 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
20 #include "ui/gfx/size.h" 21 #include "ui/gfx/size.h"
21 22
22 using content::BrowserThread; 23 using content::BrowserThread;
23 using content::Referrer; 24 using content::Referrer;
24 25
25 namespace prerender { 26 namespace prerender {
26 27
27 namespace { 28 class TestPrerenderManager;
dominich 2012/07/02 20:43:03 please keep this.
gavinp 2012/07/03 16:41:02 Done.
28 29
29 class DummyPrerenderContents : public PrerenderContents { 30 class DummyPrerenderContents : public PrerenderContents {
30 public: 31 public:
31 DummyPrerenderContents(PrerenderManager* prerender_manager, 32 DummyPrerenderContents(TestPrerenderManager* test_prerender_manager,
32 PrerenderTracker* prerender_tracker, 33 PrerenderTracker* prerender_tracker,
33 const GURL& url, 34 const GURL& url,
34 Origin origin, 35 Origin origin,
35 FinalStatus expected_final_status) 36 FinalStatus expected_final_status);
36 : PrerenderContents(prerender_manager, prerender_tracker,
37 NULL, url, Referrer(), origin,
38 PrerenderManager::kNoExperiment),
39 expected_final_status_(expected_final_status) {
40 }
41 37
42 virtual ~DummyPrerenderContents() { 38 virtual ~DummyPrerenderContents() {
43 EXPECT_EQ(expected_final_status_, final_status()); 39 EXPECT_EQ(expected_final_status_, final_status());
44 } 40 }
45 41
46 virtual void StartPrerendering( 42 virtual void StartPrerendering(
47 int ALLOW_UNUSED creator_child_id, 43 int ALLOW_UNUSED creator_child_id,
48 const gfx::Size& ALLOW_UNUSED size, 44 const gfx::Size& ALLOW_UNUSED size,
49 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace, 45 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace,
50 bool is_control_group) OVERRIDE { 46 bool is_control_group) OVERRIDE;
51 // In the base PrerenderContents implementation, StartPrerendering will
52 // be called even when the PrerenderManager is part of the control group,
53 // but it will early exit before actually creating a new RenderView if
54 // |is_control_group| is true;
55 if (!is_control_group)
56 prerendering_has_started_ = true;
57 }
58 47
59 virtual bool GetChildId(int* child_id) const OVERRIDE { 48 virtual bool GetChildId(int* child_id) const OVERRIDE {
60 *child_id = 0; 49 *child_id = 0;
61 return true; 50 return true;
62 } 51 }
63 52
64 virtual bool GetRouteId(int* route_id) const OVERRIDE { 53 virtual bool GetRouteId(int* route_id) const OVERRIDE {
65 *route_id = 0; 54 *route_id = 0;
66 return true; 55 return true;
67 } 56 }
68 57
69 FinalStatus expected_final_status() const { return expected_final_status_; } 58 FinalStatus expected_final_status() const { return expected_final_status_; }
70 59
71 bool prerendering_has_been_cancelled() const { 60 bool prerendering_has_been_cancelled() const {
72 return PrerenderContents::prerendering_has_been_cancelled(); 61 return PrerenderContents::prerendering_has_been_cancelled();
73 } 62 }
74 63
75 private: 64 private:
65 TestPrerenderManager* test_prerender_manager_;
76 FinalStatus expected_final_status_; 66 FinalStatus expected_final_status_;
77 }; 67 };
78 68
79 class TestPrerenderManager : public PrerenderManager { 69 class TestPrerenderManager : public PrerenderManager {
80 public: 70 public:
71 using PrerenderManager::kNavigationRecordWindowMs;
dominich 2012/07/02 20:43:03 if this is a friend of PrerenderManager you should
gavinp 2012/07/03 16:41:02 Without them, NotSoRecentlyVisited will not compil
dominich 2012/07/03 17:08:39 My gut prefers accessors to usings, but this is pr
72 using PrerenderManager::GetMaxAge;
73
81 explicit TestPrerenderManager(PrerenderTracker* prerender_tracker) 74 explicit TestPrerenderManager(PrerenderTracker* prerender_tracker)
82 : PrerenderManager(&profile_, prerender_tracker), 75 : PrerenderManager(&profile_, prerender_tracker),
83 time_(base::Time::Now()), 76 time_(base::Time::Now()),
84 time_ticks_(base::TimeTicks::Now()), 77 time_ticks_(base::TimeTicks::Now()),
85 next_prerender_contents_(NULL), 78 next_prerender_contents_(NULL),
86 prerender_tracker_(prerender_tracker) { 79 prerender_tracker_(prerender_tracker) {
87 set_rate_limit_enabled(false); 80 set_rate_limit_enabled(false);
88 } 81 }
89 82
90 virtual ~TestPrerenderManager() { 83 virtual ~TestPrerenderManager() {
91 if (next_prerender_contents()) { 84 if (next_prerender_contents()) {
92 next_prerender_contents_.release()->Destroy( 85 next_prerender_contents_.release()->Destroy(
93 FINAL_STATUS_MANAGER_SHUTDOWN); 86 FINAL_STATUS_MANAGER_SHUTDOWN);
94 } 87 }
95 // Set the final status for all PrerenderContents with an expected final 88 DoShutdown();
96 // status of FINAL_STATUS_USED. These values are normally set when the 89 }
97 // prerendered RVH is swapped into a tab, which doesn't happen in these 90
98 // unit tests. 91 PrerenderContents* FindEntry(const GURL& url) {
99 for (ScopedVector<PrerenderContents>::iterator it = 92 DeleteOldEntries();
100 used_prerender_contents_.begin(); 93 DeletePendingDeleteEntries();
101 it != used_prerender_contents_.end(); ++it) { 94 if (PrerenderData* data = FindPrerenderData(url, NULL))
102 (*it)->set_final_status(FINAL_STATUS_USED); 95 return data->contents;
96 return NULL;
97 }
98
99 PrerenderContents* FindAndUseEntry(const GURL& url) {
100 PrerenderData* prerender_data = FindPrerenderData(url, NULL);
101 if (!prerender_data) {
dominich 2012/07/02 20:43:03 nit: braces not required.
gavinp 2012/07/03 16:41:02 Done.
102 return NULL;
103 } 103 }
104 DoShutdown(); 104 PrerenderContents* prerender_contents = prerender_data->contents;
105 prerender_contents->set_final_status(FINAL_STATUS_USED);
106 std::list<PrerenderData>::iterator to_erase =
107 FindIteratorForPrerenderContents(prerender_contents);
108 DCHECK(to_erase != active_prerender_list_.end());
109 InvalidatePrerenderHandlesForPrerenderData(*to_erase);
110 active_prerender_list_.erase(to_erase);
111 prerender_contents->StartPendingPrerenders();
112 return prerender_contents;
105 } 113 }
106 114
107 void AdvanceTime(base::TimeDelta delta) { 115 void AdvanceTime(base::TimeDelta delta) {
108 time_ += delta; 116 time_ += delta;
109 } 117 }
110 118
111 void AdvanceTimeTicks(base::TimeDelta delta) { 119 void AdvanceTimeTicks(base::TimeDelta delta) {
112 time_ticks_ += delta; 120 time_ticks_ += delta;
113 } 121 }
114 122
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 } 160 }
153 161
154 void set_rate_limit_enabled(bool enabled) { 162 void set_rate_limit_enabled(bool enabled) {
155 mutable_config().rate_limit_enabled = enabled; 163 mutable_config().rate_limit_enabled = enabled;
156 } 164 }
157 165
158 PrerenderContents* next_prerender_contents() { 166 PrerenderContents* next_prerender_contents() {
159 return next_prerender_contents_.get(); 167 return next_prerender_contents_.get();
160 } 168 }
161 169
170 // from PrerenderManager
171 virtual base::Time GetCurrentTime() const OVERRIDE {
172 return time_;
173 }
174
175 virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE {
176 return time_ticks_;
177 }
178
162 private: 179 private:
163 void SetNextPrerenderContents(DummyPrerenderContents* prerender_contents) { 180 void SetNextPrerenderContents(DummyPrerenderContents* prerender_contents) {
164 DCHECK(!next_prerender_contents_.get()); 181 DCHECK(!next_prerender_contents_.get());
165 next_prerender_contents_.reset(prerender_contents); 182 next_prerender_contents_.reset(prerender_contents);
166 if (prerender_contents->expected_final_status() == FINAL_STATUS_USED) 183 if (prerender_contents->expected_final_status() == FINAL_STATUS_USED)
167 used_prerender_contents_.push_back(prerender_contents); 184 used_prerender_contents_.push_back(prerender_contents);
168 } 185 }
169 186
170 virtual base::Time GetCurrentTime() const OVERRIDE {
171 return time_;
172 }
173
174 virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE {
175 return time_ticks_;
176 }
177 187
178 virtual PrerenderContents* CreatePrerenderContents( 188 virtual PrerenderContents* CreatePrerenderContents(
179 const GURL& url, 189 const GURL& url,
180 const Referrer& referrer, 190 const Referrer& referrer,
181 Origin origin, 191 Origin origin,
182 uint8 experiment_id) OVERRIDE { 192 uint8 experiment_id) OVERRIDE {
183 DCHECK(next_prerender_contents_.get()); 193 DCHECK(next_prerender_contents_.get());
184 DCHECK_EQ(next_prerender_contents_->prerender_url(), url); 194 EXPECT_TRUE(next_prerender_contents_->prerender_url() == url);
185 DCHECK_EQ(next_prerender_contents_->origin(), origin); 195 EXPECT_TRUE(next_prerender_contents_->origin() == origin);
186 return next_prerender_contents_.release(); 196 return next_prerender_contents_.release();
187 } 197 }
188 198
189 base::Time time_; 199 base::Time time_;
190 base::TimeTicks time_ticks_; 200 base::TimeTicks time_ticks_;
191 scoped_ptr<PrerenderContents> next_prerender_contents_; 201 scoped_ptr<PrerenderContents> next_prerender_contents_;
192 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED, 202 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED,
193 // tracked so they will be automatically deleted. 203 // tracked so they will be automatically deleted.
194 ScopedVector<PrerenderContents> used_prerender_contents_; 204 ScopedVector<PrerenderContents> used_prerender_contents_;
195 205
196 PrerenderTracker* prerender_tracker_; 206 PrerenderTracker* prerender_tracker_;
197 207
198 TestingProfile profile_; 208 TestingProfile profile_;
199 }; 209 };
200 210
201 class RestorePrerenderMode { 211 class RestorePrerenderMode {
202 public: 212 public:
203 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) { 213 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) {
204 } 214 }
205 215
206 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); } 216 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); }
207 private: 217 private:
208 PrerenderManager::PrerenderManagerMode prev_mode_; 218 PrerenderManager::PrerenderManagerMode prev_mode_;
209 }; 219 };
210 220
211 } // namespace 221 DummyPrerenderContents::DummyPrerenderContents(
222 TestPrerenderManager* test_prerender_manager,
223 PrerenderTracker* prerender_tracker,
224 const GURL& url,
225 Origin origin,
226 FinalStatus expected_final_status)
227 : PrerenderContents(test_prerender_manager, prerender_tracker,
228 NULL, url, Referrer(), origin,
229 PrerenderManager::kNoExperiment),
230 test_prerender_manager_(test_prerender_manager),
231 expected_final_status_(expected_final_status) {
232 }
233
234 void DummyPrerenderContents::StartPrerendering(
235 int ALLOW_UNUSED creator_child_id,
236 const gfx::Size& ALLOW_UNUSED size,
237 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace,
238 bool is_control_group) {
239 // In the base PrerenderContents implementation, StartPrerendering will
240 // be called even when the PrerenderManager is part of the control group,
241 // but it will early exit before actually creating a new RenderView if
242 // |is_control_group| is true;
243 if (!is_control_group) {
dominich 2012/07/02 20:43:03 nit: braces not required.
gavinp 2012/07/03 16:41:02 Done.
244 prerendering_has_started_ = true;
245 }
246 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks();
247 }
212 248
213 class PrerenderTest : public testing::Test { 249 class PrerenderTest : public testing::Test {
214 public: 250 public:
215 static const int kDefaultChildId = -1; 251 static const int kDefaultChildId = -1;
216 static const int kDefaultRenderViewRouteId = -1; 252 static const int kDefaultRenderViewRouteId = -1;
217 253
218 PrerenderTest() : ui_thread_(BrowserThread::UI, &message_loop_), 254 PrerenderTest() : ui_thread_(BrowserThread::UI, &message_loop_),
219 prerender_manager_( 255 prerender_manager_(
220 new TestPrerenderManager(prerender_tracker())), 256 new TestPrerenderManager(prerender_tracker())),
221 prerender_link_manager_( 257 prerender_link_manager_(
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 } 297 }
262 298
263 // Needed to pass PrerenderManager's DCHECKs. 299 // Needed to pass PrerenderManager's DCHECKs.
264 MessageLoop message_loop_; 300 MessageLoop message_loop_;
265 content::TestBrowserThread ui_thread_; 301 content::TestBrowserThread ui_thread_;
266 scoped_ptr<TestPrerenderManager> prerender_manager_; 302 scoped_ptr<TestPrerenderManager> prerender_manager_;
267 scoped_ptr<PrerenderLinkManager> prerender_link_manager_; 303 scoped_ptr<PrerenderLinkManager> prerender_link_manager_;
268 int last_prerender_id_; 304 int last_prerender_id_;
269 }; 305 };
270 306
271 TEST_F(PrerenderTest, EmptyTest) {
272 EXPECT_FALSE(prerender_manager()->MaybeUsePrerenderedPage(
273 NULL,
274 GURL("http://www.google.com/")));
275 }
276
277 TEST_F(PrerenderTest, FoundTest) { 307 TEST_F(PrerenderTest, FoundTest) {
278 GURL url("http://www.google.com/"); 308 GURL url("http://www.google.com/");
279 DummyPrerenderContents* prerender_contents = 309 DummyPrerenderContents* prerender_contents =
280 prerender_manager()->CreateNextPrerenderContents( 310 prerender_manager()->CreateNextPrerenderContents(
281 url, 311 url,
282 FINAL_STATUS_USED); 312 FINAL_STATUS_USED);
283 EXPECT_TRUE(AddSimplePrerender(url)); 313 EXPECT_TRUE(AddSimplePrerender(url));
284 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 314 EXPECT_TRUE(prerender_contents->prerendering_has_started());
285 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 315 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
286 } 316 }
287 317
288 // Make sure that if queue a request, and a second prerender request for the 318 // Make sure that if queue a request, and a second prerender request for the
289 // same URL comes in, that we drop the second request and keep the first one. 319 // same URL comes in, that we drop the second request and keep the first one.
290 TEST_F(PrerenderTest, DropSecondRequestTest) { 320 TEST_F(PrerenderTest, DropSecondRequestTest) {
291 GURL url("http://www.google.com/"); 321 GURL url("http://www.google.com/");
292 DummyPrerenderContents* prerender_contents = 322 DummyPrerenderContents* prerender_contents =
293 prerender_manager()->CreateNextPrerenderContents( 323 prerender_manager()->CreateNextPrerenderContents(
294 url, 324 url,
295 FINAL_STATUS_USED); 325 FINAL_STATUS_USED);
296 DummyPrerenderContents* null = NULL; 326 DummyPrerenderContents* null = NULL;
297 EXPECT_TRUE(AddSimplePrerender(url)); 327 EXPECT_TRUE(AddSimplePrerender(url));
298 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 328 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
299 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 329 EXPECT_TRUE(prerender_contents->prerendering_has_started());
300 330
301 DummyPrerenderContents* prerender_contents1 = 331 DummyPrerenderContents* prerender_contents1 =
302 prerender_manager()->CreateNextPrerenderContents( 332 prerender_manager()->CreateNextPrerenderContents(
303 url, 333 url,
304 FINAL_STATUS_MANAGER_SHUTDOWN); 334 FINAL_STATUS_MANAGER_SHUTDOWN);
305 EXPECT_TRUE(AddSimplePrerender(url)); 335 EXPECT_TRUE(AddSimplePrerender(url));
306 EXPECT_EQ(prerender_contents1, 336 EXPECT_EQ(prerender_contents1,
307 prerender_manager()->next_prerender_contents()); 337 prerender_manager()->next_prerender_contents());
308 EXPECT_FALSE(prerender_contents1->prerendering_has_started()); 338 EXPECT_FALSE(prerender_contents1->prerendering_has_started());
309 339
310 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 340 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
311 } 341 }
312 342
313 // Ensure that we expire a prerendered page after the max. permitted time. 343 // Ensure that we expire a prerendered page after the max. permitted time.
314 TEST_F(PrerenderTest, ExpireTest) { 344 TEST_F(PrerenderTest, ExpireTest) {
315 GURL url("http://www.google.com/"); 345 GURL url("http://www.google.com/");
316 DummyPrerenderContents* prerender_contents = 346 DummyPrerenderContents* prerender_contents =
317 prerender_manager()->CreateNextPrerenderContents( 347 prerender_manager()->CreateNextPrerenderContents(
318 url, 348 url,
319 FINAL_STATUS_TIMED_OUT); 349 FINAL_STATUS_TIMED_OUT);
320 DummyPrerenderContents* null = NULL; 350 DummyPrerenderContents* null = NULL;
321 EXPECT_TRUE(AddSimplePrerender(url)); 351 EXPECT_TRUE(AddSimplePrerender(url));
322 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 352 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
323 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 353 EXPECT_TRUE(prerender_contents->prerendering_has_started());
324 prerender_manager()->AdvanceTime(prerender_manager()->GetMaxAge() + 354 prerender_manager()->AdvanceTimeTicks(prerender_manager()->GetMaxAge() +
325 base::TimeDelta::FromSeconds(1)); 355 base::TimeDelta::FromSeconds(1));
326 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 356 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
327 } 357 }
328 358
329 // LRU Test. Make sure that if we prerender more than one request, that 359 // LRU Test. Make sure that if we prerender more than one request, that
330 // the oldest one will be dropped. 360 // the oldest one will be dropped.
331 TEST_F(PrerenderTest, DropOldestRequestTest) { 361 TEST_F(PrerenderTest, DropOldestRequestTest) {
332 GURL url("http://www.google.com/"); 362 GURL url("http://www.google.com/");
333 DummyPrerenderContents* prerender_contents = 363 DummyPrerenderContents* prerender_contents =
334 prerender_manager()->CreateNextPrerenderContents( 364 prerender_manager()->CreateNextPrerenderContents(
335 url, 365 url,
336 FINAL_STATUS_EVICTED); 366 FINAL_STATUS_EVICTED);
337 DummyPrerenderContents* null = NULL; 367 DummyPrerenderContents* null = NULL;
338 EXPECT_TRUE(AddSimplePrerender(url)); 368 EXPECT_TRUE(AddSimplePrerender(url));
339 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 369 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
340 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 370 EXPECT_TRUE(prerender_contents->prerendering_has_started());
341 371
342 GURL url1("http://news.google.com/"); 372 GURL url1("http://news.google.com/");
343 DummyPrerenderContents* prerender_contents1 = 373 DummyPrerenderContents* prerender_contents1 =
344 prerender_manager()->CreateNextPrerenderContents( 374 prerender_manager()->CreateNextPrerenderContents(
345 url1, 375 url1,
346 FINAL_STATUS_USED); 376 FINAL_STATUS_USED);
347 EXPECT_TRUE(AddSimplePrerender(url1)); 377 EXPECT_TRUE(AddSimplePrerender(url1));
348 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 378 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
349 EXPECT_TRUE(prerender_contents1->prerendering_has_started()); 379 EXPECT_TRUE(prerender_contents1->prerendering_has_started());
350 380
351 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 381 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
352 ASSERT_EQ(prerender_contents1, prerender_manager()->GetEntry(url1)); 382 ASSERT_EQ(prerender_contents1, prerender_manager()->FindAndUseEntry(url1));
353 } 383 }
354 384
355 // Two element prerender test. Ensure that the LRU operates correctly if we 385 // Two element prerender test. Ensure that the LRU operates correctly if we
356 // permit 2 elements to be kept prerendered. 386 // permit 2 elements to be kept prerendered.
357 TEST_F(PrerenderTest, TwoElementPrerenderTest) { 387 TEST_F(PrerenderTest, TwoElementPrerenderTest) {
358 prerender_manager()->mutable_config().max_elements = 2; 388 prerender_manager()->mutable_config().max_elements = 2;
359 GURL url("http://www.google.com/"); 389 GURL url("http://www.google.com/");
360 DummyPrerenderContents* prerender_contents = 390 DummyPrerenderContents* prerender_contents =
361 prerender_manager()->CreateNextPrerenderContents( 391 prerender_manager()->CreateNextPrerenderContents(
362 url, 392 url,
(...skipping 14 matching lines...) Expand all
377 407
378 GURL url2("http://images.google.com/"); 408 GURL url2("http://images.google.com/");
379 DummyPrerenderContents* prerender_contents2 = 409 DummyPrerenderContents* prerender_contents2 =
380 prerender_manager()->CreateNextPrerenderContents( 410 prerender_manager()->CreateNextPrerenderContents(
381 url2, 411 url2,
382 FINAL_STATUS_USED); 412 FINAL_STATUS_USED);
383 EXPECT_TRUE(AddSimplePrerender(url2)); 413 EXPECT_TRUE(AddSimplePrerender(url2));
384 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 414 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
385 EXPECT_TRUE(prerender_contents2->prerendering_has_started()); 415 EXPECT_TRUE(prerender_contents2->prerendering_has_started());
386 416
387 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 417 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
388 ASSERT_EQ(prerender_contents1, prerender_manager()->GetEntry(url1)); 418 ASSERT_EQ(prerender_contents1, prerender_manager()->FindAndUseEntry(url1));
389 ASSERT_EQ(prerender_contents2, prerender_manager()->GetEntry(url2)); 419 ASSERT_EQ(prerender_contents2, prerender_manager()->FindAndUseEntry(url2));
390 } 420 }
391 421
392 TEST_F(PrerenderTest, AliasURLTest) { 422 TEST_F(PrerenderTest, AliasURLTest) {
393 GURL url("http://www.google.com/"); 423 GURL url("http://www.google.com/");
394 GURL alias_url1("http://www.google.com/index.html"); 424 GURL alias_url1("http://www.google.com/index.html");
395 GURL alias_url2("http://google.com/"); 425 GURL alias_url2("http://google.com/");
396 GURL not_an_alias_url("http://google.com/index.html"); 426 GURL not_an_alias_url("http://google.com/index.html");
397 std::vector<GURL> alias_urls; 427 std::vector<GURL> alias_urls;
398 alias_urls.push_back(alias_url1); 428 alias_urls.push_back(alias_url1);
399 alias_urls.push_back(alias_url2); 429 alias_urls.push_back(alias_url2);
400 430
401 // Test that all of the aliases work, but not_an_alias_url does not. 431 // Test that all of the aliases work, but not_an_alias_url does not.
402 DummyPrerenderContents* prerender_contents = 432 DummyPrerenderContents* prerender_contents =
403 prerender_manager()->CreateNextPrerenderContents( 433 prerender_manager()->CreateNextPrerenderContents(
404 url, alias_urls, FINAL_STATUS_USED); 434 url, alias_urls, FINAL_STATUS_USED);
405 EXPECT_TRUE(AddSimplePrerender(url)); 435 EXPECT_TRUE(AddSimplePrerender(url));
406 ASSERT_EQ(NULL, prerender_manager()->GetEntry(not_an_alias_url)); 436 ASSERT_EQ(NULL, prerender_manager()->FindEntry(not_an_alias_url));
407 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url1)); 437 ASSERT_EQ(prerender_contents,
438 prerender_manager()->FindAndUseEntry(alias_url1));
408 prerender_contents = prerender_manager()->CreateNextPrerenderContents( 439 prerender_contents = prerender_manager()->CreateNextPrerenderContents(
409 url, alias_urls, FINAL_STATUS_USED); 440 url, alias_urls, FINAL_STATUS_USED);
410 EXPECT_TRUE(AddSimplePrerender(url)); 441 EXPECT_TRUE(AddSimplePrerender(url));
411 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url2)); 442 ASSERT_EQ(prerender_contents,
443 prerender_manager()->FindAndUseEntry(alias_url2));
412 prerender_contents = prerender_manager()->CreateNextPrerenderContents( 444 prerender_contents = prerender_manager()->CreateNextPrerenderContents(
413 url, alias_urls, FINAL_STATUS_USED); 445 url, alias_urls, FINAL_STATUS_USED);
414 EXPECT_TRUE(AddSimplePrerender(url)); 446 EXPECT_TRUE(AddSimplePrerender(url));
415 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 447 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
416 448
417 // Test that alias URLs can not be added. 449 // Test that alias URLs can not be added.
418 prerender_contents = prerender_manager()->CreateNextPrerenderContents( 450 prerender_contents = prerender_manager()->CreateNextPrerenderContents(
419 url, alias_urls, FINAL_STATUS_USED); 451 url, alias_urls, FINAL_STATUS_USED);
420 EXPECT_TRUE(AddSimplePrerender(url)); 452 EXPECT_TRUE(AddSimplePrerender(url));
421 EXPECT_TRUE(AddSimplePrerender(url)); 453 EXPECT_TRUE(AddSimplePrerender(url));
422 EXPECT_TRUE(AddSimplePrerender(alias_url1)); 454 EXPECT_TRUE(AddSimplePrerender(alias_url1));
423 EXPECT_TRUE(AddSimplePrerender(alias_url2)); 455 EXPECT_TRUE(AddSimplePrerender(alias_url2));
424 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 456 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
425 } 457 }
426 458
427 // Ensure that we ignore prerender requests within the rate limit. 459 // Ensure that we ignore prerender requests within the rate limit.
428 TEST_F(PrerenderTest, RateLimitInWindowTest) { 460 TEST_F(PrerenderTest, RateLimitInWindowTest) {
429 GURL url("http://www.google.com/"); 461 GURL url("http://www.google.com/");
430 DummyPrerenderContents* prerender_contents = 462 DummyPrerenderContents* prerender_contents =
431 prerender_manager()->CreateNextPrerenderContents( 463 prerender_manager()->CreateNextPrerenderContents(
432 url, 464 url,
433 FINAL_STATUS_MANAGER_SHUTDOWN); 465 FINAL_STATUS_MANAGER_SHUTDOWN);
434 DummyPrerenderContents* null = NULL; 466 DummyPrerenderContents* null = NULL;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 FINAL_STATUS_USED); 514 FINAL_STATUS_USED);
483 EXPECT_TRUE(AddSimplePrerender(url)); 515 EXPECT_TRUE(AddSimplePrerender(url));
484 516
485 int child_id; 517 int child_id;
486 int route_id; 518 int route_id;
487 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); 519 ASSERT_TRUE(prerender_contents->GetChildId(&child_id));
488 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); 520 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id));
489 521
490 GURL pending_url("http://news.google.com/"); 522 GURL pending_url("http://news.google.com/");
491 523
492 EXPECT_TRUE(prerender_manager()->AddPrerenderFromLinkRelPrerender( 524 DummyPrerenderContents* pending_prerender_contents =
493 child_id, route_id, 525 prerender_manager()->CreateNextPrerenderContents(
494 pending_url, Referrer(url, WebKit::WebReferrerPolicyDefault), 526 pending_url,
495 gfx::Size())); 527 ORIGIN_GWS_PRERENDER,
528 FINAL_STATUS_USED);
529 scoped_ptr<PrerenderHandle> pending_prerender_handle(
530 prerender_manager()->AddPrerenderFromLinkRelPrerender(
531 child_id, route_id, pending_url,
532 Referrer(url, WebKit::WebReferrerPolicyDefault), gfx::Size()));
533 DCHECK(pending_prerender_handle.get());
534 EXPECT_TRUE(pending_prerender_handle->IsValid());
535 EXPECT_TRUE(pending_prerender_handle->IsPending());
496 536
497 EXPECT_TRUE(prerender_manager()->IsPendingEntry(pending_url));
498 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 537 EXPECT_TRUE(prerender_contents->prerendering_has_started());
499 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 538 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
539
540 EXPECT_FALSE(pending_prerender_handle->IsPending());
541 ASSERT_EQ(pending_prerender_contents,
542 prerender_manager()->FindAndUseEntry(pending_url));
543 }
544
545 TEST_F(PrerenderTest, CancelPendingPrerenderTest) {
546 GURL url("http://www.google.com/");
547 DummyPrerenderContents* prerender_contents =
548 prerender_manager()->CreateNextPrerenderContents(
549 url,
550 FINAL_STATUS_USED);
551 EXPECT_TRUE(AddSimplePrerender(url));
552
553 int child_id;
554 int route_id;
555 ASSERT_TRUE(prerender_contents->GetChildId(&child_id));
556 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id));
557
558 GURL pending_url("http://news.google.com/");
559
560 scoped_ptr<PrerenderHandle> pending_prerender_handle(
561 prerender_manager()->AddPrerenderFromLinkRelPrerender(
562 child_id, route_id, pending_url,
563 Referrer(url, WebKit::WebReferrerPolicyDefault), gfx::Size()));
564 DCHECK(pending_prerender_handle.get());
565 EXPECT_TRUE(pending_prerender_handle->IsValid());
566 EXPECT_TRUE(pending_prerender_handle->IsPending());
567
568 EXPECT_TRUE(prerender_contents->prerendering_has_started());
569
570 pending_prerender_handle->OnCancel();
571 EXPECT_FALSE(pending_prerender_handle->IsValid());
572
573 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
500 } 574 }
501 575
502 // Tests that a PrerenderManager created for a browser session in the control 576 // Tests that a PrerenderManager created for a browser session in the control
503 // group works as expected. 577 // group works as expected.
504 TEST_F(PrerenderTest, ControlGroup) { 578 TEST_F(PrerenderTest, ControlGroup) {
505 RestorePrerenderMode restore_prerender_mode; 579 RestorePrerenderMode restore_prerender_mode;
506 PrerenderManager::SetMode( 580 PrerenderManager::SetMode(
507 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); 581 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP);
508 GURL url("http://www.google.com/"); 582 GURL url("http://www.google.com/");
509 DummyPrerenderContents* prerender_contents = 583 DummyPrerenderContents* prerender_contents =
(...skipping 30 matching lines...) Expand all
540 EXPECT_FALSE(AddSimplePrerender(url)); 614 EXPECT_FALSE(AddSimplePrerender(url));
541 EXPECT_FALSE(prerender_contents->prerendering_has_started()); 615 EXPECT_FALSE(prerender_contents->prerendering_has_started());
542 } 616 }
543 617
544 TEST_F(PrerenderTest, NotSoRecentlyVisited) { 618 TEST_F(PrerenderTest, NotSoRecentlyVisited) {
545 GURL url("http://www.google.com/"); 619 GURL url("http://www.google.com/");
546 620
547 prerender_manager()->RecordNavigation(url); 621 prerender_manager()->RecordNavigation(url);
548 prerender_manager()->AdvanceTimeTicks( 622 prerender_manager()->AdvanceTimeTicks(
549 base::TimeDelta::FromMilliseconds( 623 base::TimeDelta::FromMilliseconds(
550 PrerenderManager::kNavigationRecordWindowMs + 500)); 624 TestPrerenderManager::kNavigationRecordWindowMs + 500));
551 625
552 DummyPrerenderContents* prerender_contents = 626 DummyPrerenderContents* prerender_contents =
553 prerender_manager()->CreateNextPrerenderContents( 627 prerender_manager()->CreateNextPrerenderContents(
554 url, FINAL_STATUS_USED); 628 url, FINAL_STATUS_USED);
555 EXPECT_TRUE(AddSimplePrerender(url)); 629 EXPECT_TRUE(AddSimplePrerender(url));
556 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 630 EXPECT_TRUE(prerender_contents->prerendering_has_started());
557 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 631 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
558 } 632 }
559 633
560 // Tests that our PPLT dummy prerender gets created properly. 634 // Tests that our PPLT dummy prerender gets created properly.
561 TEST_F(PrerenderTest, PPLTDummy) { 635 TEST_F(PrerenderTest, PPLTDummy) {
562 GURL url("http://www.google.com/"); 636 GURL url("http://www.google.com/");
563 DummyPrerenderContents* prerender_contents = 637 DummyPrerenderContents* prerender_contents =
564 prerender_manager()->CreateNextPrerenderContents( 638 prerender_manager()->CreateNextPrerenderContents(
565 url, FINAL_STATUS_UNSUPPORTED_SCHEME); 639 url, FINAL_STATUS_UNSUPPORTED_SCHEME);
566 EXPECT_TRUE(AddSimplePrerender(url)); 640 EXPECT_TRUE(AddSimplePrerender(url));
567 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 641 EXPECT_TRUE(prerender_contents->prerendering_has_started());
568 642
569 DummyPrerenderContents* pplt_dummy_contents = 643 DummyPrerenderContents* pplt_dummy_contents =
570 prerender_manager()->CreateNextPrerenderContents(url, 644 prerender_manager()->CreateNextPrerenderContents(url,
571 FINAL_STATUS_USED); 645 FINAL_STATUS_USED);
572 GURL ftp_url("ftp://ftp.google.com/"); 646 GURL ftp_url("ftp://ftp.google.com/");
573 // Adding this ftp URL will force the expected unsupported scheme error. 647 // Adding this ftp URL will force the expected unsupported scheme error.
574 prerender_contents->AddAliasURL(ftp_url); 648 prerender_contents->AddAliasURL(ftp_url);
575 649
576 ASSERT_EQ(pplt_dummy_contents, prerender_manager()->GetEntry(url)); 650 ASSERT_EQ(pplt_dummy_contents, prerender_manager()->FindAndUseEntry(url));
577 } 651 }
578 652
579 // Tests that our PPLT dummy prerender gets created properly, even 653 // Tests that our PPLT dummy prerender gets created properly, even
580 // when navigating to a page that has been recently navigated to. 654 // when navigating to a page that has been recently navigated to.
581 TEST_F(PrerenderTest, RecentlyVisitedPPLTDummy) { 655 TEST_F(PrerenderTest, RecentlyVisitedPPLTDummy) {
582 GURL url("http://www.google.com/"); 656 GURL url("http://www.google.com/");
583 DummyPrerenderContents* prerender_contents = 657 DummyPrerenderContents* prerender_contents =
584 prerender_manager()->CreateNextPrerenderContents( 658 prerender_manager()->CreateNextPrerenderContents(
585 url, FINAL_STATUS_UNSUPPORTED_SCHEME); 659 url, FINAL_STATUS_UNSUPPORTED_SCHEME);
586 EXPECT_TRUE(AddSimplePrerender(url)); 660 EXPECT_TRUE(AddSimplePrerender(url));
587 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 661 EXPECT_TRUE(prerender_contents->prerendering_has_started());
588 662
589 DummyPrerenderContents* pplt_dummy_contents = 663 DummyPrerenderContents* pplt_dummy_contents =
590 prerender_manager()->CreateNextPrerenderContents(url, 664 prerender_manager()->CreateNextPrerenderContents(url,
591 FINAL_STATUS_USED); 665 FINAL_STATUS_USED);
592 prerender_manager()->RecordNavigation(url); 666 prerender_manager()->RecordNavigation(url);
593 GURL ftp_url("ftp://ftp.google.com/"); 667 GURL ftp_url("ftp://ftp.google.com/");
594 prerender_contents->AddAliasURL(ftp_url); 668 prerender_contents->AddAliasURL(ftp_url);
595 669
596 ASSERT_EQ(pplt_dummy_contents, prerender_manager()->GetEntry(url)); 670 ASSERT_EQ(pplt_dummy_contents, prerender_manager()->FindAndUseEntry(url));
597 } 671 }
598 672
599 // Tests that the prerender manager ignores fragment references when matching 673 // Tests that the prerender link manager discards fragments when launching,
600 // prerender URLs in the case the fragment is not in the prerender URL. 674 // and matches only occur on URLs without fragments.
601 TEST_F(PrerenderTest, PageMatchesFragmentTest) { 675 // TODO(gavinp): Drop this test once we are fragment clean.
dominich 2012/07/02 20:43:03 we are fragment clean now, no?
gavinp 2012/07/03 16:41:02 See http://code.google.com/searchframe#OAMlx_jo-ck
676 TEST_F(PrerenderTest, FragmentDropedOnLaunchTest) {
dominich 2012/07/02 20:43:03 typo: Dropped
gavinp 2012/07/03 16:41:02 Done.
677 GURL fragment_url("http://www.google.com/#test");
602 GURL url("http://www.google.com/"); 678 GURL url("http://www.google.com/");
603 GURL fragment_url("http://www.google.com/#test");
604 679
605 DummyPrerenderContents* prerender_contents = 680 DummyPrerenderContents* prerender_contents =
606 prerender_manager()->CreateNextPrerenderContents(url, 681 prerender_manager()->CreateNextPrerenderContents(url,
607 FINAL_STATUS_USED); 682 FINAL_STATUS_USED);
608 EXPECT_TRUE(AddSimplePrerender(url)); 683 EXPECT_TRUE(AddSimplePrerender(fragment_url));
609 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 684 EXPECT_TRUE(prerender_contents->prerendering_has_started());
610 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(fragment_url)); 685 EXPECT_FALSE(prerender_manager()->FindEntry(fragment_url));
686 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
611 } 687 }
612 688
613 // Tests that the prerender manager ignores fragment references when matching 689 // Tests that the prerender manager matches include the fragment.
614 // prerender URLs in the case the fragment is in the prerender URL. 690 // TODO(gavinp): Re-enable this once we are fragment clean.
615 // TODO(gavinp): Re-enable this in the Prerender API once we're officially
616 // fragment clean. 691 // fragment clean.
617 TEST_F(PrerenderTest, DISABLED_FragmentMatchesPageTest) { 692 TEST_F(PrerenderTest, DISABLED_FragmentMatchesTest) {
618 GURL url("http://www.google.com/");
619 GURL fragment_url("http://www.google.com/#test"); 693 GURL fragment_url("http://www.google.com/#test");
620 694
621 DummyPrerenderContents* prerender_contents = 695 DummyPrerenderContents* prerender_contents =
622 prerender_manager()->CreateNextPrerenderContents(fragment_url, 696 prerender_manager()->CreateNextPrerenderContents(fragment_url,
623 FINAL_STATUS_USED); 697 FINAL_STATUS_USED);
624 EXPECT_TRUE(AddSimplePrerender(fragment_url)); 698 EXPECT_TRUE(AddSimplePrerender(fragment_url));
625 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 699 EXPECT_TRUE(prerender_contents->prerendering_has_started());
626 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 700 ASSERT_EQ(prerender_contents,
701 prerender_manager()->FindAndUseEntry(fragment_url));
627 } 702 }
628 703
629 // Tests that the prerender manager ignores fragment references when matching 704 // Tests that the prerender manager uses fragment references when matching
630 // prerender URLs in the case the fragment is in both URLs. 705 // prerender URLs in the case a different fragment is in both URLs.
631 // TODO(gavinp): Re-enable this in the Prerender API once we're officially 706 // TODO(gavinp): Re-enable this once we are fragment clean.
632 // fragment clean. 707 TEST_F(PrerenderTest, DISABLED_FragmentsDifferTest) {
633 TEST_F(PrerenderTest, DISABLED_FragmentMatchesFragmentTest) {
634 GURL fragment_url("http://www.google.com/#test"); 708 GURL fragment_url("http://www.google.com/#test");
635 GURL other_fragment_url("http://www.google.com/#other_test"); 709 GURL other_fragment_url("http://www.google.com/#other_test");
636 710
637 DummyPrerenderContents* prerender_contents = 711 DummyPrerenderContents* prerender_contents =
638 prerender_manager()->CreateNextPrerenderContents(fragment_url, 712 prerender_manager()->CreateNextPrerenderContents(fragment_url,
639 FINAL_STATUS_USED); 713 FINAL_STATUS_USED);
640 EXPECT_TRUE(AddSimplePrerender(fragment_url)); 714 EXPECT_TRUE(AddSimplePrerender(fragment_url));
641 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 715 EXPECT_TRUE(prerender_contents->prerendering_has_started());
716
717 DummyPrerenderContents* null = NULL;
718 ASSERT_EQ(null, prerender_manager()->FindEntry(other_fragment_url));
719
642 ASSERT_EQ(prerender_contents, 720 ASSERT_EQ(prerender_contents,
643 prerender_manager()->GetEntry(other_fragment_url)); 721 prerender_manager()->FindAndUseEntry(fragment_url));
644 } 722 }
645 723
646 // Make sure that clearing works as expected. 724 // Make sure that clearing works as expected.
647 TEST_F(PrerenderTest, ClearTest) { 725 TEST_F(PrerenderTest, ClearTest) {
648 GURL url("http://www.google.com/"); 726 GURL url("http://www.google.com/");
649 DummyPrerenderContents* prerender_contents = 727 DummyPrerenderContents* prerender_contents =
650 prerender_manager()->CreateNextPrerenderContents( 728 prerender_manager()->CreateNextPrerenderContents(
651 url, 729 url,
652 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED); 730 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED);
653 EXPECT_TRUE(AddSimplePrerender(url)); 731 EXPECT_TRUE(AddSimplePrerender(url));
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 771
694 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 772 EXPECT_TRUE(prerender_contents->prerendering_has_started());
695 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); 773 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
696 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); 774 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url));
697 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 775 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
698 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, 776 prerender_link_manager()->OnCancelPrerender(kDefaultChildId,
699 last_prerender_id()); 777 last_prerender_id());
700 778
701 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled()); 779 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
702 DummyPrerenderContents* null = NULL; 780 DummyPrerenderContents* null = NULL;
703 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 781 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
704 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 782 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
705 } 783 }
706 784
707 TEST_F(PrerenderTest, LinkManagerCancelThenAbandon) { 785 TEST_F(PrerenderTest, LinkManagerCancelThenAbandon) {
708 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 786 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
709 GURL url("http://www.myexample.com"); 787 GURL url("http://www.myexample.com");
710 DummyPrerenderContents* prerender_contents = 788 DummyPrerenderContents* prerender_contents =
711 prerender_manager()->CreateNextPrerenderContents( 789 prerender_manager()->CreateNextPrerenderContents(
712 url, FINAL_STATUS_CANCELLED); 790 url, FINAL_STATUS_CANCELLED);
713 791
714 EXPECT_TRUE(AddSimplePrerender(url)); 792 EXPECT_TRUE(AddSimplePrerender(url));
715 793
716 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 794 EXPECT_TRUE(prerender_contents->prerendering_has_started());
717 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); 795 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
718 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); 796 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url));
719 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 797 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
720 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, 798 prerender_link_manager()->OnCancelPrerender(kDefaultChildId,
721 last_prerender_id()); 799 last_prerender_id());
722 800
723 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 801 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
724 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled()); 802 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
725 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, 803 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId,
726 last_prerender_id()); 804 last_prerender_id());
727 805
728 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 806 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
729 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled()); 807 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
730 DummyPrerenderContents* null = NULL; 808 DummyPrerenderContents* null = NULL;
731 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 809 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
732 } 810 }
733 811
734 // TODO(gavinp): Update this test after abandon has an effect on Prerenders, 812 // TODO(gavinp): Re-enabmed this test after abandon has an effect on Prerenders,
735 // like shortening the timeouts. 813 // like shortening the timeouts.
736 TEST_F(PrerenderTest, LinkManagerAbandon) { 814 TEST_F(PrerenderTest, LinkManagerAbandon) {
737 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 815 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
738 GURL url("http://www.myexample.com"); 816 GURL url("http://www.myexample.com");
739 DummyPrerenderContents* prerender_contents = 817 DummyPrerenderContents* prerender_contents =
740 prerender_manager()->CreateNextPrerenderContents( 818 prerender_manager()->CreateNextPrerenderContents(
741 url, FINAL_STATUS_USED); 819 url, FINAL_STATUS_USED);
742 820
743 EXPECT_TRUE(AddSimplePrerender(url)); 821 EXPECT_TRUE(AddSimplePrerender(url));
744 822
745 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 823 EXPECT_TRUE(prerender_contents->prerendering_has_started());
746 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); 824 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
747 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); 825 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url));
748 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 826 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
749 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, 827 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId,
750 last_prerender_id()); 828 last_prerender_id());
751 829
752 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); 830 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
753 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 831 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
754 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 832 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
755 } 833 }
756 834
757 TEST_F(PrerenderTest, LinkManagerCancelTwice) { 835 TEST_F(PrerenderTest, LinkManagerCancelTwice) {
758 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 836 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
759 GURL url("http://www.myexample.com"); 837 GURL url("http://www.myexample.com");
760 DummyPrerenderContents* prerender_contents = 838 DummyPrerenderContents* prerender_contents =
761 prerender_manager()->CreateNextPrerenderContents( 839 prerender_manager()->CreateNextPrerenderContents(
762 url, FINAL_STATUS_CANCELLED); 840 url, FINAL_STATUS_CANCELLED);
763 841
764 EXPECT_TRUE(AddSimplePrerender(url)); 842 EXPECT_TRUE(AddSimplePrerender(url));
765 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 843 EXPECT_TRUE(prerender_contents->prerendering_has_started());
766 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); 844 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
767 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); 845 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url));
768 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, 846 prerender_link_manager()->OnCancelPrerender(kDefaultChildId,
769 last_prerender_id()); 847 last_prerender_id());
770 848
771 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 849 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
772 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled()); 850 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
773 DummyPrerenderContents* null = NULL; 851 DummyPrerenderContents* null = NULL;
774 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 852 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
775 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, 853 prerender_link_manager()->OnCancelPrerender(kDefaultChildId,
776 last_prerender_id()); 854 last_prerender_id());
777 } 855 }
778 856
779 TEST_F(PrerenderTest, LinkManagerAddTwiceCancelTwice) { 857 TEST_F(PrerenderTest, LinkManagerAddTwiceCancelTwice) {
780 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 858 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
781 GURL url("http://www.myexample.com"); 859 GURL url("http://www.myexample.com");
782 DummyPrerenderContents* prerender_contents = 860 DummyPrerenderContents* prerender_contents =
783 prerender_manager()->CreateNextPrerenderContents( 861 prerender_manager()->CreateNextPrerenderContents(
784 url, FINAL_STATUS_CANCELLED); 862 url, FINAL_STATUS_CANCELLED);
(...skipping 14 matching lines...) Expand all
799 first_prerender_id); 877 first_prerender_id);
800 878
801 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); 879 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
802 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); 880 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url));
803 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, 881 prerender_link_manager()->OnCancelPrerender(kDefaultChildId,
804 second_prerender_id); 882 second_prerender_id);
805 883
806 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 884 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
807 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled()); 885 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
808 DummyPrerenderContents* null = NULL; 886 DummyPrerenderContents* null = NULL;
809 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 887 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
810 } 888 }
811 889
812 TEST_F(PrerenderTest, LinkManagerAddTwiceCancelTwiceThenAbandonTwice) { 890 TEST_F(PrerenderTest, LinkManagerAddTwiceCancelTwiceThenAbandonTwice) {
813 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 891 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
814 GURL url("http://www.myexample.com"); 892 GURL url("http://www.myexample.com");
815 DummyPrerenderContents* prerender_contents = 893 DummyPrerenderContents* prerender_contents =
816 prerender_manager()->CreateNextPrerenderContents( 894 prerender_manager()->CreateNextPrerenderContents(
817 url, FINAL_STATUS_CANCELLED); 895 url, FINAL_STATUS_CANCELLED);
818 896
819 EXPECT_TRUE(AddSimplePrerender(url)); 897 EXPECT_TRUE(AddSimplePrerender(url));
(...skipping 22 matching lines...) Expand all
842 first_prerender_id); 920 first_prerender_id);
843 921
844 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 922 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
845 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled()); 923 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
846 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, 924 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId,
847 second_prerender_id); 925 second_prerender_id);
848 926
849 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 927 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
850 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled()); 928 EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
851 DummyPrerenderContents* null = NULL; 929 DummyPrerenderContents* null = NULL;
852 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 930 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
853 } 931 }
854 932
855 // TODO(gavinp): Update this test after abandon has an effect on Prerenders, 933 // TODO(gavinp): Update this test after abandon has an effect on Prerenders,
856 // like shortening the timeouts. 934 // like shortening the timeouts.
857 TEST_F(PrerenderTest, LinkManagerAddTwiceAbandonTwice) { 935 TEST_F(PrerenderTest, LinkManagerAddTwiceAbandonTwice) {
858 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 936 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
859 GURL url("http://www.myexample.com"); 937 GURL url("http://www.myexample.com");
860 DummyPrerenderContents* prerender_contents = 938 DummyPrerenderContents* prerender_contents =
861 prerender_manager()->CreateNextPrerenderContents( 939 prerender_manager()->CreateNextPrerenderContents(
862 url, FINAL_STATUS_USED); 940 url, FINAL_STATUS_USED);
(...skipping 13 matching lines...) Expand all
876 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, 954 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId,
877 first_prerender_id); 955 first_prerender_id);
878 956
879 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); 957 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
880 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); 958 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url));
881 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, 959 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId,
882 second_prerender_id); 960 second_prerender_id);
883 961
884 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 962 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
885 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); 963 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
886 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 964 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
887 } 965 }
888 966
889 // TODO(gavinp): After abandon shortens the expire time on a Prerender, 967 // TODO(gavinp): After abandon shortens the expire time on a Prerender,
890 // add a series of tests testing advancing the time by either the abandon 968 // add a series of tests testing advancing the time by either the abandon
891 // or normal expire, and verifying the expected behaviour with groups 969 // or normal expire, and verifying the expected behaviour with groups
892 // of links. 970 // of links.
893 TEST_F(PrerenderTest, LinkManagerExpireThenCancel) { 971 TEST_F(PrerenderTest, LinkManagerExpireThenCancel) {
894 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 972 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
895 GURL url("http://www.myexample.com"); 973 GURL url("http://www.myexample.com");
896 DummyPrerenderContents* prerender_contents = 974 DummyPrerenderContents* prerender_contents =
897 prerender_manager()->CreateNextPrerenderContents( 975 prerender_manager()->CreateNextPrerenderContents(
898 url, FINAL_STATUS_TIMED_OUT); 976 url, FINAL_STATUS_TIMED_OUT);
899 977
900 EXPECT_TRUE(AddSimplePrerender(url)); 978 EXPECT_TRUE(AddSimplePrerender(url));
901 979
902 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 980 EXPECT_TRUE(prerender_contents->prerendering_has_started());
903 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); 981 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
904 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); 982 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url));
905 prerender_manager()->AdvanceTime(prerender_manager()->GetMaxAge() + 983 prerender_manager()->AdvanceTimeTicks(prerender_manager()->GetMaxAge() +
906 base::TimeDelta::FromSeconds(1)); 984 base::TimeDelta::FromSeconds(1));
907 985
908 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 986 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
909 DummyPrerenderContents* null = NULL; 987 DummyPrerenderContents* null = NULL;
910 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 988 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
911 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, 989 prerender_link_manager()->OnCancelPrerender(kDefaultChildId,
912 last_prerender_id()); 990 last_prerender_id());
913 991
914 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 992 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
915 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 993 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
916 } 994 }
917 995
918 TEST_F(PrerenderTest, LinkManagerExpireThenAddAgain) { 996 TEST_F(PrerenderTest, LinkManagerExpireThenAddAgain) {
919 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 997 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
920 GURL url("http://www.myexample.com"); 998 GURL url("http://www.myexample.com");
921 DummyPrerenderContents* first_prerender_contents = 999 DummyPrerenderContents* first_prerender_contents =
922 prerender_manager()->CreateNextPrerenderContents( 1000 prerender_manager()->CreateNextPrerenderContents(
923 url, FINAL_STATUS_TIMED_OUT); 1001 url, FINAL_STATUS_TIMED_OUT);
924 EXPECT_TRUE(AddSimplePrerender(url)); 1002 EXPECT_TRUE(AddSimplePrerender(url));
925 EXPECT_TRUE(first_prerender_contents->prerendering_has_started()); 1003 EXPECT_TRUE(first_prerender_contents->prerendering_has_started());
926 EXPECT_FALSE(first_prerender_contents->prerendering_has_been_cancelled()); 1004 EXPECT_FALSE(first_prerender_contents->prerendering_has_been_cancelled());
927 ASSERT_EQ(first_prerender_contents, prerender_manager()->FindEntry(url)); 1005 ASSERT_EQ(first_prerender_contents,
928 prerender_manager()->AdvanceTime(prerender_manager()->GetMaxAge() + 1006 prerender_manager()->FindAndUseEntry(url));
1007 prerender_manager()->AdvanceTimeTicks(prerender_manager()->GetMaxAge() +
929 base::TimeDelta::FromSeconds(1)); 1008 base::TimeDelta::FromSeconds(1));
930 DummyPrerenderContents* null = NULL; 1009 DummyPrerenderContents* null = NULL;
931 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 1010 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
932 DummyPrerenderContents* second_prerender_contents = 1011 DummyPrerenderContents* second_prerender_contents =
933 prerender_manager()->CreateNextPrerenderContents( 1012 prerender_manager()->CreateNextPrerenderContents(
934 url, FINAL_STATUS_USED); 1013 url, FINAL_STATUS_USED);
935 EXPECT_TRUE(AddSimplePrerender(url)); 1014 EXPECT_TRUE(AddSimplePrerender(url));
936 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); 1015 EXPECT_TRUE(second_prerender_contents->prerendering_has_started());
937 ASSERT_EQ(second_prerender_contents, prerender_manager()->GetEntry(url)); 1016 ASSERT_EQ(second_prerender_contents,
1017 prerender_manager()->FindAndUseEntry(url));
938 // The PrerenderLinkManager is not empty since we never removed the first 1018 // The PrerenderLinkManager is not empty since we never removed the first
939 // prerender. 1019 // prerender.
940 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 1020 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
941 } 1021 }
942 1022
943 TEST_F(PrerenderTest, LinkManagerCancelThenAddAgain) { 1023 TEST_F(PrerenderTest, LinkManagerCancelThenAddAgain) {
944 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 1024 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
945 GURL url("http://www.myexample.com"); 1025 GURL url("http://www.myexample.com");
946 DummyPrerenderContents* first_prerender_contents = 1026 DummyPrerenderContents* first_prerender_contents =
947 prerender_manager()->CreateNextPrerenderContents( 1027 prerender_manager()->CreateNextPrerenderContents(
948 url, FINAL_STATUS_CANCELLED); 1028 url, FINAL_STATUS_CANCELLED);
949 EXPECT_TRUE(AddSimplePrerender(url)); 1029 EXPECT_TRUE(AddSimplePrerender(url));
950 EXPECT_TRUE(first_prerender_contents->prerendering_has_started()); 1030 EXPECT_TRUE(first_prerender_contents->prerendering_has_started());
951 EXPECT_FALSE(first_prerender_contents->prerendering_has_been_cancelled()); 1031 EXPECT_FALSE(first_prerender_contents->prerendering_has_been_cancelled());
952 ASSERT_EQ(first_prerender_contents, prerender_manager()->FindEntry(url)); 1032 ASSERT_EQ(first_prerender_contents, prerender_manager()->FindEntry(url));
953 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, 1033 prerender_link_manager()->OnCancelPrerender(kDefaultChildId,
954 last_prerender_id()); 1034 last_prerender_id());
955 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 1035 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
956 EXPECT_TRUE(first_prerender_contents->prerendering_has_been_cancelled()); 1036 EXPECT_TRUE(first_prerender_contents->prerendering_has_been_cancelled());
957 DummyPrerenderContents* null = NULL; 1037 DummyPrerenderContents* null = NULL;
958 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 1038 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
959 DummyPrerenderContents* second_prerender_contents = 1039 DummyPrerenderContents* second_prerender_contents =
960 prerender_manager()->CreateNextPrerenderContents( 1040 prerender_manager()->CreateNextPrerenderContents(
961 url, FINAL_STATUS_USED); 1041 url, FINAL_STATUS_USED);
962 EXPECT_TRUE(AddSimplePrerender(url)); 1042 EXPECT_TRUE(AddSimplePrerender(url));
963 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); 1043 EXPECT_TRUE(second_prerender_contents->prerendering_has_started());
964 ASSERT_EQ(second_prerender_contents, prerender_manager()->GetEntry(url)); 1044 ASSERT_EQ(second_prerender_contents,
1045 prerender_manager()->FindAndUseEntry(url));
965 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 1046 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
966 } 1047 }
967 1048
968 } // namespace prerender 1049 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698