Chromium Code Reviews| 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/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" | 9 #include "content/browser/renderer_host/render_view_host.h" |
| 10 #include "content/browser/renderer_host/render_process_host.h" | 10 #include "content/browser/renderer_host/render_process_host.h" |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 32 FinalStatus expected_final_status) | 32 FinalStatus expected_final_status) |
| 33 : PrerenderContents(prerender_manager, NULL, url, alias_urls, GURL()), | 33 : PrerenderContents(prerender_manager, NULL, url, alias_urls, GURL()), |
| 34 has_started_(false), | 34 has_started_(false), |
| 35 expected_final_status_(expected_final_status) { | 35 expected_final_status_(expected_final_status) { |
| 36 } | 36 } |
| 37 | 37 |
| 38 virtual ~DummyPrerenderContents() { | 38 virtual ~DummyPrerenderContents() { |
| 39 EXPECT_EQ(expected_final_status_, final_status()); | 39 EXPECT_EQ(expected_final_status_, final_status()); |
| 40 } | 40 } |
| 41 | 41 |
| 42 virtual void StartPrerendering() OVERRIDE { | 42 virtual void StartPrerendering( |
| 43 const RenderViewHost* source_render_view_host) OVERRIDE { | |
| 43 has_started_ = true; | 44 has_started_ = true; |
| 44 } | 45 } |
| 45 | 46 |
| 46 virtual bool GetChildId(int* child_id) const OVERRIDE { | 47 virtual bool GetChildId(int* child_id) const OVERRIDE { |
| 47 *child_id = 0; | 48 *child_id = 0; |
| 48 return true; | 49 return true; |
| 49 } | 50 } |
| 50 | 51 |
| 51 virtual bool GetRouteId(int* route_id) const OVERRIDE { | 52 virtual bool GetRouteId(int* route_id) const OVERRIDE { |
| 52 *route_id = 0; | 53 *route_id = 0; |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 77 void AdvanceTimeTicks(base::TimeDelta delta) { | 78 void AdvanceTimeTicks(base::TimeDelta delta) { |
| 78 time_ticks_ += delta; | 79 time_ticks_ += delta; |
| 79 } | 80 } |
| 80 | 81 |
| 81 void SetNextPrerenderContents(PrerenderContents* pc) { | 82 void SetNextPrerenderContents(PrerenderContents* pc) { |
| 82 next_pc_.reset(pc); | 83 next_pc_.reset(pc); |
| 83 } | 84 } |
| 84 | 85 |
| 85 // Shorthand to add a simple preload with no aliases. | 86 // Shorthand to add a simple preload with no aliases. |
| 86 bool AddSimplePreload(const GURL& url) { | 87 bool AddSimplePreload(const GURL& url) { |
| 87 return AddPreload(url, std::vector<GURL>(), GURL()); | 88 return AddPreload(std::pair<int, int>(-1, -1), url, std::vector<GURL>(), |
| 89 GURL()); | |
| 88 } | 90 } |
| 89 | 91 |
| 90 bool IsPendingEntry(const GURL& url) { | 92 bool IsPendingEntry(const GURL& url) { |
| 91 return (PrerenderManager::FindPendingEntry(url) != NULL); | 93 return (PrerenderManager::FindPendingEntry(url) != NULL); |
| 92 } | 94 } |
| 93 | 95 |
| 94 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; } | 96 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; } |
| 95 | 97 |
| 98 // Shorthand to add a simple preload with aliases. | |
| 99 bool AddSimplePreloadWithAliases(const GURL& url, | |
| 100 const std::vector<GURL>& alias_urls) { | |
| 101 return AddPreload(std::pair<int, int>(-1, -1), url, alias_urls, GURL()); | |
| 102 } | |
| 103 | |
| 96 PrerenderContents* next_pc() { return next_pc_.get(); } | 104 PrerenderContents* next_pc() { return next_pc_.get(); } |
| 97 | 105 |
| 98 protected: | 106 protected: |
| 99 virtual ~TestPrerenderManager() { | 107 virtual ~TestPrerenderManager() { |
| 100 if (next_pc()) { | 108 if (next_pc()) { |
| 101 next_pc()->set_final_status( | 109 next_pc()->set_final_status( |
| 102 FINAL_STATUS_MANAGER_SHUTDOWN); | 110 FINAL_STATUS_MANAGER_SHUTDOWN); |
| 103 } | 111 } |
| 104 } | 112 } |
| 105 | 113 |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 272 GURL alias_url2("http://google.com/"); | 280 GURL alias_url2("http://google.com/"); |
| 273 GURL not_an_alias_url("http://google.com/index.html"); | 281 GURL not_an_alias_url("http://google.com/index.html"); |
| 274 std::vector<GURL> alias_urls; | 282 std::vector<GURL> alias_urls; |
| 275 alias_urls.push_back(alias_url1); | 283 alias_urls.push_back(alias_url1); |
| 276 alias_urls.push_back(alias_url2); | 284 alias_urls.push_back(alias_url2); |
| 277 DummyPrerenderContents* pc = | 285 DummyPrerenderContents* pc = |
| 278 new DummyPrerenderContents(prerender_manager_.get(), url, alias_urls, | 286 new DummyPrerenderContents(prerender_manager_.get(), url, alias_urls, |
| 279 FINAL_STATUS_USED); | 287 FINAL_STATUS_USED); |
| 280 // Test that all of the aliases work, but nont_an_alias_url does not. | 288 // Test that all of the aliases work, but nont_an_alias_url does not. |
| 281 prerender_manager_->SetNextPrerenderContents(pc); | 289 prerender_manager_->SetNextPrerenderContents(pc); |
| 282 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); | 290 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls)); |
| 283 ASSERT_EQ(NULL, prerender_manager_->GetEntry(not_an_alias_url)); | 291 ASSERT_EQ(NULL, prerender_manager_->GetEntry(not_an_alias_url)); |
| 284 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url1)); | 292 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url1)); |
| 285 prerender_manager_->SetNextPrerenderContents(pc); | 293 prerender_manager_->SetNextPrerenderContents(pc); |
| 286 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); | 294 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls)); |
| 287 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url2)); | 295 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url2)); |
| 288 prerender_manager_->SetNextPrerenderContents(pc); | 296 prerender_manager_->SetNextPrerenderContents(pc); |
| 289 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); | 297 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls)); |
| 290 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); | 298 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); |
| 291 | 299 |
| 292 // Test that alias URLs can not be added. | 300 // Test that alias URLs can not be added. |
| 293 prerender_manager_->SetNextPrerenderContents(pc); | 301 prerender_manager_->SetNextPrerenderContents(pc); |
| 294 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); | 302 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls)); |
| 295 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url)); | 303 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url)); |
| 296 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url1)); | 304 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url1)); |
| 297 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url2)); | 305 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url2)); |
| 298 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); | 306 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); |
| 299 | 307 |
| 300 pc->set_final_status(FINAL_STATUS_USED); | 308 pc->set_final_status(FINAL_STATUS_USED); |
| 301 delete pc; | 309 delete pc; |
| 302 } | 310 } |
| 303 | 311 |
| 304 // Ensure that we ignore prerender requests within the rate limit. | 312 // Ensure that we ignore prerender requests within the rate limit. |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 419 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( | 427 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( |
| 420 GURL("http://www.google.com/url?sadf=test&blah=blahblahblah"), &result)); | 428 GURL("http://www.google.com/url?sadf=test&blah=blahblahblah"), &result)); |
| 421 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( | 429 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( |
| 422 GURL("http://www.google.com/?url=INVALIDurlsAREsoMUCHfun.com"), &result)); | 430 GURL("http://www.google.com/?url=INVALIDurlsAREsoMUCHfun.com"), &result)); |
| 423 EXPECT_TRUE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( | 431 EXPECT_TRUE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( |
| 424 GURL("http://www.google.com/?url=http://validURLSareGREAT.com"), | 432 GURL("http://www.google.com/?url=http://validURLSareGREAT.com"), |
| 425 &result)); | 433 &result)); |
| 426 ASSERT_EQ(GURL("http://validURLSareGREAT.com").spec(), result.spec()); | 434 ASSERT_EQ(GURL("http://validURLSareGREAT.com").spec(), result.spec()); |
| 427 } | 435 } |
| 428 | 436 |
| 437 // Ensure an entry with a |pending_final_status| is not returned. | |
| 438 TEST_F(PrerenderManagerTest, DropEntriesWithPendingFinalStatus) { | |
| 439 GURL url("http://www.google.com/"); | |
| 440 DummyPrerenderContents* pc = | |
| 441 new DummyPrerenderContents(prerender_manager_.get(), url, | |
| 442 FINAL_STATUS_COMPOSITING); | |
| 443 DummyPrerenderContents* null = NULL; | |
| 444 prerender_manager_->SetNextPrerenderContents(pc); | |
| 445 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); | |
| 446 EXPECT_EQ(null, prerender_manager_->next_pc()); | |
| 447 EXPECT_TRUE(pc->has_started()); | |
| 448 pc->set_pending_final_status(FINAL_STATUS_COMPOSITING); | |
| 449 ASSERT_EQ(null, prerender_manager_->GetEntry(url)); | |
| 450 } | |
| 451 | |
| 452 // Adds 2 entries, sets the |pending_final_status| of the second one, and checks | |
| 453 // that adding a third entry removes the second rather than the first. | |
| 454 TEST_F(PrerenderManagerTest, DropSecondEntryWithPendingFinalStatus) { | |
| 455 prerender_manager_->set_max_elements(2); | |
| 456 GURL url1("http://www.google.com/"); | |
| 457 DummyPrerenderContents* pc1 = | |
| 458 new DummyPrerenderContents(prerender_manager_.get(), url1, | |
| 459 FINAL_STATUS_USED); | |
| 460 DummyPrerenderContents* null = NULL; | |
| 461 prerender_manager_->SetNextPrerenderContents(pc1); | |
| 462 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1)); | |
| 463 EXPECT_EQ(null, prerender_manager_->next_pc()); | |
| 464 EXPECT_TRUE(pc1->has_started()); | |
| 465 GURL url2("http://news.google.com/"); | |
| 466 DummyPrerenderContents* pc2 = | |
| 467 new DummyPrerenderContents(prerender_manager_.get(), url1, | |
| 468 FINAL_STATUS_COMPOSITING); | |
| 469 prerender_manager_->SetNextPrerenderContents(pc2); | |
| 470 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url2)); | |
| 471 EXPECT_EQ(null, prerender_manager_->next_pc()); | |
| 472 EXPECT_TRUE(pc2->has_started()); | |
| 473 pc2->set_pending_final_status(FINAL_STATUS_COMPOSITING); | |
| 474 GURL url3("http://images.google.com/"); | |
| 475 DummyPrerenderContents* pc3 = | |
| 476 new DummyPrerenderContents(prerender_manager_.get(), url3, | |
| 477 FINAL_STATUS_USED); | |
| 478 prerender_manager_->SetNextPrerenderContents(pc3); | |
| 479 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url3)); | |
| 480 EXPECT_EQ(null, prerender_manager_->next_pc()); | |
| 481 EXPECT_TRUE(pc2->has_started()); | |
| 482 ASSERT_EQ(pc1, prerender_manager_->GetEntry(url1)); | |
| 483 ASSERT_EQ(null, prerender_manager_->GetEntry(url2)); | |
| 484 ASSERT_EQ(pc3, prerender_manager_->GetEntry(url3)); | |
| 485 pc1->set_final_status(FINAL_STATUS_USED); | |
| 486 delete pc1; | |
|
Paweł Hajdan Jr.
2011/04/20 06:49:37
Could you switch the pointers to scoped_ptrs inste
mmenke
2011/04/20 15:15:19
Done. Reworked these tests slightly, to avoid sim
| |
| 487 pc3->set_final_status(FINAL_STATUS_USED); | |
| 488 delete pc3; | |
| 489 } | |
| 490 | |
| 491 // Tests that prerendering is cancelled when the source render view does not | |
| 492 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be | |
| 493 // triggered. | |
| 494 TEST_F(PrerenderManagerTest, SourceRenderViewClosed) { | |
| 495 GURL url("http://www.google.com/"); | |
| 496 EXPECT_FALSE(prerender_manager_->AddPreload( | |
| 497 std::pair<int, int>(100, 100), url, std::vector<GURL>(), GURL())); | |
| 498 } | |
| 499 | |
| 429 } // namespace prerender | 500 } // namespace prerender |
| OLD | NEW |