OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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(3); |
393 DummyPrerenderContents* prerender_contents = | 395 concurrencies_to_test.at(0) = prerender_manager()->config().max_concurrency; |
dominich
2012/07/19 16:04:38
concurrencies_to_test[0] = ...
or concurrencies_t
gavinp
2012/07/23 18:35:21
Done. Although I really like vector<>::at() for it
| |
394 prerender_manager()->CreateNextPrerenderContents( | 396 concurrencies_to_test.at(1) = 1; |
395 url, | 397 concurrencies_to_test.at(2) = 2; |
396 FINAL_STATUS_EVICTED); | 398 |
397 DummyPrerenderContents* null = NULL; | 399 DummyPrerenderContents* null = NULL; |
398 EXPECT_TRUE(AddSimplePrerender(url)); | 400 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 | 401 |
402 GURL url1("http://news.google.com/"); | 402 for (std::vector<int>::size_type i = 0; |
dominich
2012/07/19 16:04:38
iterator loop would be better here.
gavinp
2012/07/23 18:35:21
Done.
| |
403 DummyPrerenderContents* prerender_contents1 = | 403 i < concurrencies_to_test.size(); |
404 prerender_manager()->CreateNextPrerenderContents( | 404 ++i) { |
405 url1, | 405 const int max_concurrency = concurrencies_to_test.at(i); |
406 FINAL_STATUS_USED); | 406 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 | 407 |
411 ASSERT_EQ(null, prerender_manager()->FindEntry(url)); | 408 DummyPrerenderContents* prerender_contents_to_evict = |
412 ASSERT_EQ(prerender_contents1, prerender_manager()->FindAndUseEntry(url1)); | 409 prerender_manager()->CreateNextPrerenderContents( |
413 } | 410 url_to_evict, FINAL_STATUS_EVICTED); |
411 EXPECT_TRUE(AddSimplePrerender(url_to_evict)); | |
412 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | |
413 EXPECT_TRUE(prerender_contents_to_evict->prerendering_has_started()); | |
414 | 414 |
415 // Two element prerender test. Ensure that the LRU operates correctly if we | 415 std::vector<GURL> urls; |
416 // permit 2 elements to be kept prerendered. | 416 std::vector<PrerenderContents*> prerender_contentses; |
dominich
2012/07/19 16:04:38
what's he got in his prerender contentses, my prec
gavinp
2012/07/23 18:35:21
I could have stayed with prerender_contents, but t
| |
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 | 417 |
429 GURL url1("http://news.google.com/"); | 418 for (int j = 0; j < max_concurrency; ++j) { |
430 DummyPrerenderContents* prerender_contents1 = | 419 urls.push_back(GURL(base::StringPrintf("http://google.com/use#%d", j))); |
431 prerender_manager()->CreateNextPrerenderContents( | 420 prerender_contentses.push_back( |
432 url1, | 421 prerender_manager()->CreateNextPrerenderContents(urls.back(), |
433 FINAL_STATUS_USED); | 422 FINAL_STATUS_USED)); |
434 EXPECT_TRUE(AddSimplePrerender(url1)); | 423 EXPECT_TRUE(AddSimplePrerender(urls.back())); |
435 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 424 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
436 EXPECT_TRUE(prerender_contents1->prerendering_has_started()); | 425 EXPECT_TRUE(prerender_contentses.back()->prerendering_has_started()); |
426 } | |
437 | 427 |
438 GURL url2("http://images.google.com/"); | 428 ASSERT_EQ(null, prerender_manager()->FindEntry(url_to_evict)); |
439 DummyPrerenderContents* prerender_contents2 = | 429 for (int j = 0; j < max_concurrency; ++j) { |
440 prerender_manager()->CreateNextPrerenderContents( | 430 ASSERT_EQ(prerender_contentses.at(j), |
dominich
2012/07/19 16:04:38
prerender_contentses[j]
gavinp
2012/07/23 18:35:21
Done.
| |
441 url2, | 431 prerender_manager()->FindAndUseEntry(urls.at(j))); |
dominich
2012/07/19 16:04:38
urls[j]
gavinp
2012/07/23 18:35:21
Done.
| |
442 FINAL_STATUS_USED); | 432 } |
443 EXPECT_TRUE(AddSimplePrerender(url2)); | 433 } |
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 } | 434 } |
451 | 435 |
452 TEST_F(PrerenderTest, AliasURLTest) { | 436 TEST_F(PrerenderTest, AliasURLTest) { |
453 GURL url("http://www.google.com/"); | 437 GURL url("http://www.google.com/"); |
454 GURL alias_url1("http://www.google.com/index.html"); | 438 GURL alias_url1("http://www.google.com/index.html"); |
455 GURL alias_url2("http://google.com/"); | 439 GURL alias_url2("http://google.com/"); |
456 GURL not_an_alias_url("http://google.com/index.html"); | 440 GURL not_an_alias_url("http://google.com/index.html"); |
457 std::vector<GURL> alias_urls; | 441 std::vector<GURL> alias_urls; |
458 alias_urls.push_back(alias_url1); | 442 alias_urls.push_back(alias_url1); |
459 alias_urls.push_back(alias_url2); | 443 alias_urls.push_back(alias_url2); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
504 GURL url1("http://news.google.com/"); | 488 GURL url1("http://news.google.com/"); |
505 prerender_manager()->CreateNextPrerenderContents( | 489 prerender_manager()->CreateNextPrerenderContents( |
506 url, | 490 url, |
507 FINAL_STATUS_MANAGER_SHUTDOWN); | 491 FINAL_STATUS_MANAGER_SHUTDOWN); |
508 EXPECT_FALSE(AddSimplePrerender(url1)); | 492 EXPECT_FALSE(AddSimplePrerender(url1)); |
509 prerender_manager()->set_rate_limit_enabled(false); | 493 prerender_manager()->set_rate_limit_enabled(false); |
510 } | 494 } |
511 | 495 |
512 // Ensure that we don't ignore prerender requests outside the rate limit. | 496 // Ensure that we don't ignore prerender requests outside the rate limit. |
513 TEST_F(PrerenderTest, RateLimitOutsideWindowTest) { | 497 TEST_F(PrerenderTest, RateLimitOutsideWindowTest) { |
498 // Setting concurrency to one lets us force eviction by adding only one more | |
499 // prerender. | |
500 prerender_manager()->mutable_config().max_concurrency = 1; | |
501 | |
514 GURL url("http://www.google.com/"); | 502 GURL url("http://www.google.com/"); |
515 DummyPrerenderContents* prerender_contents = | 503 DummyPrerenderContents* prerender_contents = |
516 prerender_manager()->CreateNextPrerenderContents( | 504 prerender_manager()->CreateNextPrerenderContents( |
517 url, | 505 url, |
518 FINAL_STATUS_EVICTED); | 506 FINAL_STATUS_EVICTED); |
519 DummyPrerenderContents* null = NULL; | 507 DummyPrerenderContents* null = NULL; |
520 EXPECT_TRUE(AddSimplePrerender(url)); | 508 EXPECT_TRUE(AddSimplePrerender(url)); |
521 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 509 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
522 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 510 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
523 | 511 |
524 prerender_manager()->set_rate_limit_enabled(true); | 512 prerender_manager()->set_rate_limit_enabled(true); |
525 prerender_manager()->AdvanceTimeTicks( | 513 prerender_manager()->AdvanceTimeTicks( |
526 base::TimeDelta::FromMilliseconds(2000)); | 514 base::TimeDelta::FromMilliseconds( |
515 UnitTestPrerenderManager::kMinTimeBetweenPrerendersMs + 500)); | |
527 | 516 |
528 GURL url1("http://news.google.com/"); | 517 GURL url1("http://news.google.com/"); |
529 DummyPrerenderContents* rate_limit_prerender_contents = | 518 DummyPrerenderContents* rate_limit_prerender_contents = |
530 prerender_manager()->CreateNextPrerenderContents( | 519 prerender_manager()->CreateNextPrerenderContents( |
531 url1, | 520 url1, |
532 FINAL_STATUS_MANAGER_SHUTDOWN); | 521 FINAL_STATUS_MANAGER_SHUTDOWN); |
533 EXPECT_TRUE(AddSimplePrerender(url1)); | 522 EXPECT_TRUE(AddSimplePrerender(url1)); |
534 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 523 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
535 EXPECT_TRUE(rate_limit_prerender_contents->prerendering_has_started()); | 524 EXPECT_TRUE(rate_limit_prerender_contents->prerendering_has_started()); |
536 prerender_manager()->set_rate_limit_enabled(false); | 525 prerender_manager()->set_rate_limit_enabled(false); |
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1087 prerender_manager()->CreateNextPrerenderContents( | 1076 prerender_manager()->CreateNextPrerenderContents( |
1088 url, FINAL_STATUS_USED); | 1077 url, FINAL_STATUS_USED); |
1089 EXPECT_TRUE(AddSimplePrerender(url)); | 1078 EXPECT_TRUE(AddSimplePrerender(url)); |
1090 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); | 1079 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); |
1091 ASSERT_EQ(second_prerender_contents, | 1080 ASSERT_EQ(second_prerender_contents, |
1092 prerender_manager()->FindAndUseEntry(url)); | 1081 prerender_manager()->FindAndUseEntry(url)); |
1093 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | 1082 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
1094 } | 1083 } |
1095 | 1084 |
1096 } // namespace prerender | 1085 } // namespace prerender |
OLD | NEW |