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

Side by Side Diff: chrome/browser/prerender/prerender_manager_unittest.cc

Issue 6625066: Add pending preloads indexed by routing id. Start preloading once we navigate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge 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
OLDNEW
1 // Copyright (c) 2011 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 "content/browser/renderer_host/render_view_host.h"
10 #include "content/browser/renderer_host/render_process_host.h"
9 #include "googleurl/src/gurl.h" 11 #include "googleurl/src/gurl.h"
10 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
11 13
12 namespace prerender { 14 namespace prerender {
13 15
14 namespace { 16 namespace {
15 17
16 class DummyPrerenderContents : public PrerenderContents { 18 class DummyPrerenderContents : public PrerenderContents {
17 public: 19 public:
18 DummyPrerenderContents(PrerenderManager* prerender_manager, 20 DummyPrerenderContents(PrerenderManager* prerender_manager,
(...skipping 15 matching lines...) Expand all
34 } 36 }
35 37
36 virtual ~DummyPrerenderContents() { 38 virtual ~DummyPrerenderContents() {
37 EXPECT_EQ(expected_final_status_, final_status()); 39 EXPECT_EQ(expected_final_status_, final_status());
38 } 40 }
39 41
40 virtual void StartPrerendering() OVERRIDE { 42 virtual void StartPrerendering() OVERRIDE {
41 has_started_ = true; 43 has_started_ = true;
42 } 44 }
43 45
46 virtual bool GetChildId(int* child_id) const OVERRIDE {
47 *child_id = 0;
48 return true;
49 }
50
51 virtual bool GetRouteId(int* route_id) const OVERRIDE {
52 *route_id = 0;
53 return true;
54 }
55
44 bool has_started() const { return has_started_; } 56 bool has_started() const { return has_started_; }
45 57
46 private: 58 private:
47 bool has_started_; 59 bool has_started_;
48 FinalStatus expected_final_status_; 60 FinalStatus expected_final_status_;
49 }; 61 };
50 62
51 class TestPrerenderManager : public PrerenderManager { 63 class TestPrerenderManager : public PrerenderManager {
52 public: 64 public:
53 TestPrerenderManager() 65 TestPrerenderManager()
(...skipping 14 matching lines...) Expand all
68 80
69 void SetNextPrerenderContents(PrerenderContents* pc) { 81 void SetNextPrerenderContents(PrerenderContents* pc) {
70 next_pc_.reset(pc); 82 next_pc_.reset(pc);
71 } 83 }
72 84
73 // Shorthand to add a simple preload with no aliases. 85 // Shorthand to add a simple preload with no aliases.
74 bool AddSimplePreload(const GURL& url) { 86 bool AddSimplePreload(const GURL& url) {
75 return AddPreload(url, std::vector<GURL>(), GURL()); 87 return AddPreload(url, std::vector<GURL>(), GURL());
76 } 88 }
77 89
90 bool IsPendingEntry(const GURL& url) {
91 return (PrerenderManager::FindPendingEntry(url) != NULL);
92 }
93
78 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; } 94 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; }
79 95
80 PrerenderContents* next_pc() { return next_pc_.get(); } 96 PrerenderContents* next_pc() { return next_pc_.get(); }
81 97
82 protected: 98 protected:
83 virtual ~TestPrerenderManager() { 99 virtual ~TestPrerenderManager() {
84 if (next_pc()) { 100 if (next_pc()) {
85 next_pc()->set_final_status( 101 next_pc()->set_final_status(
86 FINAL_STATUS_MANAGER_SHUTDOWN); 102 FINAL_STATUS_MANAGER_SHUTDOWN);
87 } 103 }
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 DummyPrerenderContents* rate_limit_pc = 344 DummyPrerenderContents* rate_limit_pc =
329 new DummyPrerenderContents(prerender_manager_.get(), url1, 345 new DummyPrerenderContents(prerender_manager_.get(), url1,
330 FINAL_STATUS_MANAGER_SHUTDOWN); 346 FINAL_STATUS_MANAGER_SHUTDOWN);
331 prerender_manager_->SetNextPrerenderContents(rate_limit_pc); 347 prerender_manager_->SetNextPrerenderContents(rate_limit_pc);
332 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1)); 348 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1));
333 EXPECT_EQ(null, prerender_manager_->next_pc()); 349 EXPECT_EQ(null, prerender_manager_->next_pc());
334 EXPECT_TRUE(rate_limit_pc->has_started()); 350 EXPECT_TRUE(rate_limit_pc->has_started());
335 prerender_manager_->set_rate_limit_enabled(false); 351 prerender_manager_->set_rate_limit_enabled(false);
336 } 352 }
337 353
354 TEST_F(PrerenderManagerTest, PendingPreloadTest) {
355 GURL url("http://www.google.com/");
356 DummyPrerenderContents* pc =
357 new DummyPrerenderContents(prerender_manager_.get(),
358 url,
359 FINAL_STATUS_USED);
360 prerender_manager_->SetNextPrerenderContents(pc);
361 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
362
363 int child_id;
364 int route_id;
365 ASSERT_TRUE(pc->GetChildId(&child_id));
366 ASSERT_TRUE(pc->GetRouteId(&route_id));
367
368 GURL pending_url("http://news.google.com/");
369
370 prerender_manager_->AddPendingPreload(std::make_pair(child_id, route_id),
371 pending_url,
372 std::vector<GURL>(),
373 url);
374
375 EXPECT_TRUE(prerender_manager_->IsPendingEntry(pending_url));
376 EXPECT_TRUE(pc->has_started());
377 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
378 pc->set_final_status(FINAL_STATUS_USED);
379
380 delete pc;
381 }
382
383 TEST_F(PrerenderManagerTest, PendingPreloadSkippedTest) {
384 GURL url("http://www.google.com/");
385 DummyPrerenderContents* pc =
386 new DummyPrerenderContents(prerender_manager_.get(),
387 url,
388 FINAL_STATUS_TIMED_OUT);
389 prerender_manager_->SetNextPrerenderContents(pc);
390
391 int child_id;
392 int route_id;
393 ASSERT_TRUE(pc->GetChildId(&child_id));
394 ASSERT_TRUE(pc->GetRouteId(&route_id));
395
396 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
397 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age()
398 + base::TimeDelta::FromSeconds(1));
399 // GetEntry will cull old entries which should now include pc.
400 ASSERT_EQ(NULL, prerender_manager_->GetEntry(url));
401
402 GURL pending_url("http://news.google.com/");
403
404 prerender_manager_->AddPendingPreload(std::make_pair(child_id, route_id),
405 pending_url,
406 std::vector<GURL>(),
407 url);
408 EXPECT_FALSE(prerender_manager_->IsPendingEntry(pending_url));
409 }
410
338 } // namespace prerender 411 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_manager.cc ('k') | chrome/browser/prerender/prerender_resource_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698