| 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..d5639afdf18f252a2154fab040d7e326d15b7e1e 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,50 @@ 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;
|
| + concurrencies_to_test.push_back(
|
| + prerender_manager()->config().max_concurrency);
|
| + concurrencies_to_test.push_back(1);
|
| + concurrencies_to_test.push_back(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>::const_iterator i = concurrencies_to_test.begin();
|
| + i != concurrencies_to_test.end();
|
| + ++i) {
|
| + const int max_concurrency = *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;
|
| +
|
| + 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[j],
|
| + prerender_manager()->FindAndUseEntry(urls[j]));
|
| + }
|
| + }
|
| }
|
|
|
| TEST_F(PrerenderTest, AliasURLTest) {
|
| @@ -511,6 +496,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 +512,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 =
|
|
|