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

Unified Diff: chrome/browser/prerender/prerender_manager_unittest.cc

Issue 6677005: Limit prerender by only allowing one every X ms (X currently set to 500). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix license header Created 9 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/prerender/prerender_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« 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