| OLD | NEW |
| 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/memory/scoped_vector.h" |
| 6 #include "base/time.h" | 6 #include "base/time.h" |
| 7 #include "chrome/browser/prerender/prerender_contents.h" | 7 #include "chrome/browser/prerender/prerender_contents.h" |
| 8 #include "chrome/browser/prerender/prerender_manager.h" | 8 #include "chrome/browser/prerender/prerender_manager.h" |
| 9 #include "chrome/browser/prerender/prerender_origin.h" |
| 9 #include "chrome/test/testing_browser_process.h" | 10 #include "chrome/test/testing_browser_process.h" |
| 10 #include "content/browser/browser_thread.h" | 11 #include "content/browser/browser_thread.h" |
| 11 #include "content/browser/renderer_host/render_view_host.h" | 12 #include "content/browser/renderer_host/render_view_host.h" |
| 12 #include "content/browser/renderer_host/render_process_host.h" | 13 #include "content/browser/renderer_host/render_process_host.h" |
| 13 #include "googleurl/src/gurl.h" | 14 #include "googleurl/src/gurl.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 16 |
| 16 namespace prerender { | 17 namespace prerender { |
| 17 | 18 |
| 18 namespace { | 19 namespace { |
| 19 | 20 |
| 20 class DummyPrerenderContents : public PrerenderContents { | 21 class DummyPrerenderContents : public PrerenderContents { |
| 21 public: | 22 public: |
| 22 DummyPrerenderContents(PrerenderManager* prerender_manager, | 23 DummyPrerenderContents(PrerenderManager* prerender_manager, |
| 23 PrerenderTracker* prerender_tracker, | 24 PrerenderTracker* prerender_tracker, |
| 24 const GURL& url, | 25 const GURL& url, |
| 25 FinalStatus expected_final_status) | 26 FinalStatus expected_final_status) |
| 26 : PrerenderContents(prerender_manager, prerender_tracker, NULL, url, | 27 : PrerenderContents(prerender_manager, prerender_tracker, NULL, url, |
| 27 GURL()), | 28 GURL(), ORIGIN_LINK_REL_PRERENDER), |
| 28 has_started_(false), | 29 has_started_(false), |
| 29 expected_final_status_(expected_final_status) { | 30 expected_final_status_(expected_final_status) { |
| 30 } | 31 } |
| 31 | 32 |
| 32 virtual ~DummyPrerenderContents() { | 33 virtual ~DummyPrerenderContents() { |
| 33 EXPECT_EQ(expected_final_status_, final_status()); | 34 EXPECT_EQ(expected_final_status_, final_status()); |
| 34 } | 35 } |
| 35 | 36 |
| 36 virtual void StartPrerendering( | 37 virtual void StartPrerendering( |
| 37 const RenderViewHost* source_render_view_host) OVERRIDE { | 38 const RenderViewHost* source_render_view_host) OVERRIDE { |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 expected_final_status); | 112 expected_final_status); |
| 112 for (std::vector<GURL>::const_iterator it = alias_urls.begin(); | 113 for (std::vector<GURL>::const_iterator it = alias_urls.begin(); |
| 113 it != alias_urls.end(); | 114 it != alias_urls.end(); |
| 114 ++it) { | 115 ++it) { |
| 115 EXPECT_TRUE(prerender_contents->AddAliasURL(*it)); | 116 EXPECT_TRUE(prerender_contents->AddAliasURL(*it)); |
| 116 } | 117 } |
| 117 SetNextPrerenderContents(prerender_contents); | 118 SetNextPrerenderContents(prerender_contents); |
| 118 return prerender_contents; | 119 return prerender_contents; |
| 119 } | 120 } |
| 120 | 121 |
| 121 // Shorthand to add a simple preload with no aliases. | 122 // Shorthand to add a simple preload with a reasonable source. |
| 122 bool AddSimplePreload(const GURL& url) { | 123 bool AddSimplePrerender(const GURL& url) { |
| 123 return AddPreload(std::pair<int, int>(-1, -1), url, GURL()); | 124 return AddPrerenderWithNoTag(ORIGIN_LINK_REL_PRERENDER, url); |
| 124 } | 125 } |
| 125 | 126 |
| 126 bool IsPendingEntry(const GURL& url) { | 127 bool IsPendingEntry(const GURL& url) { |
| 127 return (PrerenderManager::FindPendingEntry(url) != NULL); | 128 return (PrerenderManager::FindPendingEntry(url) != NULL); |
| 128 } | 129 } |
| 129 | 130 |
| 130 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; } | 131 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; } |
| 131 | 132 |
| 132 PrerenderContents* next_prerender_contents() { | 133 PrerenderContents* next_prerender_contents() { |
| 133 return next_prerender_contents_.get(); | 134 return next_prerender_contents_.get(); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 | 197 |
| 197 // Needed to pass PrerenderManager's DCHECKs. | 198 // Needed to pass PrerenderManager's DCHECKs. |
| 198 ScopedTestingBrowserProcess browser_process_; | 199 ScopedTestingBrowserProcess browser_process_; |
| 199 MessageLoop message_loop_; | 200 MessageLoop message_loop_; |
| 200 BrowserThread ui_thread_; | 201 BrowserThread ui_thread_; |
| 201 scoped_ptr<TestPrerenderManager> prerender_manager_; | 202 scoped_ptr<TestPrerenderManager> prerender_manager_; |
| 202 }; | 203 }; |
| 203 | 204 |
| 204 TEST_F(PrerenderManagerTest, EmptyTest) { | 205 TEST_F(PrerenderManagerTest, EmptyTest) { |
| 205 GURL url("http://www.google.com/"); | 206 GURL url("http://www.google.com/"); |
| 206 EXPECT_FALSE(prerender_manager()->MaybeUsePreloadedPage(NULL, url, false)); | 207 EXPECT_FALSE(prerender_manager()->MaybeUsePrerenderedPage(NULL, url, false)); |
| 207 } | 208 } |
| 208 | 209 |
| 209 TEST_F(PrerenderManagerTest, FoundTest) { | 210 TEST_F(PrerenderManagerTest, FoundTest) { |
| 210 GURL url("http://www.google.com/"); | 211 GURL url("http://www.google.com/"); |
| 211 DummyPrerenderContents* prerender_contents = | 212 DummyPrerenderContents* prerender_contents = |
| 212 prerender_manager()->CreateNextPrerenderContents( | 213 prerender_manager()->CreateNextPrerenderContents( |
| 213 url, | 214 url, |
| 214 FINAL_STATUS_USED); | 215 FINAL_STATUS_USED); |
| 215 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 216 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 216 EXPECT_TRUE(prerender_contents->has_started()); | 217 EXPECT_TRUE(prerender_contents->has_started()); |
| 217 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); | 218 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); |
| 218 } | 219 } |
| 219 | 220 |
| 220 // Make sure that if queue a request, and a second prerender request for the | 221 // Make sure that if queue a request, and a second prerender request for the |
| 221 // same URL comes in, that we drop the second request and keep the first one. | 222 // same URL comes in, that we drop the second request and keep the first one. |
| 222 TEST_F(PrerenderManagerTest, DropSecondRequestTest) { | 223 TEST_F(PrerenderManagerTest, DropSecondRequestTest) { |
| 223 GURL url("http://www.google.com/"); | 224 GURL url("http://www.google.com/"); |
| 224 DummyPrerenderContents* prerender_contents = | 225 DummyPrerenderContents* prerender_contents = |
| 225 prerender_manager()->CreateNextPrerenderContents( | 226 prerender_manager()->CreateNextPrerenderContents( |
| 226 url, | 227 url, |
| 227 FINAL_STATUS_USED); | 228 FINAL_STATUS_USED); |
| 228 DummyPrerenderContents* null = NULL; | 229 DummyPrerenderContents* null = NULL; |
| 229 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 230 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 230 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 231 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| 231 EXPECT_TRUE(prerender_contents->has_started()); | 232 EXPECT_TRUE(prerender_contents->has_started()); |
| 232 | 233 |
| 233 DummyPrerenderContents* prerender_contents1 = | 234 DummyPrerenderContents* prerender_contents1 = |
| 234 prerender_manager()->CreateNextPrerenderContents( | 235 prerender_manager()->CreateNextPrerenderContents( |
| 235 url, | 236 url, |
| 236 FINAL_STATUS_MANAGER_SHUTDOWN); | 237 FINAL_STATUS_MANAGER_SHUTDOWN); |
| 237 EXPECT_FALSE(prerender_manager()->AddSimplePreload(url)); | 238 EXPECT_FALSE(prerender_manager()->AddSimplePrerender(url)); |
| 238 EXPECT_EQ(prerender_contents1, | 239 EXPECT_EQ(prerender_contents1, |
| 239 prerender_manager()->next_prerender_contents()); | 240 prerender_manager()->next_prerender_contents()); |
| 240 EXPECT_FALSE(prerender_contents1->has_started()); | 241 EXPECT_FALSE(prerender_contents1->has_started()); |
| 241 | 242 |
| 242 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); | 243 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); |
| 243 } | 244 } |
| 244 | 245 |
| 245 // Ensure that we expire a prerendered page after the max. permitted time. | 246 // Ensure that we expire a prerendered page after the max. permitted time. |
| 246 TEST_F(PrerenderManagerTest, ExpireTest) { | 247 TEST_F(PrerenderManagerTest, ExpireTest) { |
| 247 GURL url("http://www.google.com/"); | 248 GURL url("http://www.google.com/"); |
| 248 DummyPrerenderContents* prerender_contents = | 249 DummyPrerenderContents* prerender_contents = |
| 249 prerender_manager()->CreateNextPrerenderContents( | 250 prerender_manager()->CreateNextPrerenderContents( |
| 250 url, | 251 url, |
| 251 FINAL_STATUS_TIMED_OUT); | 252 FINAL_STATUS_TIMED_OUT); |
| 252 DummyPrerenderContents* null = NULL; | 253 DummyPrerenderContents* null = NULL; |
| 253 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 254 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 254 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 255 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| 255 EXPECT_TRUE(prerender_contents->has_started()); | 256 EXPECT_TRUE(prerender_contents->has_started()); |
| 256 prerender_manager()->AdvanceTime(prerender_manager()->max_prerender_age() | 257 prerender_manager()->AdvanceTime(prerender_manager()->max_prerender_age() |
| 257 + base::TimeDelta::FromSeconds(1)); | 258 + base::TimeDelta::FromSeconds(1)); |
| 258 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); | 259 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); |
| 259 } | 260 } |
| 260 | 261 |
| 261 // LRU Test. Make sure that if we prerender more than one request, that | 262 // LRU Test. Make sure that if we prerender more than one request, that |
| 262 // the oldest one will be dropped. | 263 // the oldest one will be dropped. |
| 263 TEST_F(PrerenderManagerTest, DropOldestRequestTest) { | 264 TEST_F(PrerenderManagerTest, DropOldestRequestTest) { |
| 264 GURL url("http://www.google.com/"); | 265 GURL url("http://www.google.com/"); |
| 265 DummyPrerenderContents* prerender_contents = | 266 DummyPrerenderContents* prerender_contents = |
| 266 prerender_manager()->CreateNextPrerenderContents( | 267 prerender_manager()->CreateNextPrerenderContents( |
| 267 url, | 268 url, |
| 268 FINAL_STATUS_EVICTED); | 269 FINAL_STATUS_EVICTED); |
| 269 DummyPrerenderContents* null = NULL; | 270 DummyPrerenderContents* null = NULL; |
| 270 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 271 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 271 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 272 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| 272 EXPECT_TRUE(prerender_contents->has_started()); | 273 EXPECT_TRUE(prerender_contents->has_started()); |
| 273 | 274 |
| 274 GURL url1("http://news.google.com/"); | 275 GURL url1("http://news.google.com/"); |
| 275 DummyPrerenderContents* prerender_contents1 = | 276 DummyPrerenderContents* prerender_contents1 = |
| 276 prerender_manager()->CreateNextPrerenderContents( | 277 prerender_manager()->CreateNextPrerenderContents( |
| 277 url1, | 278 url1, |
| 278 FINAL_STATUS_USED); | 279 FINAL_STATUS_USED); |
| 279 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url1)); | 280 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url1)); |
| 280 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 281 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| 281 EXPECT_TRUE(prerender_contents1->has_started()); | 282 EXPECT_TRUE(prerender_contents1->has_started()); |
| 282 | 283 |
| 283 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); | 284 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); |
| 284 ASSERT_EQ(prerender_contents1, prerender_manager()->GetEntry(url1)); | 285 ASSERT_EQ(prerender_contents1, prerender_manager()->GetEntry(url1)); |
| 285 } | 286 } |
| 286 | 287 |
| 287 // Two element prerender test. Ensure that the LRU operates correctly if we | 288 // Two element prerender test. Ensure that the LRU operates correctly if we |
| 288 // permit 2 elements to be kept prerendered. | 289 // permit 2 elements to be kept prerendered. |
| 289 TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) { | 290 TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) { |
| 290 prerender_manager()->set_max_elements(2); | 291 prerender_manager()->set_max_elements(2); |
| 291 GURL url("http://www.google.com/"); | 292 GURL url("http://www.google.com/"); |
| 292 DummyPrerenderContents* prerender_contents = | 293 DummyPrerenderContents* prerender_contents = |
| 293 prerender_manager()->CreateNextPrerenderContents( | 294 prerender_manager()->CreateNextPrerenderContents( |
| 294 url, | 295 url, |
| 295 FINAL_STATUS_EVICTED); | 296 FINAL_STATUS_EVICTED); |
| 296 DummyPrerenderContents* null = NULL; | 297 DummyPrerenderContents* null = NULL; |
| 297 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 298 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 298 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 299 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| 299 EXPECT_TRUE(prerender_contents->has_started()); | 300 EXPECT_TRUE(prerender_contents->has_started()); |
| 300 | 301 |
| 301 GURL url1("http://news.google.com/"); | 302 GURL url1("http://news.google.com/"); |
| 302 DummyPrerenderContents* prerender_contents1 = | 303 DummyPrerenderContents* prerender_contents1 = |
| 303 prerender_manager()->CreateNextPrerenderContents( | 304 prerender_manager()->CreateNextPrerenderContents( |
| 304 url1, | 305 url1, |
| 305 FINAL_STATUS_USED); | 306 FINAL_STATUS_USED); |
| 306 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url1)); | 307 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url1)); |
| 307 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 308 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| 308 EXPECT_TRUE(prerender_contents1->has_started()); | 309 EXPECT_TRUE(prerender_contents1->has_started()); |
| 309 | 310 |
| 310 GURL url2("http://images.google.com/"); | 311 GURL url2("http://images.google.com/"); |
| 311 DummyPrerenderContents* prerender_contents2 = | 312 DummyPrerenderContents* prerender_contents2 = |
| 312 prerender_manager()->CreateNextPrerenderContents( | 313 prerender_manager()->CreateNextPrerenderContents( |
| 313 url2, | 314 url2, |
| 314 FINAL_STATUS_USED); | 315 FINAL_STATUS_USED); |
| 315 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url2)); | 316 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url2)); |
| 316 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 317 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| 317 EXPECT_TRUE(prerender_contents2->has_started()); | 318 EXPECT_TRUE(prerender_contents2->has_started()); |
| 318 | 319 |
| 319 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); | 320 ASSERT_EQ(null, prerender_manager()->GetEntry(url)); |
| 320 ASSERT_EQ(prerender_contents1, prerender_manager()->GetEntry(url1)); | 321 ASSERT_EQ(prerender_contents1, prerender_manager()->GetEntry(url1)); |
| 321 ASSERT_EQ(prerender_contents2, prerender_manager()->GetEntry(url2)); | 322 ASSERT_EQ(prerender_contents2, prerender_manager()->GetEntry(url2)); |
| 322 } | 323 } |
| 323 | 324 |
| 324 TEST_F(PrerenderManagerTest, AliasURLTest) { | 325 TEST_F(PrerenderManagerTest, AliasURLTest) { |
| 325 GURL url("http://www.google.com/"); | 326 GURL url("http://www.google.com/"); |
| 326 GURL alias_url1("http://www.google.com/index.html"); | 327 GURL alias_url1("http://www.google.com/index.html"); |
| 327 GURL alias_url2("http://google.com/"); | 328 GURL alias_url2("http://google.com/"); |
| 328 GURL not_an_alias_url("http://google.com/index.html"); | 329 GURL not_an_alias_url("http://google.com/index.html"); |
| 329 std::vector<GURL> alias_urls; | 330 std::vector<GURL> alias_urls; |
| 330 alias_urls.push_back(alias_url1); | 331 alias_urls.push_back(alias_url1); |
| 331 alias_urls.push_back(alias_url2); | 332 alias_urls.push_back(alias_url2); |
| 332 | 333 |
| 333 // Test that all of the aliases work, but not_an_alias_url does not. | 334 // Test that all of the aliases work, but not_an_alias_url does not. |
| 334 DummyPrerenderContents* prerender_contents = | 335 DummyPrerenderContents* prerender_contents = |
| 335 prerender_manager()->CreateNextPrerenderContents( | 336 prerender_manager()->CreateNextPrerenderContents( |
| 336 url, alias_urls, FINAL_STATUS_USED); | 337 url, alias_urls, FINAL_STATUS_USED); |
| 337 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 338 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 338 ASSERT_EQ(NULL, prerender_manager()->GetEntry(not_an_alias_url)); | 339 ASSERT_EQ(NULL, prerender_manager()->GetEntry(not_an_alias_url)); |
| 339 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url1)); | 340 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url1)); |
| 340 prerender_contents = prerender_manager()->CreateNextPrerenderContents( | 341 prerender_contents = prerender_manager()->CreateNextPrerenderContents( |
| 341 url, alias_urls, FINAL_STATUS_USED); | 342 url, alias_urls, FINAL_STATUS_USED); |
| 342 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 343 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 343 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url2)); | 344 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url2)); |
| 344 prerender_contents = prerender_manager()->CreateNextPrerenderContents( | 345 prerender_contents = prerender_manager()->CreateNextPrerenderContents( |
| 345 url, alias_urls, FINAL_STATUS_USED); | 346 url, alias_urls, FINAL_STATUS_USED); |
| 346 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 347 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 347 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); | 348 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); |
| 348 | 349 |
| 349 // Test that alias URLs can not be added. | 350 // Test that alias URLs can not be added. |
| 350 prerender_contents = prerender_manager()->CreateNextPrerenderContents( | 351 prerender_contents = prerender_manager()->CreateNextPrerenderContents( |
| 351 url, alias_urls, FINAL_STATUS_USED); | 352 url, alias_urls, FINAL_STATUS_USED); |
| 352 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 353 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 353 EXPECT_FALSE(prerender_manager()->AddSimplePreload(url)); | 354 EXPECT_FALSE(prerender_manager()->AddSimplePrerender(url)); |
| 354 EXPECT_FALSE(prerender_manager()->AddSimplePreload(alias_url1)); | 355 EXPECT_FALSE(prerender_manager()->AddSimplePrerender(alias_url1)); |
| 355 EXPECT_FALSE(prerender_manager()->AddSimplePreload(alias_url2)); | 356 EXPECT_FALSE(prerender_manager()->AddSimplePrerender(alias_url2)); |
| 356 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); | 357 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); |
| 357 } | 358 } |
| 358 | 359 |
| 359 // Ensure that we ignore prerender requests within the rate limit. | 360 // Ensure that we ignore prerender requests within the rate limit. |
| 360 TEST_F(PrerenderManagerTest, RateLimitInWindowTest) { | 361 TEST_F(PrerenderManagerTest, RateLimitInWindowTest) { |
| 361 GURL url("http://www.google.com/"); | 362 GURL url("http://www.google.com/"); |
| 362 DummyPrerenderContents* prerender_contents = | 363 DummyPrerenderContents* prerender_contents = |
| 363 prerender_manager()->CreateNextPrerenderContents( | 364 prerender_manager()->CreateNextPrerenderContents( |
| 364 url, | 365 url, |
| 365 FINAL_STATUS_MANAGER_SHUTDOWN); | 366 FINAL_STATUS_MANAGER_SHUTDOWN); |
| 366 DummyPrerenderContents* null = NULL; | 367 DummyPrerenderContents* null = NULL; |
| 367 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 368 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 368 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 369 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| 369 EXPECT_TRUE(prerender_contents->has_started()); | 370 EXPECT_TRUE(prerender_contents->has_started()); |
| 370 | 371 |
| 371 prerender_manager()->set_rate_limit_enabled(true); | 372 prerender_manager()->set_rate_limit_enabled(true); |
| 372 prerender_manager()->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(1)); | 373 prerender_manager()->AdvanceTimeTicks(base::TimeDelta::FromMilliseconds(1)); |
| 373 | 374 |
| 374 GURL url1("http://news.google.com/"); | 375 GURL url1("http://news.google.com/"); |
| 375 prerender_manager()->CreateNextPrerenderContents( | 376 prerender_manager()->CreateNextPrerenderContents( |
| 376 url, | 377 url, |
| 377 FINAL_STATUS_MANAGER_SHUTDOWN); | 378 FINAL_STATUS_MANAGER_SHUTDOWN); |
| 378 EXPECT_FALSE(prerender_manager()->AddSimplePreload(url1)); | 379 EXPECT_FALSE(prerender_manager()->AddSimplePrerender(url1)); |
| 379 prerender_manager()->set_rate_limit_enabled(false); | 380 prerender_manager()->set_rate_limit_enabled(false); |
| 380 } | 381 } |
| 381 | 382 |
| 382 // Ensure that we don't ignore prerender requests outside the rate limit. | 383 // Ensure that we don't ignore prerender requests outside the rate limit. |
| 383 TEST_F(PrerenderManagerTest, RateLimitOutsideWindowTest) { | 384 TEST_F(PrerenderManagerTest, RateLimitOutsideWindowTest) { |
| 384 GURL url("http://www.google.com/"); | 385 GURL url("http://www.google.com/"); |
| 385 DummyPrerenderContents* prerender_contents = | 386 DummyPrerenderContents* prerender_contents = |
| 386 prerender_manager()->CreateNextPrerenderContents( | 387 prerender_manager()->CreateNextPrerenderContents( |
| 387 url, | 388 url, |
| 388 FINAL_STATUS_EVICTED); | 389 FINAL_STATUS_EVICTED); |
| 389 DummyPrerenderContents* null = NULL; | 390 DummyPrerenderContents* null = NULL; |
| 390 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 391 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 391 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 392 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| 392 EXPECT_TRUE(prerender_contents->has_started()); | 393 EXPECT_TRUE(prerender_contents->has_started()); |
| 393 | 394 |
| 394 prerender_manager()->set_rate_limit_enabled(true); | 395 prerender_manager()->set_rate_limit_enabled(true); |
| 395 prerender_manager()->AdvanceTimeTicks( | 396 prerender_manager()->AdvanceTimeTicks( |
| 396 base::TimeDelta::FromMilliseconds(2000)); | 397 base::TimeDelta::FromMilliseconds(2000)); |
| 397 | 398 |
| 398 GURL url1("http://news.google.com/"); | 399 GURL url1("http://news.google.com/"); |
| 399 DummyPrerenderContents* rate_limit_prerender_contents = | 400 DummyPrerenderContents* rate_limit_prerender_contents = |
| 400 prerender_manager()->CreateNextPrerenderContents( | 401 prerender_manager()->CreateNextPrerenderContents( |
| 401 url1, | 402 url1, |
| 402 FINAL_STATUS_MANAGER_SHUTDOWN); | 403 FINAL_STATUS_MANAGER_SHUTDOWN); |
| 403 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url1)); | 404 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url1)); |
| 404 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 405 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| 405 EXPECT_TRUE(rate_limit_prerender_contents->has_started()); | 406 EXPECT_TRUE(rate_limit_prerender_contents->has_started()); |
| 406 prerender_manager()->set_rate_limit_enabled(false); | 407 prerender_manager()->set_rate_limit_enabled(false); |
| 407 } | 408 } |
| 408 | 409 |
| 409 TEST_F(PrerenderManagerTest, PendingPreloadTest) { | 410 TEST_F(PrerenderManagerTest, PendingPrerenderTest) { |
| 410 GURL url("http://www.google.com/"); | 411 GURL url("http://www.google.com/"); |
| 411 DummyPrerenderContents* prerender_contents = | 412 DummyPrerenderContents* prerender_contents = |
| 412 prerender_manager()->CreateNextPrerenderContents( | 413 prerender_manager()->CreateNextPrerenderContents( |
| 413 url, | 414 url, |
| 414 FINAL_STATUS_USED); | 415 FINAL_STATUS_USED); |
| 415 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 416 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 416 | 417 |
| 417 int child_id; | 418 int child_id; |
| 418 int route_id; | 419 int route_id; |
| 419 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); | 420 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); |
| 420 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); | 421 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); |
| 421 | 422 |
| 422 GURL pending_url("http://news.google.com/"); | 423 GURL pending_url("http://news.google.com/"); |
| 423 | 424 |
| 424 EXPECT_TRUE( | 425 EXPECT_TRUE( |
| 425 prerender_manager()->AddPreload(std::make_pair(child_id, route_id), | 426 prerender_manager()->AddPrerender(ORIGIN_LINK_REL_PRERENDER, |
| 426 pending_url, | 427 std::make_pair(child_id, route_id), |
| 427 url)); | 428 pending_url, |
| 429 url)); |
| 428 | 430 |
| 429 EXPECT_TRUE(prerender_manager()->IsPendingEntry(pending_url)); | 431 EXPECT_TRUE(prerender_manager()->IsPendingEntry(pending_url)); |
| 430 EXPECT_TRUE(prerender_contents->has_started()); | 432 EXPECT_TRUE(prerender_contents->has_started()); |
| 431 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); | 433 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); |
| 432 } | 434 } |
| 433 | 435 |
| 434 // Ensure that extracting a urlencoded URL in the url= query string component | 436 // Ensure that extracting a urlencoded URL in the url= query string component |
| 435 // works. | 437 // works. |
| 436 TEST_F(PrerenderManagerTest, ExtractURLInQueryStringTest) { | 438 TEST_F(PrerenderManagerTest, ExtractURLInQueryStringTest) { |
| 437 GURL result; | 439 GURL result; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 453 // group will not be able to override FINAL_STATUS_CONTROL_GROUP. | 455 // group will not be able to override FINAL_STATUS_CONTROL_GROUP. |
| 454 TEST_F(PrerenderManagerTest, ControlGroup) { | 456 TEST_F(PrerenderManagerTest, ControlGroup) { |
| 455 RestorePrerenderMode restore_prerender_mode; | 457 RestorePrerenderMode restore_prerender_mode; |
| 456 PrerenderManager::SetMode( | 458 PrerenderManager::SetMode( |
| 457 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); | 459 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); |
| 458 GURL url("http://www.google.com/"); | 460 GURL url("http://www.google.com/"); |
| 459 DummyPrerenderContents* prerender_contents = | 461 DummyPrerenderContents* prerender_contents = |
| 460 prerender_manager()->CreateNextPrerenderContents( | 462 prerender_manager()->CreateNextPrerenderContents( |
| 461 url, | 463 url, |
| 462 FINAL_STATUS_CONTROL_GROUP); | 464 FINAL_STATUS_CONTROL_GROUP); |
| 463 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 465 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 464 EXPECT_FALSE(prerender_contents->has_started()); | 466 EXPECT_FALSE(prerender_contents->has_started()); |
| 465 } | 467 } |
| 466 | 468 |
| 467 // Tests that prerendering is cancelled when the source render view does not | 469 // Tests that prerendering is cancelled when the source render view does not |
| 468 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be | 470 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be |
| 469 // triggered. | 471 // triggered. |
| 470 TEST_F(PrerenderManagerTest, SourceRenderViewClosed) { | 472 TEST_F(PrerenderManagerTest, SourceRenderViewClosed) { |
| 471 GURL url("http://www.google.com/"); | 473 GURL url("http://www.google.com/"); |
| 472 prerender_manager()->CreateNextPrerenderContents( | 474 prerender_manager()->CreateNextPrerenderContents( |
| 473 url, | 475 url, |
| 474 FINAL_STATUS_MANAGER_SHUTDOWN); | 476 FINAL_STATUS_MANAGER_SHUTDOWN); |
| 475 EXPECT_FALSE(prerender_manager()->AddPreload( | 477 EXPECT_FALSE(prerender_manager()->AddPrerender( |
| 476 std::pair<int, int>(100, 100), url, GURL())); | 478 ORIGIN_LINK_REL_PRERENDER, std::pair<int, int>(100, 100), url, GURL())); |
| 477 } | 479 } |
| 478 | 480 |
| 479 // Tests that the prerender manager ignores fragment references when matching | 481 // Tests that the prerender manager ignores fragment references when matching |
| 480 // prerender URLs in the case the fragment is not in the prerender URL. | 482 // prerender URLs in the case the fragment is not in the prerender URL. |
| 481 TEST_F(PrerenderManagerTest, PageMatchesFragmentTest) { | 483 TEST_F(PrerenderManagerTest, PageMatchesFragmentTest) { |
| 482 GURL url("http://www.google.com/"); | 484 GURL url("http://www.google.com/"); |
| 483 GURL fragment_url("http://www.google.com/#test"); | 485 GURL fragment_url("http://www.google.com/#test"); |
| 484 | 486 |
| 485 DummyPrerenderContents* prerender_contents = | 487 DummyPrerenderContents* prerender_contents = |
| 486 prerender_manager()->CreateNextPrerenderContents(url, | 488 prerender_manager()->CreateNextPrerenderContents(url, |
| 487 FINAL_STATUS_USED); | 489 FINAL_STATUS_USED); |
| 488 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 490 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 489 EXPECT_TRUE(prerender_contents->has_started()); | 491 EXPECT_TRUE(prerender_contents->has_started()); |
| 490 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(fragment_url)); | 492 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(fragment_url)); |
| 491 } | 493 } |
| 492 | 494 |
| 493 // Tests that the prerender manager ignores fragment references when matching | 495 // Tests that the prerender manager ignores fragment references when matching |
| 494 // prerender URLs in the case the fragment is in the prerender URL. | 496 // prerender URLs in the case the fragment is in the prerender URL. |
| 495 TEST_F(PrerenderManagerTest, FragmentMatchesPageTest) { | 497 TEST_F(PrerenderManagerTest, FragmentMatchesPageTest) { |
| 496 GURL url("http://www.google.com/"); | 498 GURL url("http://www.google.com/"); |
| 497 GURL fragment_url("http://www.google.com/#test"); | 499 GURL fragment_url("http://www.google.com/#test"); |
| 498 | 500 |
| 499 DummyPrerenderContents* prerender_contents = | 501 DummyPrerenderContents* prerender_contents = |
| 500 prerender_manager()->CreateNextPrerenderContents(fragment_url, | 502 prerender_manager()->CreateNextPrerenderContents(fragment_url, |
| 501 FINAL_STATUS_USED); | 503 FINAL_STATUS_USED); |
| 502 EXPECT_TRUE(prerender_manager()->AddSimplePreload(fragment_url)); | 504 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(fragment_url)); |
| 503 EXPECT_TRUE(prerender_contents->has_started()); | 505 EXPECT_TRUE(prerender_contents->has_started()); |
| 504 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); | 506 ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url)); |
| 505 } | 507 } |
| 506 | 508 |
| 507 // Tests that the prerender manager ignores fragment references when matching | 509 // Tests that the prerender manager ignores fragment references when matching |
| 508 // prerender URLs in the case the fragment is in both URLs. | 510 // prerender URLs in the case the fragment is in both URLs. |
| 509 TEST_F(PrerenderManagerTest, FragmentMatchesFragmentTest) { | 511 TEST_F(PrerenderManagerTest, FragmentMatchesFragmentTest) { |
| 510 GURL fragment_url("http://www.google.com/#test"); | 512 GURL fragment_url("http://www.google.com/#test"); |
| 511 GURL other_fragment_url("http://www.google.com/#other_test"); | 513 GURL other_fragment_url("http://www.google.com/#other_test"); |
| 512 | 514 |
| 513 DummyPrerenderContents* prerender_contents = | 515 DummyPrerenderContents* prerender_contents = |
| 514 prerender_manager()->CreateNextPrerenderContents(fragment_url, | 516 prerender_manager()->CreateNextPrerenderContents(fragment_url, |
| 515 FINAL_STATUS_USED); | 517 FINAL_STATUS_USED); |
| 516 EXPECT_TRUE(prerender_manager()->AddSimplePreload(fragment_url)); | 518 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(fragment_url)); |
| 517 EXPECT_TRUE(prerender_contents->has_started()); | 519 EXPECT_TRUE(prerender_contents->has_started()); |
| 518 ASSERT_EQ(prerender_contents, | 520 ASSERT_EQ(prerender_contents, |
| 519 prerender_manager()->GetEntry(other_fragment_url)); | 521 prerender_manager()->GetEntry(other_fragment_url)); |
| 520 } | 522 } |
| 521 | 523 |
| 522 // Make sure that clearing works as expected. | 524 // Make sure that clearing works as expected. |
| 523 TEST_F(PrerenderManagerTest, ClearTest) { | 525 TEST_F(PrerenderManagerTest, ClearTest) { |
| 524 GURL url("http://www.google.com/"); | 526 GURL url("http://www.google.com/"); |
| 525 DummyPrerenderContents* prerender_contents = | 527 DummyPrerenderContents* prerender_contents = |
| 526 prerender_manager()->CreateNextPrerenderContents( | 528 prerender_manager()->CreateNextPrerenderContents( |
| 527 url, | 529 url, |
| 528 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED); | 530 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED); |
| 529 EXPECT_TRUE(prerender_manager()->AddSimplePreload(url)); | 531 EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url)); |
| 530 EXPECT_TRUE(prerender_contents->has_started()); | 532 EXPECT_TRUE(prerender_contents->has_started()); |
| 531 prerender_manager()->ClearData(PrerenderManager::CLEAR_PRERENDER_CONTENTS); | 533 prerender_manager()->ClearData(PrerenderManager::CLEAR_PRERENDER_CONTENTS); |
| 532 DummyPrerenderContents* null = NULL; | 534 DummyPrerenderContents* null = NULL; |
| 533 EXPECT_EQ(null, prerender_manager()->GetEntry(url)); | 535 EXPECT_EQ(null, prerender_manager()->GetEntry(url)); |
| 534 } | 536 } |
| 535 | 537 |
| 536 } // namespace prerender | 538 } // namespace prerender |
| OLD | NEW |