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, prerender_tracker, NULL, 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 |