Chromium Code Reviews| Index: chrome/browser/prerender/prerender_manager_unittest.cc |
| =================================================================== |
| --- chrome/browser/prerender/prerender_manager_unittest.cc (revision 82104) |
| +++ chrome/browser/prerender/prerender_manager_unittest.cc (working copy) |
| @@ -39,7 +39,8 @@ |
| EXPECT_EQ(expected_final_status_, final_status()); |
| } |
| - virtual void StartPrerendering() OVERRIDE { |
| + virtual void StartPrerendering( |
| + const RenderViewHost* source_render_view_host) OVERRIDE { |
| has_started_ = true; |
| } |
| @@ -84,7 +85,8 @@ |
| // Shorthand to add a simple preload with no aliases. |
| bool AddSimplePreload(const GURL& url) { |
| - return AddPreload(url, std::vector<GURL>(), GURL()); |
| + return AddPreload(std::pair<int, int>(-1, -1), url, std::vector<GURL>(), |
| + GURL()); |
| } |
| bool IsPendingEntry(const GURL& url) { |
| @@ -93,6 +95,12 @@ |
| void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; } |
| + // Shorthand to add a simple preload with aliases. |
| + bool AddSimplePreloadWithAliases(const GURL& url, |
| + const std::vector<GURL>& alias_urls) { |
| + return AddPreload(std::pair<int, int>(-1, -1), url, alias_urls, GURL()); |
| + } |
| + |
| PrerenderContents* next_pc() { return next_pc_.get(); } |
| protected: |
| @@ -279,19 +287,19 @@ |
| FINAL_STATUS_USED); |
| // Test that all of the aliases work, but nont_an_alias_url does not. |
| prerender_manager_->SetNextPrerenderContents(pc); |
| - EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); |
| + EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls)); |
| ASSERT_EQ(NULL, prerender_manager_->GetEntry(not_an_alias_url)); |
| ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url1)); |
| prerender_manager_->SetNextPrerenderContents(pc); |
| - EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); |
| + EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls)); |
| ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url2)); |
| prerender_manager_->SetNextPrerenderContents(pc); |
| - EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); |
| + EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls)); |
| ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); |
| // Test that alias URLs can not be added. |
| prerender_manager_->SetNextPrerenderContents(pc); |
| - EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); |
| + EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls)); |
| EXPECT_FALSE(prerender_manager_->AddSimplePreload(url)); |
| EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url1)); |
| EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url2)); |
| @@ -426,4 +434,67 @@ |
| ASSERT_EQ(GURL("http://validURLSareGREAT.com").spec(), result.spec()); |
| } |
| +// Ensure an entry with a |pending_final_status| is not returned. |
| +TEST_F(PrerenderManagerTest, DropEntriesWithPendingFinalStatus) { |
| + GURL url("http://www.google.com/"); |
| + DummyPrerenderContents* pc = |
| + new DummyPrerenderContents(prerender_manager_.get(), url, |
| + FINAL_STATUS_COMPOSITING); |
| + DummyPrerenderContents* null = NULL; |
| + prerender_manager_->SetNextPrerenderContents(pc); |
| + EXPECT_TRUE(prerender_manager_->AddSimplePreload(url)); |
| + EXPECT_EQ(null, prerender_manager_->next_pc()); |
| + EXPECT_TRUE(pc->has_started()); |
| + pc->set_pending_final_status(FINAL_STATUS_COMPOSITING); |
| + ASSERT_EQ(null, prerender_manager_->GetEntry(url)); |
| +} |
| + |
| +// Adds 2 entries, sets the |pending_final_status| of the second one, and checks |
| +// that adding a third entry removes the second rather than the first. |
| +TEST_F(PrerenderManagerTest, DropSecondEntryWithPendingFinalStatus) { |
| + prerender_manager_->set_max_elements(2); |
| + GURL url1("http://www.google.com/"); |
| + DummyPrerenderContents* pc1 = |
| + new DummyPrerenderContents(prerender_manager_.get(), url1, |
| + FINAL_STATUS_USED); |
| + DummyPrerenderContents* null = NULL; |
| + prerender_manager_->SetNextPrerenderContents(pc1); |
| + EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1)); |
| + EXPECT_EQ(null, prerender_manager_->next_pc()); |
| + EXPECT_TRUE(pc1->has_started()); |
| + GURL url2("http://news.google.com/"); |
| + DummyPrerenderContents* pc2 = |
| + new DummyPrerenderContents(prerender_manager_.get(), url1, |
| + FINAL_STATUS_COMPOSITING); |
| + prerender_manager_->SetNextPrerenderContents(pc2); |
| + EXPECT_TRUE(prerender_manager_->AddSimplePreload(url2)); |
| + EXPECT_EQ(null, prerender_manager_->next_pc()); |
| + EXPECT_TRUE(pc2->has_started()); |
| + pc2->set_pending_final_status(FINAL_STATUS_COMPOSITING); |
| + GURL url3("http://images.google.com/"); |
| + DummyPrerenderContents* pc3 = |
| + new DummyPrerenderContents(prerender_manager_.get(), url3, |
| + FINAL_STATUS_USED); |
| + prerender_manager_->SetNextPrerenderContents(pc3); |
| + EXPECT_TRUE(prerender_manager_->AddSimplePreload(url3)); |
| + EXPECT_EQ(null, prerender_manager_->next_pc()); |
| + EXPECT_TRUE(pc2->has_started()); |
| + ASSERT_EQ(pc1, prerender_manager_->GetEntry(url1)); |
| + ASSERT_EQ(null, prerender_manager_->GetEntry(url2)); |
| + ASSERT_EQ(pc3, prerender_manager_->GetEntry(url3)); |
| + pc1->set_final_status(FINAL_STATUS_USED); |
| + 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
|
| + pc3->set_final_status(FINAL_STATUS_USED); |
| + delete pc3; |
| +} |
| + |
| +// Tests that prerendering is cancelled when the source render view does not |
| +// exist. On failure, the DCHECK in CreatePrerenderContents() above should be |
| +// triggered. |
| +TEST_F(PrerenderManagerTest, SourceRenderViewClosed) { |
| + GURL url("http://www.google.com/"); |
| + EXPECT_FALSE(prerender_manager_->AddPreload( |
| + std::pair<int, int>(100, 100), url, std::vector<GURL>(), GURL())); |
| +} |
| + |
| } // namespace prerender |