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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/prerender/prerender_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/time.h" 5 #include "base/time.h"
6 #include "chrome/browser/prerender/prerender_contents.h" 6 #include "chrome/browser/prerender/prerender_contents.h"
7 #include "chrome/browser/prerender/prerender_manager.h" 7 #include "chrome/browser/prerender/prerender_manager.h"
8 #include "content/browser/browser_thread.h" 8 #include "content/browser/browser_thread.h"
9 #include "googleurl/src/gurl.h" 9 #include "googleurl/src/gurl.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 11
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 private: 46 private:
47 bool has_started_; 47 bool has_started_;
48 FinalStatus expected_final_status_; 48 FinalStatus expected_final_status_;
49 }; 49 };
50 50
51 class TestPrerenderManager : public PrerenderManager { 51 class TestPrerenderManager : public PrerenderManager {
52 public: 52 public:
53 TestPrerenderManager() 53 TestPrerenderManager()
54 : PrerenderManager(NULL), 54 : PrerenderManager(NULL),
55 time_(base::Time::Now()), 55 time_(base::Time::Now()),
56 time_ticks_(base::TimeTicks::Now()),
56 next_pc_(NULL) { 57 next_pc_(NULL) {
58 rate_limit_enabled_ = false;
57 } 59 }
58 60
59 void AdvanceTime(base::TimeDelta delta) { 61 void AdvanceTime(base::TimeDelta delta) {
60 time_ += delta; 62 time_ += delta;
61 } 63 }
62 64
65 void AdvanceTimeTicks(base::TimeDelta delta) {
66 time_ticks_ += delta;
67 }
68
63 void SetNextPrerenderContents(PrerenderContents* pc) { 69 void SetNextPrerenderContents(PrerenderContents* pc) {
64 next_pc_.reset(pc); 70 next_pc_.reset(pc);
65 } 71 }
66 72
67 // Shorthand to add a simple preload with no aliases. 73 // Shorthand to add a simple preload with no aliases.
68 bool AddSimplePreload(const GURL& url) { 74 bool AddSimplePreload(const GURL& url) {
69 return AddPreload(url, std::vector<GURL>(), GURL()); 75 return AddPreload(url, std::vector<GURL>(), GURL());
70 } 76 }
71 77
78 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; }
79
72 PrerenderContents* next_pc() { return next_pc_.get(); } 80 PrerenderContents* next_pc() { return next_pc_.get(); }
73 81
74 protected: 82 protected:
75 virtual ~TestPrerenderManager() { 83 virtual ~TestPrerenderManager() {
76 if (next_pc()) { 84 if (next_pc()) {
77 next_pc()->set_final_status( 85 next_pc()->set_final_status(
78 FINAL_STATUS_MANAGER_SHUTDOWN); 86 FINAL_STATUS_MANAGER_SHUTDOWN);
79 } 87 }
80 } 88 }
81 89
82 private: 90 private:
83 virtual base::Time GetCurrentTime() const OVERRIDE { 91 virtual base::Time GetCurrentTime() const OVERRIDE {
84 return time_; 92 return time_;
85 } 93 }
86 94
95 virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE {
96 return time_ticks_;
97 }
98
87 virtual PrerenderContents* CreatePrerenderContents( 99 virtual PrerenderContents* CreatePrerenderContents(
88 const GURL& url, 100 const GURL& url,
89 const std::vector<GURL>& alias_urls, 101 const std::vector<GURL>& alias_urls,
90 const GURL& referrer) OVERRIDE { 102 const GURL& referrer) OVERRIDE {
91 DCHECK(next_pc_.get()); 103 DCHECK(next_pc_.get());
92 return next_pc_.release(); 104 return next_pc_.release();
93 } 105 }
94 106
95 base::Time time_; 107 base::Time time_;
108 base::TimeTicks time_ticks_;
96 scoped_ptr<PrerenderContents> next_pc_; 109 scoped_ptr<PrerenderContents> next_pc_;
97 }; 110 };
98 111
99 } // namespace 112 } // namespace
100 113
101 class PrerenderManagerTest : public testing::Test { 114 class PrerenderManagerTest : public testing::Test {
102 public: 115 public:
103 PrerenderManagerTest() : prerender_manager_(new TestPrerenderManager()), 116 PrerenderManagerTest() : prerender_manager_(new TestPrerenderManager()),
104 ui_thread_(BrowserThread::UI, &message_loop_) { 117 ui_thread_(BrowserThread::UI, &message_loop_) {
105 } 118 }
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); 278 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL()));
266 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url)); 279 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url));
267 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url1)); 280 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url1));
268 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url2)); 281 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url2));
269 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 282 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
270 283
271 pc->set_final_status(FINAL_STATUS_USED); 284 pc->set_final_status(FINAL_STATUS_USED);
272 delete pc; 285 delete pc;
273 } 286 }
274 287
275 } // naemspace prerender 288 // Ensure that we ignore prerender requests within the rate limit.
289 TEST_F(PrerenderManagerTest, RateLimitInWindowTest) {
290 GURL url("http://www.google.com/");
291 DummyPrerenderContents* pc =
292 new DummyPrerenderContents(prerender_manager_.get(), url,
293 FINAL_STATUS_MANAGER_SHUTDOWN);
294 DummyPrerenderContents* null = NULL;
295 prerender_manager_->SetNextPrerenderContents(pc);
296 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
297 EXPECT_EQ(null, prerender_manager_->next_pc());
298 EXPECT_TRUE(pc->has_started());
299
300 prerender_manager_->set_rate_limit_enabled(true);
301 prerender_manager_->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(1));
302
303 GURL url1("http://news.google.com/");
304 DummyPrerenderContents* rate_limit_pc =
305 new DummyPrerenderContents(prerender_manager_.get(), url1,
306 FINAL_STATUS_MANAGER_SHUTDOWN);
307 prerender_manager_->SetNextPrerenderContents(rate_limit_pc);
308 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url1));
309 prerender_manager_->set_rate_limit_enabled(false);
310 }
311
312 // Ensure that we don't ignore prerender requests outside the rate limit.
313 TEST_F(PrerenderManagerTest, RateLimitOutsideWindowTest) {
314 GURL url("http://www.google.com/");
315 DummyPrerenderContents* pc =
316 new DummyPrerenderContents(prerender_manager_.get(), url,
317 FINAL_STATUS_EVICTED);
318 DummyPrerenderContents* null = NULL;
319 prerender_manager_->SetNextPrerenderContents(pc);
320 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
321 EXPECT_EQ(null, prerender_manager_->next_pc());
322 EXPECT_TRUE(pc->has_started());
323
324 prerender_manager_->set_rate_limit_enabled(true);
325 prerender_manager_->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(2000));
326
327 GURL url1("http://news.google.com/");
328 DummyPrerenderContents* rate_limit_pc =
329 new DummyPrerenderContents(prerender_manager_.get(), url1,
330 FINAL_STATUS_MANAGER_SHUTDOWN);
331 prerender_manager_->SetNextPrerenderContents(rate_limit_pc);
332 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1));
333 EXPECT_EQ(null, prerender_manager_->next_pc());
334 EXPECT_TRUE(rate_limit_pc->has_started());
335 prerender_manager_->set_rate_limit_enabled(false);
336 }
337
338 } // namespace prerender
OLDNEW
« 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