Chromium Code Reviews| Index: chrome/browser/prerender/prerender_unittest.cc |
| diff --git a/chrome/browser/prerender/prerender_unittest.cc b/chrome/browser/prerender/prerender_unittest.cc |
| index 07684df586572a5f9167273e235767bdc62d226b..240f745305703d94df07e71cd191f158e5b0923b 100644 |
| --- a/chrome/browser/prerender/prerender_unittest.cc |
| +++ b/chrome/browser/prerender/prerender_unittest.cc |
| @@ -5,6 +5,7 @@ |
| #include "base/command_line.h" |
| #include "base/memory/scoped_vector.h" |
| #include "base/message_loop.h" |
| +#include "base/stringprintf.h" |
| #include "base/time.h" |
| #include "chrome/browser/prerender/prerender_contents.h" |
| #include "chrome/browser/prerender/prerender_handle.h" |
| @@ -74,6 +75,7 @@ const gfx::Size kSize(640, 480); |
| class UnitTestPrerenderManager : public PrerenderManager { |
| public: |
| + using PrerenderManager::kMinTimeBetweenPrerendersMs; |
| using PrerenderManager::kNavigationRecordWindowMs; |
| using PrerenderManager::GetMaxAge; |
| @@ -386,67 +388,49 @@ TEST_F(PrerenderTest, ExpireTest) { |
| ASSERT_EQ(null, prerender_manager()->FindEntry(url)); |
| } |
| -// LRU Test. Make sure that if we prerender more than one request, that |
| +// LRU Test. Make sure that if we prerender more requests than we support, that |
| // the oldest one will be dropped. |
| TEST_F(PrerenderTest, DropOldestRequestTest) { |
| - GURL url("http://www.google.com/"); |
| - DummyPrerenderContents* prerender_contents = |
| - prerender_manager()->CreateNextPrerenderContents( |
| - url, |
| - FINAL_STATUS_EVICTED); |
| - DummyPrerenderContents* null = NULL; |
| - EXPECT_TRUE(AddSimplePrerender(url)); |
| - EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| - EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| - |
| - GURL url1("http://news.google.com/"); |
| - DummyPrerenderContents* prerender_contents1 = |
| - prerender_manager()->CreateNextPrerenderContents( |
| - url1, |
| - FINAL_STATUS_USED); |
| - EXPECT_TRUE(AddSimplePrerender(url1)); |
| - EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| - EXPECT_TRUE(prerender_contents1->prerendering_has_started()); |
| - |
| - ASSERT_EQ(null, prerender_manager()->FindEntry(url)); |
| - ASSERT_EQ(prerender_contents1, prerender_manager()->FindAndUseEntry(url1)); |
| -} |
| + std::vector<int> concurrencies_to_test(3); |
| + 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
|
| + concurrencies_to_test.at(1) = 1; |
| + concurrencies_to_test.at(2) = 2; |
| -// Two element prerender test. Ensure that the LRU operates correctly if we |
| -// permit 2 elements to be kept prerendered. |
| -TEST_F(PrerenderTest, TwoElementPrerenderTest) { |
| - prerender_manager()->mutable_config().max_elements = 2; |
| - GURL url("http://www.google.com/"); |
| - DummyPrerenderContents* prerender_contents = |
| - prerender_manager()->CreateNextPrerenderContents( |
| - url, |
| - FINAL_STATUS_EVICTED); |
| DummyPrerenderContents* null = NULL; |
| - EXPECT_TRUE(AddSimplePrerender(url)); |
| - EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| - EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| - |
| - GURL url1("http://news.google.com/"); |
| - DummyPrerenderContents* prerender_contents1 = |
| - prerender_manager()->CreateNextPrerenderContents( |
| - url1, |
| - FINAL_STATUS_USED); |
| - EXPECT_TRUE(AddSimplePrerender(url1)); |
| - EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| - EXPECT_TRUE(prerender_contents1->prerendering_has_started()); |
| - |
| - GURL url2("http://images.google.com/"); |
| - DummyPrerenderContents* prerender_contents2 = |
| - prerender_manager()->CreateNextPrerenderContents( |
| - url2, |
| - FINAL_STATUS_USED); |
| - EXPECT_TRUE(AddSimplePrerender(url2)); |
| - EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| - EXPECT_TRUE(prerender_contents2->prerendering_has_started()); |
| + GURL url_to_evict("http://www.google.com/evictme"); |
| + |
| + 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.
|
| + i < concurrencies_to_test.size(); |
| + ++i) { |
| + const int max_concurrency = concurrencies_to_test.at(i); |
| + prerender_manager()->mutable_config().max_concurrency = max_concurrency; |
| + |
| + DummyPrerenderContents* prerender_contents_to_evict = |
| + prerender_manager()->CreateNextPrerenderContents( |
| + url_to_evict, FINAL_STATUS_EVICTED); |
| + EXPECT_TRUE(AddSimplePrerender(url_to_evict)); |
| + EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| + EXPECT_TRUE(prerender_contents_to_evict->prerendering_has_started()); |
| + |
| + std::vector<GURL> urls; |
| + 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
|
| + |
| + for (int j = 0; j < max_concurrency; ++j) { |
| + urls.push_back(GURL(base::StringPrintf("http://google.com/use#%d", j))); |
| + prerender_contentses.push_back( |
| + prerender_manager()->CreateNextPrerenderContents(urls.back(), |
| + FINAL_STATUS_USED)); |
| + EXPECT_TRUE(AddSimplePrerender(urls.back())); |
| + EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| + EXPECT_TRUE(prerender_contentses.back()->prerendering_has_started()); |
| + } |
| - ASSERT_EQ(null, prerender_manager()->FindEntry(url)); |
| - ASSERT_EQ(prerender_contents1, prerender_manager()->FindAndUseEntry(url1)); |
| - ASSERT_EQ(prerender_contents2, prerender_manager()->FindAndUseEntry(url2)); |
| + ASSERT_EQ(null, prerender_manager()->FindEntry(url_to_evict)); |
| + for (int j = 0; j < max_concurrency; ++j) { |
| + ASSERT_EQ(prerender_contentses.at(j), |
|
dominich
2012/07/19 16:04:38
prerender_contentses[j]
gavinp
2012/07/23 18:35:21
Done.
|
| + prerender_manager()->FindAndUseEntry(urls.at(j))); |
|
dominich
2012/07/19 16:04:38
urls[j]
gavinp
2012/07/23 18:35:21
Done.
|
| + } |
| + } |
| } |
| TEST_F(PrerenderTest, AliasURLTest) { |
| @@ -511,6 +495,10 @@ TEST_F(PrerenderTest, RateLimitInWindowTest) { |
| // Ensure that we don't ignore prerender requests outside the rate limit. |
| TEST_F(PrerenderTest, RateLimitOutsideWindowTest) { |
| + // Setting concurrency to one lets us force eviction by adding only one more |
| + // prerender. |
| + prerender_manager()->mutable_config().max_concurrency = 1; |
| + |
| GURL url("http://www.google.com/"); |
| DummyPrerenderContents* prerender_contents = |
| prerender_manager()->CreateNextPrerenderContents( |
| @@ -523,7 +511,8 @@ TEST_F(PrerenderTest, RateLimitOutsideWindowTest) { |
| prerender_manager()->set_rate_limit_enabled(true); |
| prerender_manager()->AdvanceTimeTicks( |
| - base::TimeDelta::FromMilliseconds(2000)); |
| + base::TimeDelta::FromMilliseconds( |
| + UnitTestPrerenderManager::kMinTimeBetweenPrerendersMs + 500)); |
| GURL url1("http://news.google.com/"); |
| DummyPrerenderContents* rate_limit_prerender_contents = |