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

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

Issue 7210020: Added prerendering to omnibox. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More histograms/rebase Created 9 years, 6 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/memory/scoped_vector.h"
6 #include "base/time.h" 6 #include "base/time.h"
7 #include "chrome/browser/prerender/prerender_contents.h" 7 #include "chrome/browser/prerender/prerender_contents.h"
8 #include "chrome/browser/prerender/prerender_manager.h" 8 #include "chrome/browser/prerender/prerender_manager.h"
9 #include "chrome/browser/prerender/prerender_origin.h"
9 #include "chrome/test/testing_browser_process.h" 10 #include "chrome/test/testing_browser_process.h"
10 #include "content/browser/browser_thread.h" 11 #include "content/browser/browser_thread.h"
11 #include "content/browser/renderer_host/render_view_host.h" 12 #include "content/browser/renderer_host/render_view_host.h"
12 #include "content/browser/renderer_host/render_process_host.h" 13 #include "content/browser/renderer_host/render_process_host.h"
13 #include "googleurl/src/gurl.h" 14 #include "googleurl/src/gurl.h"
14 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
15 16
16 namespace prerender { 17 namespace prerender {
17 18
18 namespace { 19 namespace {
19 20
20 class DummyPrerenderContents : public PrerenderContents { 21 class DummyPrerenderContents : public PrerenderContents {
21 public: 22 public:
22 DummyPrerenderContents(PrerenderManager* prerender_manager, 23 DummyPrerenderContents(PrerenderManager* prerender_manager,
23 PrerenderTracker* prerender_tracker, 24 PrerenderTracker* prerender_tracker,
24 const GURL& url, 25 const GURL& url,
25 FinalStatus expected_final_status) 26 FinalStatus expected_final_status)
26 : PrerenderContents(prerender_manager, prerender_tracker, NULL, url, 27 : PrerenderContents(prerender_manager, prerender_tracker, NULL, url,
27 GURL()), 28 GURL(), ORIGIN_LINK_REL_PRERENDER),
28 has_started_(false), 29 has_started_(false),
29 expected_final_status_(expected_final_status) { 30 expected_final_status_(expected_final_status) {
30 } 31 }
31 32
32 virtual ~DummyPrerenderContents() { 33 virtual ~DummyPrerenderContents() {
33 EXPECT_EQ(expected_final_status_, final_status()); 34 EXPECT_EQ(expected_final_status_, final_status());
34 } 35 }
35 36
36 virtual void StartPrerendering( 37 virtual void StartPrerendering(
37 const RenderViewHost* source_render_view_host) OVERRIDE { 38 const RenderViewHost* source_render_view_host) OVERRIDE {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 expected_final_status); 112 expected_final_status);
112 for (std::vector<GURL>::const_iterator it = alias_urls.begin(); 113 for (std::vector<GURL>::const_iterator it = alias_urls.begin();
113 it != alias_urls.end(); 114 it != alias_urls.end();
114 ++it) { 115 ++it) {
115 EXPECT_TRUE(prerender_contents->AddAliasURL(*it)); 116 EXPECT_TRUE(prerender_contents->AddAliasURL(*it));
116 } 117 }
117 SetNextPrerenderContents(prerender_contents); 118 SetNextPrerenderContents(prerender_contents);
118 return prerender_contents; 119 return prerender_contents;
119 } 120 }
120 121
121 // Shorthand to add a simple preload with no aliases. 122 // Shorthand to add a simple preload with a reasonable source.
122 bool AddSimplePreload(const GURL& url) { 123 bool AddSimplePrerender(const GURL& url) {
123 return AddPreload(std::pair<int, int>(-1, -1), url, GURL()); 124 return AddPrerenderWithNoTag(ORIGIN_LINK_REL_PRERENDER, url);
124 } 125 }
125 126
126 bool IsPendingEntry(const GURL& url) { 127 bool IsPendingEntry(const GURL& url) {
127 return (PrerenderManager::FindPendingEntry(url) != NULL); 128 return (PrerenderManager::FindPendingEntry(url) != NULL);
128 } 129 }
129 130
130 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; } 131 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; }
131 132
132 PrerenderContents* next_prerender_contents() { 133 PrerenderContents* next_prerender_contents() {
133 return next_prerender_contents_.get(); 134 return next_prerender_contents_.get();
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 197
197 // Needed to pass PrerenderManager's DCHECKs. 198 // Needed to pass PrerenderManager's DCHECKs.
198 ScopedTestingBrowserProcess browser_process_; 199 ScopedTestingBrowserProcess browser_process_;
199 MessageLoop message_loop_; 200 MessageLoop message_loop_;
200 BrowserThread ui_thread_; 201 BrowserThread ui_thread_;
201 scoped_ptr<TestPrerenderManager> prerender_manager_; 202 scoped_ptr<TestPrerenderManager> prerender_manager_;
202 }; 203 };
203 204
204 TEST_F(PrerenderManagerTest, EmptyTest) { 205 TEST_F(PrerenderManagerTest, EmptyTest) {
205 GURL url("http://www.google.com/"); 206 GURL url("http://www.google.com/");
206 EXPECT_FALSE(prerender_manager()->MaybeUsePreloadedPage(NULL, url, false)); 207 EXPECT_FALSE(prerender_manager()->MaybeUsePrerenderedPage(NULL, url, false));
207 } 208 }
208 209
209 TEST_F(PrerenderManagerTest, FoundTest) { 210 TEST_F(PrerenderManagerTest, FoundTest) {
210 GURL url("http://www.google.com/"); 211 GURL url("http://www.google.com/");
211 DummyPrerenderContents* prerender_contents = 212 DummyPrerenderContents* prerender_contents =
212 prerender_manager()->CreateNextPrerenderContents( 213 prerender_manager()->CreateNextPrerenderContents(
213 url, 214 url,
214 FINAL_STATUS_USED); 215 FINAL_STATUS_USED);
215 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 216 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
216 EXPECT_TRUE(prerender_contents->has_started()); 217 EXPECT_TRUE(prerender_contents->has_started());
217 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 218 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
218 } 219 }
219 220
220 // Make sure that if queue a request, and a second prerender request for the 221 // Make sure that if queue a request, and a second prerender request for the
221 // same URL comes in, that we drop the second request and keep the first one. 222 // same URL comes in, that we drop the second request and keep the first one.
222 TEST_F(PrerenderManagerTest, DropSecondRequestTest) { 223 TEST_F(PrerenderManagerTest, DropSecondRequestTest) {
223 GURL url("http://www.google.com/"); 224 GURL url("http://www.google.com/");
224 DummyPrerenderContents* prerender_contents = 225 DummyPrerenderContents* prerender_contents =
225 prerender_manager()->CreateNextPrerenderContents( 226 prerender_manager()->CreateNextPrerenderContents(
226 url, 227 url,
227 FINAL_STATUS_USED); 228 FINAL_STATUS_USED);
228 DummyPrerenderContents* null = NULL; 229 DummyPrerenderContents* null = NULL;
229 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 230 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
230 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 231 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
231 EXPECT_TRUE(prerender_contents->has_started()); 232 EXPECT_TRUE(prerender_contents->has_started());
232 233
233 DummyPrerenderContents* prerender_contents1 = 234 DummyPrerenderContents* prerender_contents1 =
234 prerender_manager()->CreateNextPrerenderContents( 235 prerender_manager()->CreateNextPrerenderContents(
235 url, 236 url,
236 FINAL_STATUS_MANAGER_SHUTDOWN); 237 FINAL_STATUS_MANAGER_SHUTDOWN);
237 EXPECT_FALSE(prerender_manager()->AddSimplePreload(url)); 238 EXPECT_FALSE(prerender_manager()->AddSimplePrerender(url));
238 EXPECT_EQ(prerender_contents1, 239 EXPECT_EQ(prerender_contents1,
239 prerender_manager()->next_prerender_contents()); 240 prerender_manager()->next_prerender_contents());
240 EXPECT_FALSE(prerender_contents1->has_started()); 241 EXPECT_FALSE(prerender_contents1->has_started());
241 242
242 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 243 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
243 } 244 }
244 245
245 // Ensure that we expire a prerendered page after the max. permitted time. 246 // Ensure that we expire a prerendered page after the max. permitted time.
246 TEST_F(PrerenderManagerTest, ExpireTest) { 247 TEST_F(PrerenderManagerTest, ExpireTest) {
247 GURL url("http://www.google.com/"); 248 GURL url("http://www.google.com/");
248 DummyPrerenderContents* prerender_contents = 249 DummyPrerenderContents* prerender_contents =
249 prerender_manager()->CreateNextPrerenderContents( 250 prerender_manager()->CreateNextPrerenderContents(
250 url, 251 url,
251 FINAL_STATUS_TIMED_OUT); 252 FINAL_STATUS_TIMED_OUT);
252 DummyPrerenderContents* null = NULL; 253 DummyPrerenderContents* null = NULL;
253 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 254 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
254 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 255 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
255 EXPECT_TRUE(prerender_contents->has_started()); 256 EXPECT_TRUE(prerender_contents->has_started());
256 prerender_manager()->AdvanceTime(prerender_manager()->max_prerender_age() 257 prerender_manager()->AdvanceTime(prerender_manager()->max_prerender_age()
257 + base::TimeDelta::FromSeconds(1)); 258 + base::TimeDelta::FromSeconds(1));
258 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 259 ASSERT_EQ(null, prerender_manager()->GetEntry(url));
259 } 260 }
260 261
261 // LRU Test. Make sure that if we prerender more than one request, that 262 // LRU Test. Make sure that if we prerender more than one request, that
262 // the oldest one will be dropped. 263 // the oldest one will be dropped.
263 TEST_F(PrerenderManagerTest, DropOldestRequestTest) { 264 TEST_F(PrerenderManagerTest, DropOldestRequestTest) {
264 GURL url("http://www.google.com/"); 265 GURL url("http://www.google.com/");
265 DummyPrerenderContents* prerender_contents = 266 DummyPrerenderContents* prerender_contents =
266 prerender_manager()->CreateNextPrerenderContents( 267 prerender_manager()->CreateNextPrerenderContents(
267 url, 268 url,
268 FINAL_STATUS_EVICTED); 269 FINAL_STATUS_EVICTED);
269 DummyPrerenderContents* null = NULL; 270 DummyPrerenderContents* null = NULL;
270 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 271 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
271 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 272 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
272 EXPECT_TRUE(prerender_contents->has_started()); 273 EXPECT_TRUE(prerender_contents->has_started());
273 274
274 GURL url1("http://news.google.com/"); 275 GURL url1("http://news.google.com/");
275 DummyPrerenderContents* prerender_contents1 = 276 DummyPrerenderContents* prerender_contents1 =
276 prerender_manager()->CreateNextPrerenderContents( 277 prerender_manager()->CreateNextPrerenderContents(
277 url1, 278 url1,
278 FINAL_STATUS_USED); 279 FINAL_STATUS_USED);
279 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url1)); 280 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url1));
280 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 281 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
281 EXPECT_TRUE(prerender_contents1->has_started()); 282 EXPECT_TRUE(prerender_contents1->has_started());
282 283
283 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 284 ASSERT_EQ(null, prerender_manager()->GetEntry(url));
284 ASSERT_EQ(prerender_contents1, prerender_manager()->GetEntry(url1)); 285 ASSERT_EQ(prerender_contents1, prerender_manager()->GetEntry(url1));
285 } 286 }
286 287
287 // Two element prerender test. Ensure that the LRU operates correctly if we 288 // Two element prerender test. Ensure that the LRU operates correctly if we
288 // permit 2 elements to be kept prerendered. 289 // permit 2 elements to be kept prerendered.
289 TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) { 290 TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) {
290 prerender_manager()->set_max_elements(2); 291 prerender_manager()->set_max_elements(2);
291 GURL url("http://www.google.com/"); 292 GURL url("http://www.google.com/");
292 DummyPrerenderContents* prerender_contents = 293 DummyPrerenderContents* prerender_contents =
293 prerender_manager()->CreateNextPrerenderContents( 294 prerender_manager()->CreateNextPrerenderContents(
294 url, 295 url,
295 FINAL_STATUS_EVICTED); 296 FINAL_STATUS_EVICTED);
296 DummyPrerenderContents* null = NULL; 297 DummyPrerenderContents* null = NULL;
297 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 298 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
298 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 299 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
299 EXPECT_TRUE(prerender_contents->has_started()); 300 EXPECT_TRUE(prerender_contents->has_started());
300 301
301 GURL url1("http://news.google.com/"); 302 GURL url1("http://news.google.com/");
302 DummyPrerenderContents* prerender_contents1 = 303 DummyPrerenderContents* prerender_contents1 =
303 prerender_manager()->CreateNextPrerenderContents( 304 prerender_manager()->CreateNextPrerenderContents(
304 url1, 305 url1,
305 FINAL_STATUS_USED); 306 FINAL_STATUS_USED);
306 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url1)); 307 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url1));
307 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 308 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
308 EXPECT_TRUE(prerender_contents1->has_started()); 309 EXPECT_TRUE(prerender_contents1->has_started());
309 310
310 GURL url2("http://images.google.com/"); 311 GURL url2("http://images.google.com/");
311 DummyPrerenderContents* prerender_contents2 = 312 DummyPrerenderContents* prerender_contents2 =
312 prerender_manager()->CreateNextPrerenderContents( 313 prerender_manager()->CreateNextPrerenderContents(
313 url2, 314 url2,
314 FINAL_STATUS_USED); 315 FINAL_STATUS_USED);
315 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url2)); 316 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url2));
316 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 317 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
317 EXPECT_TRUE(prerender_contents2->has_started()); 318 EXPECT_TRUE(prerender_contents2->has_started());
318 319
319 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); 320 ASSERT_EQ(null, prerender_manager()->GetEntry(url));
320 ASSERT_EQ(prerender_contents1, prerender_manager()->GetEntry(url1)); 321 ASSERT_EQ(prerender_contents1, prerender_manager()->GetEntry(url1));
321 ASSERT_EQ(prerender_contents2, prerender_manager()->GetEntry(url2)); 322 ASSERT_EQ(prerender_contents2, prerender_manager()->GetEntry(url2));
322 } 323 }
323 324
324 TEST_F(PrerenderManagerTest, AliasURLTest) { 325 TEST_F(PrerenderManagerTest, AliasURLTest) {
325 GURL url("http://www.google.com/"); 326 GURL url("http://www.google.com/");
326 GURL alias_url1("http://www.google.com/index.html"); 327 GURL alias_url1("http://www.google.com/index.html");
327 GURL alias_url2("http://google.com/"); 328 GURL alias_url2("http://google.com/");
328 GURL not_an_alias_url("http://google.com/index.html"); 329 GURL not_an_alias_url("http://google.com/index.html");
329 std::vector<GURL> alias_urls; 330 std::vector<GURL> alias_urls;
330 alias_urls.push_back(alias_url1); 331 alias_urls.push_back(alias_url1);
331 alias_urls.push_back(alias_url2); 332 alias_urls.push_back(alias_url2);
332 333
333 // Test that all of the aliases work, but not_an_alias_url does not. 334 // Test that all of the aliases work, but not_an_alias_url does not.
334 DummyPrerenderContents* prerender_contents = 335 DummyPrerenderContents* prerender_contents =
335 prerender_manager()->CreateNextPrerenderContents( 336 prerender_manager()->CreateNextPrerenderContents(
336 url, alias_urls, FINAL_STATUS_USED); 337 url, alias_urls, FINAL_STATUS_USED);
337 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 338 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
338 ASSERT_EQ(NULL, prerender_manager()->GetEntry(not_an_alias_url)); 339 ASSERT_EQ(NULL, prerender_manager()->GetEntry(not_an_alias_url));
339 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url1)); 340 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url1));
340 prerender_contents = prerender_manager()->CreateNextPrerenderContents( 341 prerender_contents = prerender_manager()->CreateNextPrerenderContents(
341 url, alias_urls, FINAL_STATUS_USED); 342 url, alias_urls, FINAL_STATUS_USED);
342 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 343 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
343 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url2)); 344 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url2));
344 prerender_contents = prerender_manager()->CreateNextPrerenderContents( 345 prerender_contents = prerender_manager()->CreateNextPrerenderContents(
345 url, alias_urls, FINAL_STATUS_USED); 346 url, alias_urls, FINAL_STATUS_USED);
346 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 347 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
347 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 348 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
348 349
349 // Test that alias URLs can not be added. 350 // Test that alias URLs can not be added.
350 prerender_contents = prerender_manager()->CreateNextPrerenderContents( 351 prerender_contents = prerender_manager()->CreateNextPrerenderContents(
351 url, alias_urls, FINAL_STATUS_USED); 352 url, alias_urls, FINAL_STATUS_USED);
352 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 353 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
353 EXPECT_FALSE(prerender_manager()->AddSimplePreload(url)); 354 EXPECT_FALSE(prerender_manager()->AddSimplePrerender(url));
354 EXPECT_FALSE(prerender_manager()->AddSimplePreload(alias_url1)); 355 EXPECT_FALSE(prerender_manager()->AddSimplePrerender(alias_url1));
355 EXPECT_FALSE(prerender_manager()->AddSimplePreload(alias_url2)); 356 EXPECT_FALSE(prerender_manager()->AddSimplePrerender(alias_url2));
356 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 357 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
357 } 358 }
358 359
359 // Ensure that we ignore prerender requests within the rate limit. 360 // Ensure that we ignore prerender requests within the rate limit.
360 TEST_F(PrerenderManagerTest, RateLimitInWindowTest) { 361 TEST_F(PrerenderManagerTest, RateLimitInWindowTest) {
361 GURL url("http://www.google.com/"); 362 GURL url("http://www.google.com/");
362 DummyPrerenderContents* prerender_contents = 363 DummyPrerenderContents* prerender_contents =
363 prerender_manager()->CreateNextPrerenderContents( 364 prerender_manager()->CreateNextPrerenderContents(
364 url, 365 url,
365 FINAL_STATUS_MANAGER_SHUTDOWN); 366 FINAL_STATUS_MANAGER_SHUTDOWN);
366 DummyPrerenderContents* null = NULL; 367 DummyPrerenderContents* null = NULL;
367 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 368 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
368 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 369 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
369 EXPECT_TRUE(prerender_contents->has_started()); 370 EXPECT_TRUE(prerender_contents->has_started());
370 371
371 prerender_manager()->set_rate_limit_enabled(true); 372 prerender_manager()->set_rate_limit_enabled(true);
372 prerender_manager()->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(1)); 373 prerender_manager()->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(1));
373 374
374 GURL url1("http://news.google.com/"); 375 GURL url1("http://news.google.com/");
375 prerender_manager()->CreateNextPrerenderContents( 376 prerender_manager()->CreateNextPrerenderContents(
376 url, 377 url,
377 FINAL_STATUS_MANAGER_SHUTDOWN); 378 FINAL_STATUS_MANAGER_SHUTDOWN);
378 EXPECT_FALSE(prerender_manager()->AddSimplePreload(url1)); 379 EXPECT_FALSE(prerender_manager()->AddSimplePrerender(url1));
379 prerender_manager()->set_rate_limit_enabled(false); 380 prerender_manager()->set_rate_limit_enabled(false);
380 } 381 }
381 382
382 // Ensure that we don't ignore prerender requests outside the rate limit. 383 // Ensure that we don't ignore prerender requests outside the rate limit.
383 TEST_F(PrerenderManagerTest, RateLimitOutsideWindowTest) { 384 TEST_F(PrerenderManagerTest, RateLimitOutsideWindowTest) {
384 GURL url("http://www.google.com/"); 385 GURL url("http://www.google.com/");
385 DummyPrerenderContents* prerender_contents = 386 DummyPrerenderContents* prerender_contents =
386 prerender_manager()->CreateNextPrerenderContents( 387 prerender_manager()->CreateNextPrerenderContents(
387 url, 388 url,
388 FINAL_STATUS_EVICTED); 389 FINAL_STATUS_EVICTED);
389 DummyPrerenderContents* null = NULL; 390 DummyPrerenderContents* null = NULL;
390 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 391 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
391 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 392 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
392 EXPECT_TRUE(prerender_contents->has_started()); 393 EXPECT_TRUE(prerender_contents->has_started());
393 394
394 prerender_manager()->set_rate_limit_enabled(true); 395 prerender_manager()->set_rate_limit_enabled(true);
395 prerender_manager()->AdvanceTimeTicks( 396 prerender_manager()->AdvanceTimeTicks(
396 base::TimeDelta::FromMilliseconds(2000)); 397 base::TimeDelta::FromMilliseconds(2000));
397 398
398 GURL url1("http://news.google.com/"); 399 GURL url1("http://news.google.com/");
399 DummyPrerenderContents* rate_limit_prerender_contents = 400 DummyPrerenderContents* rate_limit_prerender_contents =
400 prerender_manager()->CreateNextPrerenderContents( 401 prerender_manager()->CreateNextPrerenderContents(
401 url1, 402 url1,
402 FINAL_STATUS_MANAGER_SHUTDOWN); 403 FINAL_STATUS_MANAGER_SHUTDOWN);
403 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url1)); 404 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url1));
404 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 405 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
405 EXPECT_TRUE(rate_limit_prerender_contents->has_started()); 406 EXPECT_TRUE(rate_limit_prerender_contents->has_started());
406 prerender_manager()->set_rate_limit_enabled(false); 407 prerender_manager()->set_rate_limit_enabled(false);
407 } 408 }
408 409
409 TEST_F(PrerenderManagerTest, PendingPreloadTest) { 410 TEST_F(PrerenderManagerTest, PendingPrerenderTest) {
410 GURL url("http://www.google.com/"); 411 GURL url("http://www.google.com/");
411 DummyPrerenderContents* prerender_contents = 412 DummyPrerenderContents* prerender_contents =
412 prerender_manager()->CreateNextPrerenderContents( 413 prerender_manager()->CreateNextPrerenderContents(
413 url, 414 url,
414 FINAL_STATUS_USED); 415 FINAL_STATUS_USED);
415 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 416 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
416 417
417 int child_id; 418 int child_id;
418 int route_id; 419 int route_id;
419 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); 420 ASSERT_TRUE(prerender_contents->GetChildId(&child_id));
420 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); 421 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id));
421 422
422 GURL pending_url("http://news.google.com/"); 423 GURL pending_url("http://news.google.com/");
423 424
424 EXPECT_TRUE( 425 EXPECT_TRUE(
425 prerender_manager()->AddPreload(std::make_pair(child_id, route_id), 426 prerender_manager()->AddPrerender(ORIGIN_LINK_REL_PRERENDER,
426 pending_url, 427 std::make_pair(child_id, route_id),
427 url)); 428 pending_url,
429 url));
428 430
429 EXPECT_TRUE(prerender_manager()->IsPendingEntry(pending_url)); 431 EXPECT_TRUE(prerender_manager()->IsPendingEntry(pending_url));
430 EXPECT_TRUE(prerender_contents->has_started()); 432 EXPECT_TRUE(prerender_contents->has_started());
431 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 433 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
432 } 434 }
433 435
434 // Ensure that extracting a urlencoded URL in the url= query string component 436 // Ensure that extracting a urlencoded URL in the url= query string component
435 // works. 437 // works.
436 TEST_F(PrerenderManagerTest, ExtractURLInQueryStringTest) { 438 TEST_F(PrerenderManagerTest, ExtractURLInQueryStringTest) {
437 GURL result; 439 GURL result;
(...skipping 15 matching lines...) Expand all
453 // group will not be able to override FINAL_STATUS_CONTROL_GROUP. 455 // group will not be able to override FINAL_STATUS_CONTROL_GROUP.
454 TEST_F(PrerenderManagerTest, ControlGroup) { 456 TEST_F(PrerenderManagerTest, ControlGroup) {
455 RestorePrerenderMode restore_prerender_mode; 457 RestorePrerenderMode restore_prerender_mode;
456 PrerenderManager::SetMode( 458 PrerenderManager::SetMode(
457 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); 459 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP);
458 GURL url("http://www.google.com/"); 460 GURL url("http://www.google.com/");
459 DummyPrerenderContents* prerender_contents = 461 DummyPrerenderContents* prerender_contents =
460 prerender_manager()->CreateNextPrerenderContents( 462 prerender_manager()->CreateNextPrerenderContents(
461 url, 463 url,
462 FINAL_STATUS_CONTROL_GROUP); 464 FINAL_STATUS_CONTROL_GROUP);
463 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 465 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
464 EXPECT_FALSE(prerender_contents->has_started()); 466 EXPECT_FALSE(prerender_contents->has_started());
465 } 467 }
466 468
467 // Tests that prerendering is cancelled when the source render view does not 469 // Tests that prerendering is cancelled when the source render view does not
468 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be 470 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be
469 // triggered. 471 // triggered.
470 TEST_F(PrerenderManagerTest, SourceRenderViewClosed) { 472 TEST_F(PrerenderManagerTest, SourceRenderViewClosed) {
471 GURL url("http://www.google.com/"); 473 GURL url("http://www.google.com/");
472 prerender_manager()->CreateNextPrerenderContents( 474 prerender_manager()->CreateNextPrerenderContents(
473 url, 475 url,
474 FINAL_STATUS_MANAGER_SHUTDOWN); 476 FINAL_STATUS_MANAGER_SHUTDOWN);
475 EXPECT_FALSE(prerender_manager()->AddPreload( 477 EXPECT_FALSE(prerender_manager()->AddPrerender(
476 std::pair<int, int>(100, 100), url, GURL())); 478 ORIGIN_LINK_REL_PRERENDER, std::pair<int, int>(100, 100), url, GURL()));
477 } 479 }
478 480
479 // Tests that the prerender manager ignores fragment references when matching 481 // Tests that the prerender manager ignores fragment references when matching
480 // prerender URLs in the case the fragment is not in the prerender URL. 482 // prerender URLs in the case the fragment is not in the prerender URL.
481 TEST_F(PrerenderManagerTest, PageMatchesFragmentTest) { 483 TEST_F(PrerenderManagerTest, PageMatchesFragmentTest) {
482 GURL url("http://www.google.com/"); 484 GURL url("http://www.google.com/");
483 GURL fragment_url("http://www.google.com/#test"); 485 GURL fragment_url("http://www.google.com/#test");
484 486
485 DummyPrerenderContents* prerender_contents = 487 DummyPrerenderContents* prerender_contents =
486 prerender_manager()->CreateNextPrerenderContents(url, 488 prerender_manager()->CreateNextPrerenderContents(url,
487 FINAL_STATUS_USED); 489 FINAL_STATUS_USED);
488 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 490 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
489 EXPECT_TRUE(prerender_contents->has_started()); 491 EXPECT_TRUE(prerender_contents->has_started());
490 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(fragment_url)); 492 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(fragment_url));
491 } 493 }
492 494
493 // Tests that the prerender manager ignores fragment references when matching 495 // Tests that the prerender manager ignores fragment references when matching
494 // prerender URLs in the case the fragment is in the prerender URL. 496 // prerender URLs in the case the fragment is in the prerender URL.
495 TEST_F(PrerenderManagerTest, FragmentMatchesPageTest) { 497 TEST_F(PrerenderManagerTest, FragmentMatchesPageTest) {
496 GURL url("http://www.google.com/"); 498 GURL url("http://www.google.com/");
497 GURL fragment_url("http://www.google.com/#test"); 499 GURL fragment_url("http://www.google.com/#test");
498 500
499 DummyPrerenderContents* prerender_contents = 501 DummyPrerenderContents* prerender_contents =
500 prerender_manager()->CreateNextPrerenderContents(fragment_url, 502 prerender_manager()->CreateNextPrerenderContents(fragment_url,
501 FINAL_STATUS_USED); 503 FINAL_STATUS_USED);
502 EXPECT_TRUE(prerender_manager()->AddSimplePreload(fragment_url)); 504 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(fragment_url));
503 EXPECT_TRUE(prerender_contents->has_started()); 505 EXPECT_TRUE(prerender_contents->has_started());
504 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); 506 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
505 } 507 }
506 508
507 // Tests that the prerender manager ignores fragment references when matching 509 // Tests that the prerender manager ignores fragment references when matching
508 // prerender URLs in the case the fragment is in both URLs. 510 // prerender URLs in the case the fragment is in both URLs.
509 TEST_F(PrerenderManagerTest, FragmentMatchesFragmentTest) { 511 TEST_F(PrerenderManagerTest, FragmentMatchesFragmentTest) {
510 GURL fragment_url("http://www.google.com/#test"); 512 GURL fragment_url("http://www.google.com/#test");
511 GURL other_fragment_url("http://www.google.com/#other_test"); 513 GURL other_fragment_url("http://www.google.com/#other_test");
512 514
513 DummyPrerenderContents* prerender_contents = 515 DummyPrerenderContents* prerender_contents =
514 prerender_manager()->CreateNextPrerenderContents(fragment_url, 516 prerender_manager()->CreateNextPrerenderContents(fragment_url,
515 FINAL_STATUS_USED); 517 FINAL_STATUS_USED);
516 EXPECT_TRUE(prerender_manager()->AddSimplePreload(fragment_url)); 518 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(fragment_url));
517 EXPECT_TRUE(prerender_contents->has_started()); 519 EXPECT_TRUE(prerender_contents->has_started());
518 ASSERT_EQ(prerender_contents, 520 ASSERT_EQ(prerender_contents,
519 prerender_manager()->GetEntry(other_fragment_url)); 521 prerender_manager()->GetEntry(other_fragment_url));
520 } 522 }
521 523
522 // Make sure that clearing works as expected. 524 // Make sure that clearing works as expected.
523 TEST_F(PrerenderManagerTest, ClearTest) { 525 TEST_F(PrerenderManagerTest, ClearTest) {
524 GURL url("http://www.google.com/"); 526 GURL url("http://www.google.com/");
525 DummyPrerenderContents* prerender_contents = 527 DummyPrerenderContents* prerender_contents =
526 prerender_manager()->CreateNextPrerenderContents( 528 prerender_manager()->CreateNextPrerenderContents(
527 url, 529 url,
528 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED); 530 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED);
529 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); 531 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
530 EXPECT_TRUE(prerender_contents->has_started()); 532 EXPECT_TRUE(prerender_contents->has_started());
531 prerender_manager()->ClearData(PrerenderManager::CLEAR_PRERENDER_CONTENTS); 533 prerender_manager()->ClearData(PrerenderManager::CLEAR_PRERENDER_CONTENTS);
532 DummyPrerenderContents* null = NULL; 534 DummyPrerenderContents* null = NULL;
533 EXPECT_EQ(null, prerender_manager()->GetEntry(url)); 535 EXPECT_EQ(null, prerender_manager()->GetEntry(url));
534 } 536 }
535 537
536 } // namespace prerender 538 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698