Index: chrome/browser/prerender/prerender_manager_unittest.cc |
diff --git a/chrome/browser/prerender/prerender_manager_unittest.cc b/chrome/browser/prerender/prerender_manager_unittest.cc |
index 722bc332d76cf06b6b2194458ad112f3746ed9d5..ea029d4ec1ea9efc5a54dd2c43ebf2e67c7d42fc 100644 |
--- a/chrome/browser/prerender/prerender_manager_unittest.cc |
+++ b/chrome/browser/prerender/prerender_manager_unittest.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -53,13 +53,19 @@ class TestPrerenderManager : public PrerenderManager { |
TestPrerenderManager() |
: PrerenderManager(NULL), |
time_(base::Time::Now()), |
+ time_ticks_(base::TimeTicks::Now()), |
next_pc_(NULL) { |
+ rate_limit_enabled_ = false; |
} |
void AdvanceTime(base::TimeDelta delta) { |
time_ += delta; |
} |
+ void AdvanceTimeTicks(base::TimeDelta delta) { |
+ time_ticks_ += delta; |
+ } |
+ |
void SetNextPrerenderContents(PrerenderContents* pc) { |
next_pc_.reset(pc); |
} |
@@ -69,6 +75,8 @@ class TestPrerenderManager : public PrerenderManager { |
return AddPreload(url, std::vector<GURL>(), GURL()); |
} |
+ void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; } |
+ |
PrerenderContents* next_pc() { return next_pc_.get(); } |
protected: |
@@ -84,6 +92,10 @@ class TestPrerenderManager : public PrerenderManager { |
return time_; |
} |
+ virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE { |
+ return time_ticks_; |
+ } |
+ |
virtual PrerenderContents* CreatePrerenderContents( |
const GURL& url, |
const std::vector<GURL>& alias_urls, |
@@ -93,6 +105,7 @@ class TestPrerenderManager : public PrerenderManager { |
} |
base::Time time_; |
+ base::TimeTicks time_ticks_; |
scoped_ptr<PrerenderContents> next_pc_; |
}; |
@@ -272,4 +285,54 @@ TEST_F(PrerenderManagerTest, AliasURLTest) { |
delete pc; |
} |
-} // naemspace prerender |
+// Ensure that we ignore prerender requests within the rate limit. |
+TEST_F(PrerenderManagerTest, RateLimitInWindowTest) { |
+ GURL url("http://www.google.com/"); |
+ DummyPrerenderContents* pc = |
+ new DummyPrerenderContents(prerender_manager_.get(), url, |
+ FINAL_STATUS_MANAGER_SHUTDOWN); |
+ DummyPrerenderContents* null = NULL; |
+ prerender_manager_->SetNextPrerenderContents(pc); |
+ EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); |
+ EXPECT_EQ(null, prerender_manager_->next_pc()); |
+ EXPECT_TRUE(pc->has_started()); |
+ |
+ prerender_manager_->set_rate_limit_enabled(true); |
+ prerender_manager_->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(1)); |
+ |
+ GURL url1("http://news.google.com/"); |
+ DummyPrerenderContents* rate_limit_pc = |
+ new DummyPrerenderContents(prerender_manager_.get(), url1, |
+ FINAL_STATUS_MANAGER_SHUTDOWN); |
+ prerender_manager_->SetNextPrerenderContents(rate_limit_pc); |
+ EXPECT_FALSE(prerender_manager_->AddSimplePreload(url1)); |
+ prerender_manager_->set_rate_limit_enabled(false); |
+} |
+ |
+// Ensure that we don't ignore prerender requests outside the rate limit. |
+TEST_F(PrerenderManagerTest, RateLimitOutsideWindowTest) { |
+ GURL url("http://www.google.com/"); |
+ DummyPrerenderContents* pc = |
+ new DummyPrerenderContents(prerender_manager_.get(), url, |
+ FINAL_STATUS_EVICTED); |
+ DummyPrerenderContents* null = NULL; |
+ prerender_manager_->SetNextPrerenderContents(pc); |
+ EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); |
+ EXPECT_EQ(null, prerender_manager_->next_pc()); |
+ EXPECT_TRUE(pc->has_started()); |
+ |
+ prerender_manager_->set_rate_limit_enabled(true); |
+ prerender_manager_->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(2000)); |
+ |
+ GURL url1("http://news.google.com/"); |
+ DummyPrerenderContents* rate_limit_pc = |
+ new DummyPrerenderContents(prerender_manager_.get(), url1, |
+ FINAL_STATUS_MANAGER_SHUTDOWN); |
+ prerender_manager_->SetNextPrerenderContents(rate_limit_pc); |
+ EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1)); |
+ EXPECT_EQ(null, prerender_manager_->next_pc()); |
+ EXPECT_TRUE(rate_limit_pc->has_started()); |
+ prerender_manager_->set_rate_limit_enabled(false); |
+} |
+ |
+} // namespace prerender |