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

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

Issue 10802024: Make three simultanious prerenders the default maximum in Canary and Dev only. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix field trial Created 8 years, 4 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
« no previous file with comments | « chrome/browser/prerender/prerender_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/memory/scoped_vector.h" 6 #include "base/memory/scoped_vector.h"
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/stringprintf.h"
8 #include "base/time.h" 9 #include "base/time.h"
9 #include "chrome/browser/prerender/prerender_contents.h" 10 #include "chrome/browser/prerender/prerender_contents.h"
10 #include "chrome/browser/prerender/prerender_handle.h" 11 #include "chrome/browser/prerender/prerender_handle.h"
11 #include "chrome/browser/prerender/prerender_link_manager.h" 12 #include "chrome/browser/prerender/prerender_link_manager.h"
12 #include "chrome/browser/prerender/prerender_manager.h" 13 #include "chrome/browser/prerender/prerender_manager.h"
13 #include "chrome/browser/prerender/prerender_origin.h" 14 #include "chrome/browser/prerender/prerender_origin.h"
14 #include "chrome/common/chrome_switches.h" 15 #include "chrome/common/chrome_switches.h"
15 #include "chrome/test/base/testing_browser_process.h" 16 #include "chrome/test/base/testing_browser_process.h"
16 #include "chrome/test/base/testing_profile.h" 17 #include "chrome/test/base/testing_profile.h"
17 #include "content/public/browser/render_view_host.h" 18 #include "content/public/browser/render_view_host.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 UnitTestPrerenderManager* test_prerender_manager_; 68 UnitTestPrerenderManager* test_prerender_manager_;
68 FinalStatus expected_final_status_; 69 FinalStatus expected_final_status_;
69 }; 70 };
70 71
71 const gfx::Size kSize(640, 480); 72 const gfx::Size kSize(640, 480);
72 73
73 } // namespace 74 } // namespace
74 75
75 class UnitTestPrerenderManager : public PrerenderManager { 76 class UnitTestPrerenderManager : public PrerenderManager {
76 public: 77 public:
78 using PrerenderManager::kMinTimeBetweenPrerendersMs;
77 using PrerenderManager::kNavigationRecordWindowMs; 79 using PrerenderManager::kNavigationRecordWindowMs;
78 using PrerenderManager::GetMaxAge; 80 using PrerenderManager::GetMaxAge;
79 81
80 explicit UnitTestPrerenderManager(PrerenderTracker* prerender_tracker) 82 explicit UnitTestPrerenderManager(PrerenderTracker* prerender_tracker)
81 : PrerenderManager(&profile_, prerender_tracker), 83 : PrerenderManager(&profile_, prerender_tracker),
82 time_(base::Time::Now()), 84 time_(base::Time::Now()),
83 time_ticks_(base::TimeTicks::Now()), 85 time_ticks_(base::TimeTicks::Now()),
84 next_prerender_contents_(NULL), 86 next_prerender_contents_(NULL),
85 prerender_tracker_(prerender_tracker) { 87 prerender_tracker_(prerender_tracker) {
86 set_rate_limit_enabled(false); 88 set_rate_limit_enabled(false);
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 FINAL_STATUS_TIMED_OUT); 381 FINAL_STATUS_TIMED_OUT);
380 DummyPrerenderContents* null = NULL; 382 DummyPrerenderContents* null = NULL;
381 EXPECT_TRUE(AddSimplePrerender(url)); 383 EXPECT_TRUE(AddSimplePrerender(url));
382 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 384 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
383 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 385 EXPECT_TRUE(prerender_contents->prerendering_has_started());
384 prerender_manager()->AdvanceTimeTicks(prerender_manager()->GetMaxAge() + 386 prerender_manager()->AdvanceTimeTicks(prerender_manager()->GetMaxAge() +
385 base::TimeDelta::FromSeconds(1)); 387 base::TimeDelta::FromSeconds(1));
386 ASSERT_EQ(null, prerender_manager()->FindEntry(url)); 388 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
387 } 389 }
388 390
389 // LRU Test. Make sure that if we prerender more than one request, that 391 // LRU Test. Make sure that if we prerender more requests than we support, that
390 // the oldest one will be dropped. 392 // the oldest one will be dropped.
391 TEST_F(PrerenderTest, DropOldestRequestTest) { 393 TEST_F(PrerenderTest, DropOldestRequestTest) {
392 GURL url("http://www.google.com/"); 394 std::vector<int> concurrencies_to_test;
393 DummyPrerenderContents* prerender_contents = 395 concurrencies_to_test.push_back(
394 prerender_manager()->CreateNextPrerenderContents( 396 prerender_manager()->config().max_concurrency);
395 url, 397 concurrencies_to_test.push_back(1);
396 FINAL_STATUS_EVICTED); 398 concurrencies_to_test.push_back(2);
399
397 DummyPrerenderContents* null = NULL; 400 DummyPrerenderContents* null = NULL;
398 EXPECT_TRUE(AddSimplePrerender(url)); 401 GURL url_to_evict("http://www.google.com/evictme");
399 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
400 EXPECT_TRUE(prerender_contents->prerendering_has_started());
401 402
402 GURL url1("http://news.google.com/"); 403 for (std::vector<int>::const_iterator i = concurrencies_to_test.begin();
403 DummyPrerenderContents* prerender_contents1 = 404 i != concurrencies_to_test.end();
404 prerender_manager()->CreateNextPrerenderContents( 405 ++i) {
405 url1, 406 const int max_concurrency = *i;
406 FINAL_STATUS_USED); 407 prerender_manager()->mutable_config().max_concurrency = max_concurrency;
407 EXPECT_TRUE(AddSimplePrerender(url1));
408 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
409 EXPECT_TRUE(prerender_contents1->prerendering_has_started());
410 408
411 ASSERT_EQ(null, prerender_manager()->FindEntry(url)); 409 DummyPrerenderContents* prerender_contents_to_evict =
412 ASSERT_EQ(prerender_contents1, prerender_manager()->FindAndUseEntry(url1)); 410 prerender_manager()->CreateNextPrerenderContents(
413 } 411 url_to_evict, FINAL_STATUS_EVICTED);
412 EXPECT_TRUE(AddSimplePrerender(url_to_evict));
413 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
414 EXPECT_TRUE(prerender_contents_to_evict->prerendering_has_started());
414 415
415 // Two element prerender test. Ensure that the LRU operates correctly if we 416 std::vector<GURL> urls;
416 // permit 2 elements to be kept prerendered. 417 std::vector<PrerenderContents*> prerender_contentses;
417 TEST_F(PrerenderTest, TwoElementPrerenderTest) {
418 prerender_manager()->mutable_config().max_elements = 2;
419 GURL url("http://www.google.com/");
420 DummyPrerenderContents* prerender_contents =
421 prerender_manager()->CreateNextPrerenderContents(
422 url,
423 FINAL_STATUS_EVICTED);
424 DummyPrerenderContents* null = NULL;
425 EXPECT_TRUE(AddSimplePrerender(url));
426 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
427 EXPECT_TRUE(prerender_contents->prerendering_has_started());
428 418
429 GURL url1("http://news.google.com/"); 419 for (int j = 0; j < max_concurrency; ++j) {
430 DummyPrerenderContents* prerender_contents1 = 420 urls.push_back(GURL(base::StringPrintf("http://google.com/use#%d", j)));
431 prerender_manager()->CreateNextPrerenderContents( 421 prerender_contentses.push_back(
432 url1, 422 prerender_manager()->CreateNextPrerenderContents(urls.back(),
433 FINAL_STATUS_USED); 423 FINAL_STATUS_USED));
434 EXPECT_TRUE(AddSimplePrerender(url1)); 424 EXPECT_TRUE(AddSimplePrerender(urls.back()));
435 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 425 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
436 EXPECT_TRUE(prerender_contents1->prerendering_has_started()); 426 EXPECT_TRUE(prerender_contentses.back()->prerendering_has_started());
427 }
437 428
438 GURL url2("http://images.google.com/"); 429 ASSERT_EQ(null, prerender_manager()->FindEntry(url_to_evict));
439 DummyPrerenderContents* prerender_contents2 = 430 for (int j = 0; j < max_concurrency; ++j) {
440 prerender_manager()->CreateNextPrerenderContents( 431 ASSERT_EQ(prerender_contentses[j],
441 url2, 432 prerender_manager()->FindAndUseEntry(urls[j]));
442 FINAL_STATUS_USED); 433 }
443 EXPECT_TRUE(AddSimplePrerender(url2)); 434 }
444 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
445 EXPECT_TRUE(prerender_contents2->prerendering_has_started());
446
447 ASSERT_EQ(null, prerender_manager()->FindEntry(url));
448 ASSERT_EQ(prerender_contents1, prerender_manager()->FindAndUseEntry(url1));
449 ASSERT_EQ(prerender_contents2, prerender_manager()->FindAndUseEntry(url2));
450 } 435 }
451 436
452 TEST_F(PrerenderTest, AliasURLTest) { 437 TEST_F(PrerenderTest, AliasURLTest) {
453 GURL url("http://www.google.com/"); 438 GURL url("http://www.google.com/");
454 GURL alias_url1("http://www.google.com/index.html"); 439 GURL alias_url1("http://www.google.com/index.html");
455 GURL alias_url2("http://google.com/"); 440 GURL alias_url2("http://google.com/");
456 GURL not_an_alias_url("http://google.com/index.html"); 441 GURL not_an_alias_url("http://google.com/index.html");
457 std::vector<GURL> alias_urls; 442 std::vector<GURL> alias_urls;
458 alias_urls.push_back(alias_url1); 443 alias_urls.push_back(alias_url1);
459 alias_urls.push_back(alias_url2); 444 alias_urls.push_back(alias_url2);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 GURL url1("http://news.google.com/"); 489 GURL url1("http://news.google.com/");
505 prerender_manager()->CreateNextPrerenderContents( 490 prerender_manager()->CreateNextPrerenderContents(
506 url, 491 url,
507 FINAL_STATUS_MANAGER_SHUTDOWN); 492 FINAL_STATUS_MANAGER_SHUTDOWN);
508 EXPECT_FALSE(AddSimplePrerender(url1)); 493 EXPECT_FALSE(AddSimplePrerender(url1));
509 prerender_manager()->set_rate_limit_enabled(false); 494 prerender_manager()->set_rate_limit_enabled(false);
510 } 495 }
511 496
512 // Ensure that we don't ignore prerender requests outside the rate limit. 497 // Ensure that we don't ignore prerender requests outside the rate limit.
513 TEST_F(PrerenderTest, RateLimitOutsideWindowTest) { 498 TEST_F(PrerenderTest, RateLimitOutsideWindowTest) {
499 // Setting concurrency to one lets us force eviction by adding only one more
500 // prerender.
501 prerender_manager()->mutable_config().max_concurrency = 1;
502
514 GURL url("http://www.google.com/"); 503 GURL url("http://www.google.com/");
515 DummyPrerenderContents* prerender_contents = 504 DummyPrerenderContents* prerender_contents =
516 prerender_manager()->CreateNextPrerenderContents( 505 prerender_manager()->CreateNextPrerenderContents(
517 url, 506 url,
518 FINAL_STATUS_EVICTED); 507 FINAL_STATUS_EVICTED);
519 DummyPrerenderContents* null = NULL; 508 DummyPrerenderContents* null = NULL;
520 EXPECT_TRUE(AddSimplePrerender(url)); 509 EXPECT_TRUE(AddSimplePrerender(url));
521 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 510 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
522 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 511 EXPECT_TRUE(prerender_contents->prerendering_has_started());
523 512
524 prerender_manager()->set_rate_limit_enabled(true); 513 prerender_manager()->set_rate_limit_enabled(true);
525 prerender_manager()->AdvanceTimeTicks( 514 prerender_manager()->AdvanceTimeTicks(
526 base::TimeDelta::FromMilliseconds(2000)); 515 base::TimeDelta::FromMilliseconds(
516 UnitTestPrerenderManager::kMinTimeBetweenPrerendersMs + 500));
527 517
528 GURL url1("http://news.google.com/"); 518 GURL url1("http://news.google.com/");
529 DummyPrerenderContents* rate_limit_prerender_contents = 519 DummyPrerenderContents* rate_limit_prerender_contents =
530 prerender_manager()->CreateNextPrerenderContents( 520 prerender_manager()->CreateNextPrerenderContents(
531 url1, 521 url1,
532 FINAL_STATUS_MANAGER_SHUTDOWN); 522 FINAL_STATUS_MANAGER_SHUTDOWN);
533 EXPECT_TRUE(AddSimplePrerender(url1)); 523 EXPECT_TRUE(AddSimplePrerender(url1));
534 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 524 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
535 EXPECT_TRUE(rate_limit_prerender_contents->prerendering_has_started()); 525 EXPECT_TRUE(rate_limit_prerender_contents->prerendering_has_started());
536 prerender_manager()->set_rate_limit_enabled(false); 526 prerender_manager()->set_rate_limit_enabled(false);
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 prerender_manager()->CreateNextPrerenderContents( 1077 prerender_manager()->CreateNextPrerenderContents(
1088 url, FINAL_STATUS_USED); 1078 url, FINAL_STATUS_USED);
1089 EXPECT_TRUE(AddSimplePrerender(url)); 1079 EXPECT_TRUE(AddSimplePrerender(url));
1090 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); 1080 EXPECT_TRUE(second_prerender_contents->prerendering_has_started());
1091 ASSERT_EQ(second_prerender_contents, 1081 ASSERT_EQ(second_prerender_contents,
1092 prerender_manager()->FindAndUseEntry(url)); 1082 prerender_manager()->FindAndUseEntry(url));
1093 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 1083 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
1094 } 1084 }
1095 1085
1096 } // namespace prerender 1086 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698