| 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/test/testing_browser_process.h" |
| 9 #include "content/browser/browser_thread.h" | 10 #include "content/browser/browser_thread.h" |
| 10 #include "content/browser/renderer_host/render_view_host.h" | 11 #include "content/browser/renderer_host/render_view_host.h" |
| 11 #include "content/browser/renderer_host/render_process_host.h" | 12 #include "content/browser/renderer_host/render_process_host.h" |
| 12 #include "googleurl/src/gurl.h" | 13 #include "googleurl/src/gurl.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 14 | 15 |
| 15 namespace prerender { | 16 namespace prerender { |
| 16 | 17 |
| 17 namespace { | 18 namespace { |
| 18 | 19 |
| 19 class DummyPrerenderContents : public PrerenderContents { | 20 class DummyPrerenderContents : public PrerenderContents { |
| 20 public: | 21 public: |
| 21 DummyPrerenderContents(PrerenderManager* prerender_manager, | 22 DummyPrerenderContents(PrerenderManager* prerender_manager, |
| 23 PrerenderTracker* prerender_tracker, |
| 22 const GURL& url, | 24 const GURL& url, |
| 23 FinalStatus expected_final_status) | 25 FinalStatus expected_final_status) |
| 24 : PrerenderContents(prerender_manager, NULL, url, GURL()), | 26 : PrerenderContents(prerender_manager, NULL, prerender_tracker, url, |
| 27 GURL()), |
| 25 has_started_(false), | 28 has_started_(false), |
| 26 expected_final_status_(expected_final_status) { | 29 expected_final_status_(expected_final_status) { |
| 27 } | 30 } |
| 28 | 31 |
| 29 virtual ~DummyPrerenderContents() { | 32 virtual ~DummyPrerenderContents() { |
| 30 EXPECT_EQ(expected_final_status_, final_status()); | 33 EXPECT_EQ(expected_final_status_, final_status()); |
| 31 } | 34 } |
| 32 | 35 |
| 33 virtual void StartPrerendering( | 36 virtual void StartPrerendering( |
| 34 const RenderViewHost* source_render_view_host) OVERRIDE { | 37 const RenderViewHost* source_render_view_host) OVERRIDE { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 49 | 52 |
| 50 FinalStatus expected_final_status() const { return expected_final_status_; } | 53 FinalStatus expected_final_status() const { return expected_final_status_; } |
| 51 | 54 |
| 52 private: | 55 private: |
| 53 bool has_started_; | 56 bool has_started_; |
| 54 FinalStatus expected_final_status_; | 57 FinalStatus expected_final_status_; |
| 55 }; | 58 }; |
| 56 | 59 |
| 57 class TestPrerenderManager : public PrerenderManager { | 60 class TestPrerenderManager : public PrerenderManager { |
| 58 public: | 61 public: |
| 59 TestPrerenderManager() | 62 explicit TestPrerenderManager(PrerenderTracker* prerender_tracker) |
| 60 : PrerenderManager(NULL), | 63 : PrerenderManager(NULL, prerender_tracker), |
| 61 time_(base::Time::Now()), | 64 time_(base::Time::Now()), |
| 62 time_ticks_(base::TimeTicks::Now()), | 65 time_ticks_(base::TimeTicks::Now()), |
| 63 next_prerender_contents_(NULL) { | 66 next_prerender_contents_(NULL), |
| 67 prerender_tracker_(prerender_tracker) { |
| 64 rate_limit_enabled_ = false; | 68 rate_limit_enabled_ = false; |
| 65 } | 69 } |
| 66 | 70 |
| 67 virtual ~TestPrerenderManager() { | 71 virtual ~TestPrerenderManager() { |
| 68 if (next_prerender_contents()) { | 72 if (next_prerender_contents()) { |
| 69 next_prerender_contents_.release()->Destroy( | 73 next_prerender_contents_.release()->Destroy( |
| 70 FINAL_STATUS_MANAGER_SHUTDOWN); | 74 FINAL_STATUS_MANAGER_SHUTDOWN); |
| 71 } | 75 } |
| 72 // Set the final status for all PrerenderContents with an expected final | 76 // Set the final status for all PrerenderContents with an expected final |
| 73 // status of FINAL_STATUS_USED. These values are normally set when the | 77 // status of FINAL_STATUS_USED. These values are normally set when the |
| (...skipping 11 matching lines...) Expand all Loading... |
| 85 } | 89 } |
| 86 | 90 |
| 87 void AdvanceTimeTicks(base::TimeDelta delta) { | 91 void AdvanceTimeTicks(base::TimeDelta delta) { |
| 88 time_ticks_ += delta; | 92 time_ticks_ += delta; |
| 89 } | 93 } |
| 90 | 94 |
| 91 DummyPrerenderContents* CreateNextPrerenderContents( | 95 DummyPrerenderContents* CreateNextPrerenderContents( |
| 92 const GURL& url, | 96 const GURL& url, |
| 93 FinalStatus expected_final_status) { | 97 FinalStatus expected_final_status) { |
| 94 DummyPrerenderContents* prerender_contents = | 98 DummyPrerenderContents* prerender_contents = |
| 95 new DummyPrerenderContents(this, url, expected_final_status); | 99 new DummyPrerenderContents(this, prerender_tracker_, url, |
| 100 expected_final_status); |
| 96 SetNextPrerenderContents(prerender_contents); | 101 SetNextPrerenderContents(prerender_contents); |
| 97 return prerender_contents; | 102 return prerender_contents; |
| 98 } | 103 } |
| 99 | 104 |
| 100 DummyPrerenderContents* CreateNextPrerenderContents( | 105 DummyPrerenderContents* CreateNextPrerenderContents( |
| 101 const GURL& url, | 106 const GURL& url, |
| 102 const std::vector<GURL>& alias_urls, | 107 const std::vector<GURL>& alias_urls, |
| 103 FinalStatus expected_final_status) { | 108 FinalStatus expected_final_status) { |
| 104 DummyPrerenderContents* prerender_contents = | 109 DummyPrerenderContents* prerender_contents = |
| 105 new DummyPrerenderContents(this, url, expected_final_status); | 110 new DummyPrerenderContents(this, prerender_tracker_, url, |
| 111 expected_final_status); |
| 106 for (std::vector<GURL>::const_iterator it = alias_urls.begin(); | 112 for (std::vector<GURL>::const_iterator it = alias_urls.begin(); |
| 107 it != alias_urls.end(); | 113 it != alias_urls.end(); |
| 108 ++it) { | 114 ++it) { |
| 109 EXPECT_TRUE(prerender_contents->AddAliasURL(*it)); | 115 EXPECT_TRUE(prerender_contents->AddAliasURL(*it)); |
| 110 } | 116 } |
| 111 SetNextPrerenderContents(prerender_contents); | 117 SetNextPrerenderContents(prerender_contents); |
| 112 return prerender_contents; | 118 return prerender_contents; |
| 113 } | 119 } |
| 114 | 120 |
| 115 // Shorthand to add a simple preload with no aliases. | 121 // Shorthand to add a simple preload with no aliases. |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 DCHECK(next_prerender_contents_.get()); | 155 DCHECK(next_prerender_contents_.get()); |
| 150 return next_prerender_contents_.release(); | 156 return next_prerender_contents_.release(); |
| 151 } | 157 } |
| 152 | 158 |
| 153 base::Time time_; | 159 base::Time time_; |
| 154 base::TimeTicks time_ticks_; | 160 base::TimeTicks time_ticks_; |
| 155 scoped_ptr<PrerenderContents> next_prerender_contents_; | 161 scoped_ptr<PrerenderContents> next_prerender_contents_; |
| 156 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED, | 162 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED, |
| 157 // tracked so they will be automatically deleted. | 163 // tracked so they will be automatically deleted. |
| 158 ScopedVector<PrerenderContents> used_prerender_contents_; | 164 ScopedVector<PrerenderContents> used_prerender_contents_; |
| 165 |
| 166 PrerenderTracker* prerender_tracker_; |
| 159 }; | 167 }; |
| 160 | 168 |
| 161 class RestorePrerenderMode { | 169 class RestorePrerenderMode { |
| 162 public: | 170 public: |
| 163 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) { | 171 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) { |
| 164 } | 172 } |
| 165 | 173 |
| 166 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); } | 174 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); } |
| 167 private: | 175 private: |
| 168 PrerenderManager::PrerenderManagerMode prev_mode_; | 176 PrerenderManager::PrerenderManagerMode prev_mode_; |
| 169 }; | 177 }; |
| 170 | 178 |
| 171 } // namespace | 179 } // namespace |
| 172 | 180 |
| 173 class PrerenderManagerTest : public testing::Test { | 181 class PrerenderManagerTest : public testing::Test { |
| 174 public: | 182 public: |
| 175 PrerenderManagerTest() : ui_thread_(BrowserThread::UI, &message_loop_), | 183 PrerenderManagerTest() : ui_thread_(BrowserThread::UI, &message_loop_), |
| 176 prerender_manager_(new TestPrerenderManager()) { | 184 prerender_manager_( |
| 185 new TestPrerenderManager(prerender_tracker())) { |
| 177 } | 186 } |
| 178 | 187 |
| 179 TestPrerenderManager* prerender_manager() { | 188 TestPrerenderManager* prerender_manager() { |
| 180 return prerender_manager_.get(); | 189 return prerender_manager_.get(); |
| 181 } | 190 } |
| 182 | 191 |
| 183 private: | 192 private: |
| 193 PrerenderTracker* prerender_tracker() { |
| 194 return browser_process_.get()->prerender_tracker(); |
| 195 } |
| 196 |
| 184 // Needed to pass PrerenderManager's DCHECKs. | 197 // Needed to pass PrerenderManager's DCHECKs. |
| 198 ScopedTestingBrowserProcess browser_process_; |
| 185 MessageLoop message_loop_; | 199 MessageLoop message_loop_; |
| 186 BrowserThread ui_thread_; | 200 BrowserThread ui_thread_; |
| 187 scoped_ptr<TestPrerenderManager> prerender_manager_; | 201 scoped_ptr<TestPrerenderManager> prerender_manager_; |
| 188 }; | 202 }; |
| 189 | 203 |
| 190 TEST_F(PrerenderManagerTest, EmptyTest) { | 204 TEST_F(PrerenderManagerTest, EmptyTest) { |
| 191 GURL url("http://www.google.com/"); | 205 GURL url("http://www.google.com/"); |
| 192 EXPECT_FALSE(prerender_manager()->MaybeUsePreloadedPage(NULL, url, false)); | 206 EXPECT_FALSE(prerender_manager()->MaybeUsePreloadedPage(NULL, url, false)); |
| 193 } | 207 } |
| 194 | 208 |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 524 DummyPrerenderContents* prerender_contents = | 538 DummyPrerenderContents* prerender_contents = |
| 525 prerender_manager()->CreateNextPrerenderContents(fragment_url, | 539 prerender_manager()->CreateNextPrerenderContents(fragment_url, |
| 526 FINAL_STATUS_USED); | 540 FINAL_STATUS_USED); |
| 527 EXPECT_TRUE(prerender_manager()->AddSimplePreload(fragment_url)); | 541 EXPECT_TRUE(prerender_manager()->AddSimplePreload(fragment_url)); |
| 528 EXPECT_TRUE(prerender_contents->has_started()); | 542 EXPECT_TRUE(prerender_contents->has_started()); |
| 529 ASSERT_EQ(prerender_contents, | 543 ASSERT_EQ(prerender_contents, |
| 530 prerender_manager()->GetEntry(other_fragment_url)); | 544 prerender_manager()->GetEntry(other_fragment_url)); |
| 531 } | 545 } |
| 532 | 546 |
| 533 } // namespace prerender | 547 } // namespace prerender |
| OLD | NEW |