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

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

Issue 6171007: For prerendering, keep track of all the intermediate redirects, and hook into... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "googleurl/src/gurl.h" 8 #include "googleurl/src/gurl.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
11 namespace { 11 namespace {
12 12
13 class DummyPrerenderContents : public PrerenderContents { 13 class DummyPrerenderContents : public PrerenderContents {
14 public: 14 public:
15 DummyPrerenderContents(PrerenderManager* prerender_manager, const GURL& url) 15 DummyPrerenderContents(PrerenderManager* prerender_manager, const GURL& url)
16 : PrerenderContents(prerender_manager, NULL, url), 16 : PrerenderContents(prerender_manager, NULL, url,
17 std::vector<GURL>()),
18 has_started_(false) {
19 }
20
21 DummyPrerenderContents(PrerenderManager* prerender_manager, const GURL& url,
22 const std::vector<GURL> alias_urls)
23 : PrerenderContents(prerender_manager, NULL, url, alias_urls),
17 has_started_(false) { 24 has_started_(false) {
18 } 25 }
19 26
20 virtual void StartPrerendering() { 27 virtual void StartPrerendering() {
21 has_started_ = true; 28 has_started_ = true;
22 } 29 }
23 30
24 bool has_started() const { return has_started_; } 31 bool has_started() const { return has_started_; }
25 32
26 private: 33 private:
27 bool has_started_; 34 bool has_started_;
28 }; 35 };
29 36
30 class TestPrerenderManager : public PrerenderManager { 37 class TestPrerenderManager : public PrerenderManager {
31 public: 38 public:
32 TestPrerenderManager() 39 TestPrerenderManager()
33 : PrerenderManager(NULL), 40 : PrerenderManager(NULL),
34 time_(base::Time::Now()), 41 time_(base::Time::Now()),
35 next_pc_(NULL) { 42 next_pc_(NULL) {
36 } 43 }
37 44
38 void AdvanceTime(base::TimeDelta delta) { 45 void AdvanceTime(base::TimeDelta delta) {
39 time_ += delta; 46 time_ += delta;
40 } 47 }
41 48
42 void SetNextPrerenderContents(PrerenderContents* pc) { 49 void SetNextPrerenderContents(PrerenderContents* pc) {
43 next_pc_.reset(pc); 50 next_pc_.reset(pc);
44 } 51 }
45 52
53 // Shorthand to add a simple preload with no aliases.
54 void AddSimplePreload(const GURL& url) {
55 AddPreload(url, std::vector<GURL>());
56 }
57
46 PrerenderContents* next_pc() { return next_pc_.get(); } 58 PrerenderContents* next_pc() { return next_pc_.get(); }
47 59
48 protected: 60 protected:
49 virtual ~TestPrerenderManager() { 61 virtual ~TestPrerenderManager() {
50 } 62 }
51 63
52 private: 64 private:
53 virtual base::Time GetCurrentTime() const { 65 virtual base::Time GetCurrentTime() const {
54 return time_; 66 return time_;
55 } 67 }
56 68
57 virtual PrerenderContents* CreatePrerenderContents(const GURL& url) { 69 virtual PrerenderContents* CreatePrerenderContents(
70 const GURL& url,
71 const std::vector<GURL>& alias_urls) {
58 return next_pc_.release(); 72 return next_pc_.release();
59 } 73 }
60 74
61 base::Time time_; 75 base::Time time_;
62 scoped_ptr<PrerenderContents> next_pc_; 76 scoped_ptr<PrerenderContents> next_pc_;
63 }; 77 };
64 78
65 } // namespace 79 } // namespace
66 80
67 class PrerenderManagerTest : public testing::Test { 81 class PrerenderManagerTest : public testing::Test {
68 public: 82 public:
69 PrerenderManagerTest() : prerender_manager_(new TestPrerenderManager()) { 83 PrerenderManagerTest() : prerender_manager_(new TestPrerenderManager()) {
70 } 84 }
71 85
72 protected: 86 protected:
73 scoped_refptr<TestPrerenderManager> prerender_manager_; 87 scoped_refptr<TestPrerenderManager> prerender_manager_;
74 }; 88 };
75 89
76 TEST_F(PrerenderManagerTest, EmptyTest) { 90 TEST_F(PrerenderManagerTest, EmptyTest) {
77 GURL url("http://www.google.com/"); 91 GURL url("http://www.google.com/");
78 EXPECT_FALSE(prerender_manager_->MaybeUsePreloadedPage(NULL, url)); 92 EXPECT_FALSE(prerender_manager_->MaybeUsePreloadedPage(NULL, url));
79 } 93 }
80 94
81 TEST_F(PrerenderManagerTest, FoundTest) { 95 TEST_F(PrerenderManagerTest, FoundTest) {
82 GURL url("http://www.google.com/"); 96 GURL url("http://www.google.com/");
83 DummyPrerenderContents* pc = 97 DummyPrerenderContents* pc =
84 new DummyPrerenderContents(prerender_manager_.get(), url); 98 new DummyPrerenderContents(prerender_manager_.get(), url);
85 prerender_manager_->SetNextPrerenderContents(pc); 99 prerender_manager_->SetNextPrerenderContents(pc);
86 prerender_manager_->AddPreload(url); 100 prerender_manager_->AddSimplePreload(url);
87 EXPECT_TRUE(pc->has_started()); 101 EXPECT_TRUE(pc->has_started());
88 EXPECT_EQ(pc, prerender_manager_->GetEntry(url)); 102 EXPECT_EQ(pc, prerender_manager_->GetEntry(url));
89 delete pc; 103 delete pc;
90 } 104 }
91 105
92 // Make sure that if queue a request, and a second prerender request for the 106 // Make sure that if queue a request, and a second prerender request for the
93 // same URL comes in, that we drop the second request and keep the first one. 107 // same URL comes in, that we drop the second request and keep the first one.
94 TEST_F(PrerenderManagerTest, DropSecondRequestTest) { 108 TEST_F(PrerenderManagerTest, DropSecondRequestTest) {
95 GURL url("http://www.google.com/"); 109 GURL url("http://www.google.com/");
96 DummyPrerenderContents* pc = 110 DummyPrerenderContents* pc =
97 new DummyPrerenderContents(prerender_manager_.get(), url); 111 new DummyPrerenderContents(prerender_manager_.get(), url);
98 DummyPrerenderContents* null = NULL; 112 DummyPrerenderContents* null = NULL;
99 prerender_manager_->SetNextPrerenderContents(pc); 113 prerender_manager_->SetNextPrerenderContents(pc);
100 prerender_manager_->AddPreload(url); 114 prerender_manager_->AddSimplePreload(url);
101 EXPECT_EQ(null, prerender_manager_->next_pc()); 115 EXPECT_EQ(null, prerender_manager_->next_pc());
102 EXPECT_TRUE(pc->has_started()); 116 EXPECT_TRUE(pc->has_started());
103 DummyPrerenderContents* pc1 = 117 DummyPrerenderContents* pc1 =
104 new DummyPrerenderContents(prerender_manager_.get(), url); 118 new DummyPrerenderContents(prerender_manager_.get(), url);
105 prerender_manager_->SetNextPrerenderContents(pc1); 119 prerender_manager_->SetNextPrerenderContents(pc1);
106 prerender_manager_->AddPreload(url); 120 prerender_manager_->AddSimplePreload(url);
107 EXPECT_EQ(pc1, prerender_manager_->next_pc()); 121 EXPECT_EQ(pc1, prerender_manager_->next_pc());
108 EXPECT_FALSE(pc1->has_started()); 122 EXPECT_FALSE(pc1->has_started());
109 EXPECT_EQ(pc, prerender_manager_->GetEntry(url)); 123 EXPECT_EQ(pc, prerender_manager_->GetEntry(url));
110 delete pc; 124 delete pc;
111 } 125 }
112 126
113 // Ensure that we expire a prerendered page after the max. permitted time. 127 // Ensure that we expire a prerendered page after the max. permitted time.
114 TEST_F(PrerenderManagerTest, ExpireTest) { 128 TEST_F(PrerenderManagerTest, ExpireTest) {
115 GURL url("http://www.google.com/"); 129 GURL url("http://www.google.com/");
116 DummyPrerenderContents* pc = 130 DummyPrerenderContents* pc =
117 new DummyPrerenderContents(prerender_manager_.get(), url); 131 new DummyPrerenderContents(prerender_manager_.get(), url);
118 DummyPrerenderContents* null = NULL; 132 DummyPrerenderContents* null = NULL;
119 prerender_manager_->SetNextPrerenderContents(pc); 133 prerender_manager_->SetNextPrerenderContents(pc);
120 prerender_manager_->AddPreload(url); 134 prerender_manager_->AddSimplePreload(url);
121 EXPECT_EQ(null, prerender_manager_->next_pc()); 135 EXPECT_EQ(null, prerender_manager_->next_pc());
122 EXPECT_TRUE(pc->has_started()); 136 EXPECT_TRUE(pc->has_started());
123 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age() 137 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age()
124 + base::TimeDelta::FromSeconds(1)); 138 + base::TimeDelta::FromSeconds(1));
125 EXPECT_EQ(null, prerender_manager_->GetEntry(url)); 139 EXPECT_EQ(null, prerender_manager_->GetEntry(url));
126 } 140 }
127 141
128 // LRU Test. Make sure that if we prerender more than one request, that 142 // LRU Test. Make sure that if we prerender more than one request, that
129 // the oldest one will be dropped. 143 // the oldest one will be dropped.
130 TEST_F(PrerenderManagerTest, DropOldestRequestTest) { 144 TEST_F(PrerenderManagerTest, DropOldestRequestTest) {
131 GURL url("http://www.google.com/"); 145 GURL url("http://www.google.com/");
132 DummyPrerenderContents* pc = 146 DummyPrerenderContents* pc =
133 new DummyPrerenderContents(prerender_manager_.get(), url); 147 new DummyPrerenderContents(prerender_manager_.get(), url);
134 DummyPrerenderContents* null = NULL; 148 DummyPrerenderContents* null = NULL;
135 prerender_manager_->SetNextPrerenderContents(pc); 149 prerender_manager_->SetNextPrerenderContents(pc);
136 prerender_manager_->AddPreload(url); 150 prerender_manager_->AddSimplePreload(url);
137 EXPECT_EQ(null, prerender_manager_->next_pc()); 151 EXPECT_EQ(null, prerender_manager_->next_pc());
138 EXPECT_TRUE(pc->has_started()); 152 EXPECT_TRUE(pc->has_started());
139 GURL url1("http://news.google.com/"); 153 GURL url1("http://news.google.com/");
140 DummyPrerenderContents* pc1 = 154 DummyPrerenderContents* pc1 =
141 new DummyPrerenderContents(prerender_manager_.get(), url1); 155 new DummyPrerenderContents(prerender_manager_.get(), url1);
142 prerender_manager_->SetNextPrerenderContents(pc1); 156 prerender_manager_->SetNextPrerenderContents(pc1);
143 prerender_manager_->AddPreload(url1); 157 prerender_manager_->AddSimplePreload(url1);
144 EXPECT_EQ(null, prerender_manager_->next_pc()); 158 EXPECT_EQ(null, prerender_manager_->next_pc());
145 EXPECT_TRUE(pc1->has_started()); 159 EXPECT_TRUE(pc1->has_started());
146 EXPECT_EQ(null, prerender_manager_->GetEntry(url)); 160 EXPECT_EQ(null, prerender_manager_->GetEntry(url));
147 EXPECT_EQ(pc1, prerender_manager_->GetEntry(url1)); 161 EXPECT_EQ(pc1, prerender_manager_->GetEntry(url1));
148 delete pc1; 162 delete pc1;
149 } 163 }
150 164
151 // Two element prerender test. Ensure that the LRU operates correctly if we 165 // Two element prerender test. Ensure that the LRU operates correctly if we
152 // permit 2 elements to be kept prerendered. 166 // permit 2 elements to be kept prerendered.
153 TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) { 167 TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) {
154 prerender_manager_->set_max_elements(2); 168 prerender_manager_->set_max_elements(2);
155 GURL url("http://www.google.com/"); 169 GURL url("http://www.google.com/");
156 DummyPrerenderContents* pc = 170 DummyPrerenderContents* pc =
157 new DummyPrerenderContents(prerender_manager_.get(), url); 171 new DummyPrerenderContents(prerender_manager_.get(), url);
158 DummyPrerenderContents* null = NULL; 172 DummyPrerenderContents* null = NULL;
159 prerender_manager_->SetNextPrerenderContents(pc); 173 prerender_manager_->SetNextPrerenderContents(pc);
160 prerender_manager_->AddPreload(url); 174 prerender_manager_->AddSimplePreload(url);
161 EXPECT_EQ(null, prerender_manager_->next_pc()); 175 EXPECT_EQ(null, prerender_manager_->next_pc());
162 EXPECT_TRUE(pc->has_started()); 176 EXPECT_TRUE(pc->has_started());
163 GURL url1("http://news.google.com/"); 177 GURL url1("http://news.google.com/");
164 DummyPrerenderContents* pc1 = 178 DummyPrerenderContents* pc1 =
165 new DummyPrerenderContents(prerender_manager_.get(), url1); 179 new DummyPrerenderContents(prerender_manager_.get(), url1);
166 prerender_manager_->SetNextPrerenderContents(pc1); 180 prerender_manager_->SetNextPrerenderContents(pc1);
167 prerender_manager_->AddPreload(url1); 181 prerender_manager_->AddSimplePreload(url1);
168 EXPECT_EQ(null, prerender_manager_->next_pc()); 182 EXPECT_EQ(null, prerender_manager_->next_pc());
169 EXPECT_TRUE(pc1->has_started()); 183 EXPECT_TRUE(pc1->has_started());
170 GURL url2("http://images.google.com/"); 184 GURL url2("http://images.google.com/");
171 DummyPrerenderContents* pc2 = 185 DummyPrerenderContents* pc2 =
172 new DummyPrerenderContents(prerender_manager_.get(), url2); 186 new DummyPrerenderContents(prerender_manager_.get(), url2);
173 prerender_manager_->SetNextPrerenderContents(pc2); 187 prerender_manager_->SetNextPrerenderContents(pc2);
174 prerender_manager_->AddPreload(url2); 188 prerender_manager_->AddSimplePreload(url2);
175 EXPECT_EQ(null, prerender_manager_->next_pc()); 189 EXPECT_EQ(null, prerender_manager_->next_pc());
176 EXPECT_TRUE(pc2->has_started()); 190 EXPECT_TRUE(pc2->has_started());
177 EXPECT_EQ(null, prerender_manager_->GetEntry(url)); 191 EXPECT_EQ(null, prerender_manager_->GetEntry(url));
178 EXPECT_EQ(pc1, prerender_manager_->GetEntry(url1)); 192 EXPECT_EQ(pc1, prerender_manager_->GetEntry(url1));
179 EXPECT_EQ(pc2, prerender_manager_->GetEntry(url2)); 193 EXPECT_EQ(pc2, prerender_manager_->GetEntry(url2));
180 delete pc1; 194 delete pc1;
181 delete pc2; 195 delete pc2;
182 } 196 }
197
198 TEST_F(PrerenderManagerTest, AliasURLTest) {
199 GURL url("http://www.google.com/");
200 GURL alias_url1("http://www.google.com/index.html");
201 GURL alias_url2("http://google.com/");
202 GURL not_an_alias_url("http://google.com/index.html");
203 std::vector<GURL> alias_urls;
204 alias_urls.push_back(alias_url1);
205 alias_urls.push_back(alias_url2);
206 DummyPrerenderContents* pc =
207 new DummyPrerenderContents(prerender_manager_.get(), url, alias_urls);
208 prerender_manager_->SetNextPrerenderContents(pc);
209 prerender_manager_->AddSimplePreload(url);
210 EXPECT_EQ(NULL, prerender_manager_->GetEntry(not_an_alias_url));
211 EXPECT_EQ(pc, prerender_manager_->GetEntry(alias_url1));
212 prerender_manager_->SetNextPrerenderContents(pc);
213 prerender_manager_->AddSimplePreload(url);
214 EXPECT_EQ(pc, prerender_manager_->GetEntry(alias_url2));
215 prerender_manager_->SetNextPrerenderContents(pc);
216 prerender_manager_->AddSimplePreload(url);
217 EXPECT_EQ(pc, prerender_manager_->GetEntry(url));
218 delete pc;
219 }
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