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

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

Issue 6685012: Give prerendering RVH's RenderWidgetHostViews. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: --CompositingStuff Created 9 years, 8 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/memory/scoped_vector.h"
5 #include "base/time.h" 6 #include "base/time.h"
6 #include "chrome/browser/prerender/prerender_contents.h" 7 #include "chrome/browser/prerender/prerender_contents.h"
7 #include "chrome/browser/prerender/prerender_manager.h" 8 #include "chrome/browser/prerender/prerender_manager.h"
8 #include "content/browser/browser_thread.h" 9 #include "content/browser/browser_thread.h"
9 #include "content/browser/renderer_host/render_view_host.h" 10 #include "content/browser/renderer_host/render_view_host.h"
10 #include "content/browser/renderer_host/render_process_host.h" 11 #include "content/browser/renderer_host/render_process_host.h"
11 #include "googleurl/src/gurl.h" 12 #include "googleurl/src/gurl.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 namespace prerender { 15 namespace prerender {
15 16
16 namespace { 17 namespace {
17 18
18 class DummyPrerenderContents : public PrerenderContents { 19 class DummyPrerenderContents : public PrerenderContents {
19 public: 20 public:
20 DummyPrerenderContents(PrerenderManager* prerender_manager, 21 DummyPrerenderContents(PrerenderManager* prerender_manager,
21 const GURL& url, 22 const GURL& url,
22 FinalStatus expected_final_status)
23 : PrerenderContents(prerender_manager, NULL, url,
24 std::vector<GURL>(), GURL()),
25 has_started_(false),
26 expected_final_status_(expected_final_status) {
27 }
28
29 DummyPrerenderContents(PrerenderManager* prerender_manager,
30 const GURL& url,
31 const std::vector<GURL> alias_urls, 23 const std::vector<GURL> alias_urls,
32 FinalStatus expected_final_status) 24 FinalStatus expected_final_status)
33 : PrerenderContents(prerender_manager, NULL, url, alias_urls, GURL()), 25 : PrerenderContents(prerender_manager, NULL, url, alias_urls, GURL()),
34 has_started_(false), 26 has_started_(false),
35 expected_final_status_(expected_final_status) { 27 expected_final_status_(expected_final_status) {
36 } 28 }
37 29
38 virtual ~DummyPrerenderContents() { 30 virtual ~DummyPrerenderContents() {
39 EXPECT_EQ(expected_final_status_, final_status()); 31 EXPECT_EQ(expected_final_status_, final_status());
40 } 32 }
41 33
42 virtual void StartPrerendering() OVERRIDE { 34 virtual void StartPrerendering(
35 const RenderViewHost* source_render_view_host) OVERRIDE {
43 has_started_ = true; 36 has_started_ = true;
44 } 37 }
45 38
46 virtual bool GetChildId(int* child_id) const OVERRIDE { 39 virtual bool GetChildId(int* child_id) const OVERRIDE {
47 *child_id = 0; 40 *child_id = 0;
48 return true; 41 return true;
49 } 42 }
50 43
51 virtual bool GetRouteId(int* route_id) const OVERRIDE { 44 virtual bool GetRouteId(int* route_id) const OVERRIDE {
52 *route_id = 0; 45 *route_id = 0;
53 return true; 46 return true;
54 } 47 }
55 48
56 bool has_started() const { return has_started_; } 49 bool has_started() const { return has_started_; }
57 50
51 FinalStatus expected_final_status() const { return expected_final_status_; }
52
58 private: 53 private:
59 bool has_started_; 54 bool has_started_;
60 FinalStatus expected_final_status_; 55 FinalStatus expected_final_status_;
61 }; 56 };
62 57
63 class TestPrerenderManager : public PrerenderManager { 58 class TestPrerenderManager : public PrerenderManager {
64 public: 59 public:
65 TestPrerenderManager() 60 TestPrerenderManager()
66 : PrerenderManager(NULL), 61 : PrerenderManager(NULL),
67 time_(base::Time::Now()), 62 time_(base::Time::Now()),
68 time_ticks_(base::TimeTicks::Now()), 63 time_ticks_(base::TimeTicks::Now()),
69 next_pc_(NULL) { 64 next_pc_(NULL) {
70 rate_limit_enabled_ = false; 65 rate_limit_enabled_ = false;
71 } 66 }
72 67
73 void AdvanceTime(base::TimeDelta delta) { 68 void AdvanceTime(base::TimeDelta delta) {
74 time_ += delta; 69 time_ += delta;
75 } 70 }
76 71
77 void AdvanceTimeTicks(base::TimeDelta delta) { 72 void AdvanceTimeTicks(base::TimeDelta delta) {
78 time_ticks_ += delta; 73 time_ticks_ += delta;
79 } 74 }
80 75
81 void SetNextPrerenderContents(PrerenderContents* pc) { 76 DummyPrerenderContents* CreateNextPrerenderContents(
82 next_pc_.reset(pc); 77 const GURL& url,
78 FinalStatus expected_final_status) {
79 DummyPrerenderContents* pc =
80 new DummyPrerenderContents(this, url, std::vector<GURL>(),
81 expected_final_status);
82 SetNextPrerenderContents(pc);
83 return pc;
84 }
85
86 DummyPrerenderContents* CreateNextPrerenderContents(
87 const GURL& url,
88 const std::vector<GURL> alias_urls,
89 FinalStatus expected_final_status) {
90 DummyPrerenderContents* pc =
91 new DummyPrerenderContents(this, url, alias_urls,
92 expected_final_status);
93 SetNextPrerenderContents(pc);
94 return pc;
83 } 95 }
84 96
85 // Shorthand to add a simple preload with no aliases. 97 // Shorthand to add a simple preload with no aliases.
86 bool AddSimplePreload(const GURL& url) { 98 bool AddSimplePreload(const GURL& url) {
87 return AddPreload(url, std::vector<GURL>(), GURL()); 99 return AddPreload(std::pair<int, int>(-1, -1), url, std::vector<GURL>(),
100 GURL());
88 } 101 }
89 102
90 bool IsPendingEntry(const GURL& url) { 103 bool IsPendingEntry(const GURL& url) {
91 return (PrerenderManager::FindPendingEntry(url) != NULL); 104 return (PrerenderManager::FindPendingEntry(url) != NULL);
92 } 105 }
93 106
94 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; } 107 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; }
95 108
109 // Shorthand to add a simple preload with aliases.
110 bool AddSimplePreloadWithAliases(const GURL& url,
111 const std::vector<GURL>& alias_urls) {
112 return AddPreload(std::pair<int, int>(-1, -1), url, alias_urls, GURL());
113 }
114
96 PrerenderContents* next_pc() { return next_pc_.get(); } 115 PrerenderContents* next_pc() { return next_pc_.get(); }
97 116
98 protected: 117 protected:
99 virtual ~TestPrerenderManager() { 118 virtual ~TestPrerenderManager() {
100 if (next_pc()) { 119 if (next_pc()) {
101 next_pc()->set_final_status( 120 next_pc()->set_final_status(
102 FINAL_STATUS_MANAGER_SHUTDOWN); 121 FINAL_STATUS_MANAGER_SHUTDOWN);
103 } 122 }
123 // Set the final status for all PrerenderContents with an expected final
124 // status of FINAL_STATUS_USED. These values are normally set when the
125 // prerendered RVH is swapped into a tab, which doesn't happen in these
126 // unit tests.
127 for (ScopedVector<PrerenderContents>::iterator it = used_pcs_.begin();
128 it != used_pcs_.end(); ++it) {
129 (*it)->set_final_status(FINAL_STATUS_USED);
130 }
104 } 131 }
105 132
106 private: 133 private:
134 void SetNextPrerenderContents(DummyPrerenderContents* pc) {
135 DCHECK(!next_pc_.get());
136 next_pc_.reset(pc);
137 if (pc->expected_final_status() == FINAL_STATUS_USED)
138 used_pcs_.push_back(pc);
139 }
140
107 virtual base::Time GetCurrentTime() const OVERRIDE { 141 virtual base::Time GetCurrentTime() const OVERRIDE {
108 return time_; 142 return time_;
109 } 143 }
110 144
111 virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE { 145 virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE {
112 return time_ticks_; 146 return time_ticks_;
113 } 147 }
114 148
115 virtual PrerenderContents* CreatePrerenderContents( 149 virtual PrerenderContents* CreatePrerenderContents(
116 const GURL& url, 150 const GURL& url,
117 const std::vector<GURL>& alias_urls, 151 const std::vector<GURL>& alias_urls,
118 const GURL& referrer) OVERRIDE { 152 const GURL& referrer) OVERRIDE {
119 DCHECK(next_pc_.get()); 153 DCHECK(next_pc_.get());
120 return next_pc_.release(); 154 return next_pc_.release();
121 } 155 }
122 156
123 base::Time time_; 157 base::Time time_;
124 base::TimeTicks time_ticks_; 158 base::TimeTicks time_ticks_;
125 scoped_ptr<PrerenderContents> next_pc_; 159 scoped_ptr<PrerenderContents> next_pc_;
160 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED,
161 // tracked so they will be automatically deleted.
162 ScopedVector<PrerenderContents> used_pcs_;
126 }; 163 };
127 164
128 } // namespace 165 } // namespace
129 166
130 class PrerenderManagerTest : public testing::Test { 167 class PrerenderManagerTest : public testing::Test {
131 public: 168 public:
132 PrerenderManagerTest() : prerender_manager_(new TestPrerenderManager()), 169 PrerenderManagerTest() : prerender_manager_(new TestPrerenderManager()),
133 ui_thread_(BrowserThread::UI, &message_loop_) { 170 ui_thread_(BrowserThread::UI, &message_loop_) {
134 } 171 }
135 172
136 protected: 173 protected:
137 scoped_refptr<TestPrerenderManager> prerender_manager_; 174 scoped_refptr<TestPrerenderManager> prerender_manager_;
138 175
139 private: 176 private:
140 // Needed to pass PrerenderManager's DCHECKs. 177 // Needed to pass PrerenderManager's DCHECKs.
141 MessageLoop message_loop_; 178 MessageLoop message_loop_;
142 BrowserThread ui_thread_; 179 BrowserThread ui_thread_;
143 }; 180 };
144 181
145 TEST_F(PrerenderManagerTest, EmptyTest) { 182 TEST_F(PrerenderManagerTest, EmptyTest) {
146 GURL url("http://www.google.com/"); 183 GURL url("http://www.google.com/");
147 EXPECT_FALSE(prerender_manager_->MaybeUsePreloadedPage(NULL, url)); 184 EXPECT_FALSE(prerender_manager_->MaybeUsePreloadedPage(NULL, url));
148 } 185 }
149 186
150 TEST_F(PrerenderManagerTest, FoundTest) { 187 TEST_F(PrerenderManagerTest, FoundTest) {
151 GURL url("http://www.google.com/"); 188 GURL url("http://www.google.com/");
152 DummyPrerenderContents* pc = 189 DummyPrerenderContents* pc =
153 new DummyPrerenderContents(prerender_manager_.get(), 190 prerender_manager_->CreateNextPrerenderContents(
154 url, 191 url,
155 FINAL_STATUS_USED); 192 FINAL_STATUS_USED);
156 prerender_manager_->SetNextPrerenderContents(pc);
157 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 193 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
158 EXPECT_TRUE(pc->has_started()); 194 EXPECT_TRUE(pc->has_started());
159 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 195 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
160 pc->set_final_status(FINAL_STATUS_USED);
161 delete pc;
162 } 196 }
163 197
164 // Make sure that if queue a request, and a second prerender request for the 198 // Make sure that if queue a request, and a second prerender request for the
165 // same URL comes in, that we drop the second request and keep the first one. 199 // same URL comes in, that we drop the second request and keep the first one.
166 TEST_F(PrerenderManagerTest, DropSecondRequestTest) { 200 TEST_F(PrerenderManagerTest, DropSecondRequestTest) {
167 GURL url("http://www.google.com/"); 201 GURL url("http://www.google.com/");
168 DummyPrerenderContents* pc = 202 DummyPrerenderContents* pc =
169 new DummyPrerenderContents(prerender_manager_.get(), url, 203 prerender_manager_->CreateNextPrerenderContents(
170 FINAL_STATUS_USED); 204 url,
205 FINAL_STATUS_USED);
171 DummyPrerenderContents* null = NULL; 206 DummyPrerenderContents* null = NULL;
172 prerender_manager_->SetNextPrerenderContents(pc);
173 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 207 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
174 EXPECT_EQ(null, prerender_manager_->next_pc()); 208 EXPECT_EQ(null, prerender_manager_->next_pc());
175 EXPECT_TRUE(pc->has_started()); 209 EXPECT_TRUE(pc->has_started());
210
176 DummyPrerenderContents* pc1 = 211 DummyPrerenderContents* pc1 =
177 new DummyPrerenderContents( 212 prerender_manager_->CreateNextPrerenderContents(
178 prerender_manager_.get(), url, 213 url,
179 FINAL_STATUS_MANAGER_SHUTDOWN); 214 FINAL_STATUS_MANAGER_SHUTDOWN);
180 prerender_manager_->SetNextPrerenderContents(pc1);
181 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url)); 215 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url));
182 EXPECT_EQ(pc1, prerender_manager_->next_pc()); 216 EXPECT_EQ(pc1, prerender_manager_->next_pc());
183 EXPECT_FALSE(pc1->has_started()); 217 EXPECT_FALSE(pc1->has_started());
218
184 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 219 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
185 pc->set_final_status(FINAL_STATUS_USED);
186 delete pc;
187 } 220 }
188 221
189 // Ensure that we expire a prerendered page after the max. permitted time. 222 // Ensure that we expire a prerendered page after the max. permitted time.
190 TEST_F(PrerenderManagerTest, ExpireTest) { 223 TEST_F(PrerenderManagerTest, ExpireTest) {
191 GURL url("http://www.google.com/"); 224 GURL url("http://www.google.com/");
192 DummyPrerenderContents* pc = 225 DummyPrerenderContents* pc =
193 new DummyPrerenderContents(prerender_manager_.get(), url, 226 prerender_manager_->CreateNextPrerenderContents(
194 FINAL_STATUS_TIMED_OUT); 227 url,
228 FINAL_STATUS_TIMED_OUT);
195 DummyPrerenderContents* null = NULL; 229 DummyPrerenderContents* null = NULL;
196 prerender_manager_->SetNextPrerenderContents(pc);
197 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 230 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
198 EXPECT_EQ(null, prerender_manager_->next_pc()); 231 EXPECT_EQ(null, prerender_manager_->next_pc());
199 EXPECT_TRUE(pc->has_started()); 232 EXPECT_TRUE(pc->has_started());
200 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age() 233 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age()
201 + base::TimeDelta::FromSeconds(1)); 234 + base::TimeDelta::FromSeconds(1));
202 ASSERT_EQ(null, prerender_manager_->GetEntry(url)); 235 ASSERT_EQ(null, prerender_manager_->GetEntry(url));
203 } 236 }
204 237
205 // LRU Test. Make sure that if we prerender more than one request, that 238 // LRU Test. Make sure that if we prerender more than one request, that
206 // the oldest one will be dropped. 239 // the oldest one will be dropped.
207 TEST_F(PrerenderManagerTest, DropOldestRequestTest) { 240 TEST_F(PrerenderManagerTest, DropOldestRequestTest) {
208 GURL url("http://www.google.com/"); 241 GURL url("http://www.google.com/");
209 DummyPrerenderContents* pc = 242 DummyPrerenderContents* pc =
210 new DummyPrerenderContents(prerender_manager_.get(), url, 243 prerender_manager_->CreateNextPrerenderContents(
211 FINAL_STATUS_EVICTED); 244 url,
245 FINAL_STATUS_EVICTED);
212 DummyPrerenderContents* null = NULL; 246 DummyPrerenderContents* null = NULL;
213 prerender_manager_->SetNextPrerenderContents(pc);
214 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 247 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
215 EXPECT_EQ(null, prerender_manager_->next_pc()); 248 EXPECT_EQ(null, prerender_manager_->next_pc());
216 EXPECT_TRUE(pc->has_started()); 249 EXPECT_TRUE(pc->has_started());
250
217 GURL url1("http://news.google.com/"); 251 GURL url1("http://news.google.com/");
218 DummyPrerenderContents* pc1 = 252 DummyPrerenderContents* pc1 =
219 new DummyPrerenderContents(prerender_manager_.get(), url1, 253 prerender_manager_->CreateNextPrerenderContents(
220 FINAL_STATUS_USED); 254 url1,
221 prerender_manager_->SetNextPrerenderContents(pc1); 255 FINAL_STATUS_USED);
222 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1)); 256 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1));
223 EXPECT_EQ(null, prerender_manager_->next_pc()); 257 EXPECT_EQ(null, prerender_manager_->next_pc());
224 EXPECT_TRUE(pc1->has_started()); 258 EXPECT_TRUE(pc1->has_started());
259
225 ASSERT_EQ(null, prerender_manager_->GetEntry(url)); 260 ASSERT_EQ(null, prerender_manager_->GetEntry(url));
226 ASSERT_EQ(pc1, prerender_manager_->GetEntry(url1)); 261 ASSERT_EQ(pc1, prerender_manager_->GetEntry(url1));
227 pc1->set_final_status(FINAL_STATUS_USED);
228 delete pc1;
229 } 262 }
230 263
231 // Two element prerender test. Ensure that the LRU operates correctly if we 264 // Two element prerender test. Ensure that the LRU operates correctly if we
232 // permit 2 elements to be kept prerendered. 265 // permit 2 elements to be kept prerendered.
233 TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) { 266 TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) {
234 prerender_manager_->set_max_elements(2); 267 prerender_manager_->set_max_elements(2);
235 GURL url("http://www.google.com/"); 268 GURL url("http://www.google.com/");
236 DummyPrerenderContents* pc = 269 DummyPrerenderContents* pc =
237 new DummyPrerenderContents(prerender_manager_.get(), url, 270 prerender_manager_->CreateNextPrerenderContents(
238 FINAL_STATUS_EVICTED); 271 url,
272 FINAL_STATUS_EVICTED);
239 DummyPrerenderContents* null = NULL; 273 DummyPrerenderContents* null = NULL;
240 prerender_manager_->SetNextPrerenderContents(pc);
241 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 274 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
242 EXPECT_EQ(null, prerender_manager_->next_pc()); 275 EXPECT_EQ(null, prerender_manager_->next_pc());
243 EXPECT_TRUE(pc->has_started()); 276 EXPECT_TRUE(pc->has_started());
277
244 GURL url1("http://news.google.com/"); 278 GURL url1("http://news.google.com/");
245 DummyPrerenderContents* pc1 = 279 DummyPrerenderContents* pc1 =
246 new DummyPrerenderContents(prerender_manager_.get(), url1, 280 prerender_manager_->CreateNextPrerenderContents(
247 FINAL_STATUS_USED); 281 url1,
248 prerender_manager_->SetNextPrerenderContents(pc1); 282 FINAL_STATUS_USED);
249 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1)); 283 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1));
250 EXPECT_EQ(null, prerender_manager_->next_pc()); 284 EXPECT_EQ(null, prerender_manager_->next_pc());
251 EXPECT_TRUE(pc1->has_started()); 285 EXPECT_TRUE(pc1->has_started());
286
252 GURL url2("http://images.google.com/"); 287 GURL url2("http://images.google.com/");
253 DummyPrerenderContents* pc2 = 288 DummyPrerenderContents* pc2 =
254 new DummyPrerenderContents(prerender_manager_.get(), url2, 289 prerender_manager_->CreateNextPrerenderContents(
255 FINAL_STATUS_USED); 290 url2,
256 prerender_manager_->SetNextPrerenderContents(pc2); 291 FINAL_STATUS_USED);
257 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url2)); 292 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url2));
258 EXPECT_EQ(null, prerender_manager_->next_pc()); 293 EXPECT_EQ(null, prerender_manager_->next_pc());
259 EXPECT_TRUE(pc2->has_started()); 294 EXPECT_TRUE(pc2->has_started());
295
260 ASSERT_EQ(null, prerender_manager_->GetEntry(url)); 296 ASSERT_EQ(null, prerender_manager_->GetEntry(url));
261 ASSERT_EQ(pc1, prerender_manager_->GetEntry(url1)); 297 ASSERT_EQ(pc1, prerender_manager_->GetEntry(url1));
262 ASSERT_EQ(pc2, prerender_manager_->GetEntry(url2)); 298 ASSERT_EQ(pc2, prerender_manager_->GetEntry(url2));
263 pc1->set_final_status(FINAL_STATUS_USED);
264 delete pc1;
265 pc2->set_final_status(FINAL_STATUS_USED);
266 delete pc2;
267 } 299 }
268 300
269 TEST_F(PrerenderManagerTest, AliasURLTest) { 301 TEST_F(PrerenderManagerTest, AliasURLTest) {
270 GURL url("http://www.google.com/"); 302 GURL url("http://www.google.com/");
271 GURL alias_url1("http://www.google.com/index.html"); 303 GURL alias_url1("http://www.google.com/index.html");
272 GURL alias_url2("http://google.com/"); 304 GURL alias_url2("http://google.com/");
273 GURL not_an_alias_url("http://google.com/index.html"); 305 GURL not_an_alias_url("http://google.com/index.html");
274 std::vector<GURL> alias_urls; 306 std::vector<GURL> alias_urls;
275 alias_urls.push_back(alias_url1); 307 alias_urls.push_back(alias_url1);
276 alias_urls.push_back(alias_url2); 308 alias_urls.push_back(alias_url2);
309
310 // Test that all of the aliases work, but nont_an_alias_url does not.
277 DummyPrerenderContents* pc = 311 DummyPrerenderContents* pc =
278 new DummyPrerenderContents(prerender_manager_.get(), url, alias_urls, 312 prerender_manager_->CreateNextPrerenderContents(
279 FINAL_STATUS_USED); 313 url, alias_urls, FINAL_STATUS_USED);
280 // Test that all of the aliases work, but nont_an_alias_url does not. 314 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls));
281 prerender_manager_->SetNextPrerenderContents(pc);
282 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL()));
283 ASSERT_EQ(NULL, prerender_manager_->GetEntry(not_an_alias_url)); 315 ASSERT_EQ(NULL, prerender_manager_->GetEntry(not_an_alias_url));
284 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url1)); 316 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url1));
285 prerender_manager_->SetNextPrerenderContents(pc); 317 pc = prerender_manager_->CreateNextPrerenderContents(
286 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); 318 url, alias_urls, FINAL_STATUS_USED);
319 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls));
287 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url2)); 320 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url2));
288 prerender_manager_->SetNextPrerenderContents(pc); 321 pc = prerender_manager_->CreateNextPrerenderContents(
289 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); 322 url, alias_urls, FINAL_STATUS_USED);
323 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls));
290 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 324 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
291 325
292 // Test that alias URLs can not be added. 326 // Test that alias URLs can not be added.
293 prerender_manager_->SetNextPrerenderContents(pc); 327 pc = prerender_manager_->CreateNextPrerenderContents(
294 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); 328 url, alias_urls, FINAL_STATUS_USED);
329 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls));
295 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url)); 330 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url));
296 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url1)); 331 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url1));
297 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url2)); 332 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url2));
298 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 333 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
299
300 pc->set_final_status(FINAL_STATUS_USED);
301 delete pc;
302 } 334 }
303 335
304 // Ensure that we ignore prerender requests within the rate limit. 336 // Ensure that we ignore prerender requests within the rate limit.
305 TEST_F(PrerenderManagerTest, RateLimitInWindowTest) { 337 TEST_F(PrerenderManagerTest, RateLimitInWindowTest) {
306 GURL url("http://www.google.com/"); 338 GURL url("http://www.google.com/");
307 DummyPrerenderContents* pc = 339 DummyPrerenderContents* pc =
308 new DummyPrerenderContents(prerender_manager_.get(), url, 340 prerender_manager_->CreateNextPrerenderContents(
309 FINAL_STATUS_MANAGER_SHUTDOWN); 341 url,
342 FINAL_STATUS_MANAGER_SHUTDOWN);
310 DummyPrerenderContents* null = NULL; 343 DummyPrerenderContents* null = NULL;
311 prerender_manager_->SetNextPrerenderContents(pc);
312 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 344 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
313 EXPECT_EQ(null, prerender_manager_->next_pc()); 345 EXPECT_EQ(null, prerender_manager_->next_pc());
314 EXPECT_TRUE(pc->has_started()); 346 EXPECT_TRUE(pc->has_started());
315 347
316 prerender_manager_->set_rate_limit_enabled(true); 348 prerender_manager_->set_rate_limit_enabled(true);
317 prerender_manager_->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(1)); 349 prerender_manager_->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(1));
318 350
319 GURL url1("http://news.google.com/"); 351 GURL url1("http://news.google.com/");
320 DummyPrerenderContents* rate_limit_pc = 352 prerender_manager_->CreateNextPrerenderContents(
321 new DummyPrerenderContents(prerender_manager_.get(), url1, 353 url,
322 FINAL_STATUS_MANAGER_SHUTDOWN); 354 FINAL_STATUS_MANAGER_SHUTDOWN);
323 prerender_manager_->SetNextPrerenderContents(rate_limit_pc);
324 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url1)); 355 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url1));
325 prerender_manager_->set_rate_limit_enabled(false); 356 prerender_manager_->set_rate_limit_enabled(false);
326 } 357 }
327 358
328 // Ensure that we don't ignore prerender requests outside the rate limit. 359 // Ensure that we don't ignore prerender requests outside the rate limit.
329 TEST_F(PrerenderManagerTest, RateLimitOutsideWindowTest) { 360 TEST_F(PrerenderManagerTest, RateLimitOutsideWindowTest) {
330 GURL url("http://www.google.com/"); 361 GURL url("http://www.google.com/");
331 DummyPrerenderContents* pc = 362 DummyPrerenderContents* pc =
332 new DummyPrerenderContents(prerender_manager_.get(), url, 363 prerender_manager_->CreateNextPrerenderContents(
333 FINAL_STATUS_EVICTED); 364 url,
365 FINAL_STATUS_EVICTED);
334 DummyPrerenderContents* null = NULL; 366 DummyPrerenderContents* null = NULL;
335 prerender_manager_->SetNextPrerenderContents(pc);
336 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 367 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
337 EXPECT_EQ(null, prerender_manager_->next_pc()); 368 EXPECT_EQ(null, prerender_manager_->next_pc());
338 EXPECT_TRUE(pc->has_started()); 369 EXPECT_TRUE(pc->has_started());
339 370
340 prerender_manager_->set_rate_limit_enabled(true); 371 prerender_manager_->set_rate_limit_enabled(true);
341 prerender_manager_->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(2000)); 372 prerender_manager_->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(2000));
342 373
343 GURL url1("http://news.google.com/"); 374 GURL url1("http://news.google.com/");
344 DummyPrerenderContents* rate_limit_pc = 375 DummyPrerenderContents* rate_limit_pc =
345 new DummyPrerenderContents(prerender_manager_.get(), url1, 376 prerender_manager_->CreateNextPrerenderContents(
346 FINAL_STATUS_MANAGER_SHUTDOWN); 377 url1,
347 prerender_manager_->SetNextPrerenderContents(rate_limit_pc); 378 FINAL_STATUS_MANAGER_SHUTDOWN);
348 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1)); 379 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1));
349 EXPECT_EQ(null, prerender_manager_->next_pc()); 380 EXPECT_EQ(null, prerender_manager_->next_pc());
350 EXPECT_TRUE(rate_limit_pc->has_started()); 381 EXPECT_TRUE(rate_limit_pc->has_started());
351 prerender_manager_->set_rate_limit_enabled(false); 382 prerender_manager_->set_rate_limit_enabled(false);
352 } 383 }
353 384
354 TEST_F(PrerenderManagerTest, PendingPreloadTest) { 385 TEST_F(PrerenderManagerTest, PendingPreloadTest) {
355 GURL url("http://www.google.com/"); 386 GURL url("http://www.google.com/");
356 DummyPrerenderContents* pc = 387 DummyPrerenderContents* pc =
357 new DummyPrerenderContents(prerender_manager_.get(), 388 prerender_manager_->CreateNextPrerenderContents(
358 url, 389 url,
359 FINAL_STATUS_USED); 390 FINAL_STATUS_USED);
360 prerender_manager_->SetNextPrerenderContents(pc);
361 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 391 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
362 392
363 int child_id; 393 int child_id;
364 int route_id; 394 int route_id;
365 ASSERT_TRUE(pc->GetChildId(&child_id)); 395 ASSERT_TRUE(pc->GetChildId(&child_id));
366 ASSERT_TRUE(pc->GetRouteId(&route_id)); 396 ASSERT_TRUE(pc->GetRouteId(&route_id));
367 397
368 GURL pending_url("http://news.google.com/"); 398 GURL pending_url("http://news.google.com/");
369 399
370 prerender_manager_->AddPendingPreload(std::make_pair(child_id, route_id), 400 prerender_manager_->AddPendingPreload(std::make_pair(child_id, route_id),
371 pending_url, 401 pending_url,
372 std::vector<GURL>(), 402 std::vector<GURL>(),
373 url); 403 url);
374 404
375 EXPECT_TRUE(prerender_manager_->IsPendingEntry(pending_url)); 405 EXPECT_TRUE(prerender_manager_->IsPendingEntry(pending_url));
376 EXPECT_TRUE(pc->has_started()); 406 EXPECT_TRUE(pc->has_started());
377 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 407 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
378 pc->set_final_status(FINAL_STATUS_USED);
379
380 delete pc;
381 } 408 }
382 409
383 TEST_F(PrerenderManagerTest, PendingPreloadSkippedTest) { 410 TEST_F(PrerenderManagerTest, PendingPreloadSkippedTest) {
384 GURL url("http://www.google.com/"); 411 GURL url("http://www.google.com/");
385 DummyPrerenderContents* pc = 412 DummyPrerenderContents* pc =
386 new DummyPrerenderContents(prerender_manager_.get(), 413 prerender_manager_->CreateNextPrerenderContents(
387 url, 414 url,
388 FINAL_STATUS_TIMED_OUT); 415 FINAL_STATUS_TIMED_OUT);
389 prerender_manager_->SetNextPrerenderContents(pc);
390 416
391 int child_id; 417 int child_id;
392 int route_id; 418 int route_id;
393 ASSERT_TRUE(pc->GetChildId(&child_id)); 419 ASSERT_TRUE(pc->GetChildId(&child_id));
394 ASSERT_TRUE(pc->GetRouteId(&route_id)); 420 ASSERT_TRUE(pc->GetRouteId(&route_id));
395 421
396 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); 422 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
397 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age() 423 prerender_manager_->AdvanceTime(prerender_manager_->max_prerender_age()
398 + base::TimeDelta::FromSeconds(1)); 424 + base::TimeDelta::FromSeconds(1));
399 // GetEntry will cull old entries which should now include pc. 425 // GetEntry will cull old entries which should now include pc.
(...skipping 19 matching lines...) Expand all
419 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( 445 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL(
420 GURL("http://www.google.com/url?sadf=test&blah=blahblahblah"), &result)); 446 GURL("http://www.google.com/url?sadf=test&blah=blahblahblah"), &result));
421 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( 447 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL(
422 GURL("http://www.google.com/?url=INVALIDurlsAREsoMUCHfun.com"), &result)); 448 GURL("http://www.google.com/?url=INVALIDurlsAREsoMUCHfun.com"), &result));
423 EXPECT_TRUE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( 449 EXPECT_TRUE(PrerenderManager::MaybeGetQueryStringBasedAliasURL(
424 GURL("http://www.google.com/?url=http://validURLSareGREAT.com"), 450 GURL("http://www.google.com/?url=http://validURLSareGREAT.com"),
425 &result)); 451 &result));
426 ASSERT_EQ(GURL("http://validURLSareGREAT.com").spec(), result.spec()); 452 ASSERT_EQ(GURL("http://validURLSareGREAT.com").spec(), result.spec());
427 } 453 }
428 454
455 // Tests that prerendering is cancelled when the source render view does not
456 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be
457 // triggered.
458 TEST_F(PrerenderManagerTest, SourceRenderViewClosed) {
459 GURL url("http://www.google.com/");
460 prerender_manager_->CreateNextPrerenderContents(
461 url,
462 FINAL_STATUS_MANAGER_SHUTDOWN);
463 EXPECT_FALSE(prerender_manager_->AddPreload(
464 std::pair<int, int>(100, 100), url, std::vector<GURL>(), GURL()));
465 }
466
429 } // namespace prerender 467 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698