OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/command_line.h" | 5 #include "base/command_line.h" |
6 #include "base/memory/scoped_vector.h" | 6 #include "base/memory/scoped_vector.h" |
7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
8 #include "base/time.h" | 8 #include "base/time.h" |
9 #include "chrome/browser/prerender/prerender_contents.h" | 9 #include "chrome/browser/prerender/prerender_contents.h" |
10 #include "chrome/browser/prerender/prerender_link_manager.h" | 10 #include "chrome/browser/prerender/prerender_link_manager.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 | 21 |
22 using content::BrowserThread; | 22 using content::BrowserThread; |
23 using content::Referrer; | 23 using content::Referrer; |
24 | 24 |
25 namespace prerender { | 25 namespace prerender { |
26 | 26 |
27 namespace { | 27 namespace { |
28 | 28 |
29 class DummyPrerenderContents : public PrerenderContents { | 29 class DummyPrerenderContents : public PrerenderContents { |
30 public: | 30 public: |
31 DummyPrerenderContents(PrerenderManager* prerender_manager, | 31 DummyPrerenderContents( |
32 PrerenderTracker* prerender_tracker, | 32 PrerenderManager* prerender_manager, |
33 const GURL& url, | 33 PrerenderRenderViewTracker* prerender_render_view_tracker, |
34 Origin origin, | 34 const GURL& url, Origin origin, FinalStatus expected_final_status) |
35 FinalStatus expected_final_status) | 35 : PrerenderContents(prerender_manager, prerender_render_view_tracker, |
36 : PrerenderContents(prerender_manager, prerender_tracker, | |
37 NULL, url, Referrer(), origin, | 36 NULL, url, Referrer(), origin, |
38 PrerenderManager::kNoExperiment), | 37 PrerenderManager::kNoExperiment), |
39 expected_final_status_(expected_final_status) { | 38 expected_final_status_(expected_final_status) { |
40 } | 39 } |
41 | 40 |
42 virtual ~DummyPrerenderContents() { | 41 virtual ~DummyPrerenderContents() { |
43 EXPECT_EQ(expected_final_status_, final_status()); | 42 EXPECT_EQ(expected_final_status_, final_status()); |
44 } | 43 } |
45 | 44 |
46 virtual void StartPrerendering( | 45 virtual void StartPrerendering( |
(...skipping 19 matching lines...) Expand all Loading... |
66 bool prerendering_has_been_cancelled() const { | 65 bool prerendering_has_been_cancelled() const { |
67 return PrerenderContents::prerendering_has_been_cancelled(); | 66 return PrerenderContents::prerendering_has_been_cancelled(); |
68 } | 67 } |
69 | 68 |
70 private: | 69 private: |
71 FinalStatus expected_final_status_; | 70 FinalStatus expected_final_status_; |
72 }; | 71 }; |
73 | 72 |
74 class TestPrerenderManager : public PrerenderManager { | 73 class TestPrerenderManager : public PrerenderManager { |
75 public: | 74 public: |
76 explicit TestPrerenderManager(PrerenderTracker* prerender_tracker) | 75 explicit TestPrerenderManager( |
77 : PrerenderManager(&profile_, prerender_tracker), | 76 PrerenderRenderViewTracker* prerender_render_view_tracker) |
| 77 : PrerenderManager(&profile_, prerender_render_view_tracker), |
78 time_(base::Time::Now()), | 78 time_(base::Time::Now()), |
79 time_ticks_(base::TimeTicks::Now()), | 79 time_ticks_(base::TimeTicks::Now()), |
80 next_prerender_contents_(NULL), | 80 next_prerender_contents_(NULL), |
81 prerender_tracker_(prerender_tracker) { | 81 prerender_render_view_tracker_(prerender_render_view_tracker) { |
82 set_rate_limit_enabled(false); | 82 set_rate_limit_enabled(false); |
83 } | 83 } |
84 | 84 |
85 virtual ~TestPrerenderManager() { | 85 virtual ~TestPrerenderManager() { |
86 if (next_prerender_contents()) { | 86 if (next_prerender_contents()) { |
87 next_prerender_contents_.release()->Destroy( | 87 next_prerender_contents_.release()->Destroy( |
88 FINAL_STATUS_MANAGER_SHUTDOWN); | 88 FINAL_STATUS_MANAGER_SHUTDOWN); |
89 } | 89 } |
90 // Set the final status for all PrerenderContents with an expected final | 90 // Set the final status for all PrerenderContents with an expected final |
91 // status of FINAL_STATUS_USED. These values are normally set when the | 91 // status of FINAL_STATUS_USED. These values are normally set when the |
(...skipping 12 matching lines...) Expand all Loading... |
104 } | 104 } |
105 | 105 |
106 void AdvanceTimeTicks(base::TimeDelta delta) { | 106 void AdvanceTimeTicks(base::TimeDelta delta) { |
107 time_ticks_ += delta; | 107 time_ticks_ += delta; |
108 } | 108 } |
109 | 109 |
110 DummyPrerenderContents* CreateNextPrerenderContents( | 110 DummyPrerenderContents* CreateNextPrerenderContents( |
111 const GURL& url, | 111 const GURL& url, |
112 FinalStatus expected_final_status) { | 112 FinalStatus expected_final_status) { |
113 DummyPrerenderContents* prerender_contents = | 113 DummyPrerenderContents* prerender_contents = |
114 new DummyPrerenderContents(this, prerender_tracker_, url, | 114 new DummyPrerenderContents(this, prerender_render_view_tracker_, url, |
115 ORIGIN_LINK_REL_PRERENDER, | 115 ORIGIN_LINK_REL_PRERENDER, |
116 expected_final_status); | 116 expected_final_status); |
117 SetNextPrerenderContents(prerender_contents); | 117 SetNextPrerenderContents(prerender_contents); |
118 return prerender_contents; | 118 return prerender_contents; |
119 } | 119 } |
120 | 120 |
121 DummyPrerenderContents* CreateNextPrerenderContents( | 121 DummyPrerenderContents* CreateNextPrerenderContents( |
122 const GURL& url, | 122 const GURL& url, |
123 Origin origin, | 123 Origin origin, |
124 FinalStatus expected_final_status) { | 124 FinalStatus expected_final_status) { |
125 DummyPrerenderContents* prerender_contents = | 125 DummyPrerenderContents* prerender_contents = |
126 new DummyPrerenderContents(this, prerender_tracker_, url, | 126 new DummyPrerenderContents(this, prerender_render_view_tracker_, url, |
127 origin, expected_final_status); | 127 origin, expected_final_status); |
128 SetNextPrerenderContents(prerender_contents); | 128 SetNextPrerenderContents(prerender_contents); |
129 return prerender_contents; | 129 return prerender_contents; |
130 } | 130 } |
131 | 131 |
132 DummyPrerenderContents* CreateNextPrerenderContents( | 132 DummyPrerenderContents* CreateNextPrerenderContents( |
133 const GURL& url, | 133 const GURL& url, |
134 const std::vector<GURL>& alias_urls, | 134 const std::vector<GURL>& alias_urls, |
135 FinalStatus expected_final_status) { | 135 FinalStatus expected_final_status) { |
136 DummyPrerenderContents* prerender_contents = | 136 DummyPrerenderContents* prerender_contents = |
137 new DummyPrerenderContents(this, prerender_tracker_, url, | 137 new DummyPrerenderContents(this, prerender_render_view_tracker_, url, |
138 ORIGIN_LINK_REL_PRERENDER, | 138 ORIGIN_LINK_REL_PRERENDER, |
139 expected_final_status); | 139 expected_final_status); |
140 for (std::vector<GURL>::const_iterator it = alias_urls.begin(); | 140 for (std::vector<GURL>::const_iterator it = alias_urls.begin(); |
141 it != alias_urls.end(); | 141 it != alias_urls.end(); |
142 ++it) { | 142 ++it) { |
143 EXPECT_TRUE(prerender_contents->AddAliasURL(*it)); | 143 EXPECT_TRUE(prerender_contents->AddAliasURL(*it)); |
144 } | 144 } |
145 SetNextPrerenderContents(prerender_contents); | 145 SetNextPrerenderContents(prerender_contents); |
146 return prerender_contents; | 146 return prerender_contents; |
147 } | 147 } |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 return next_prerender_contents_.release(); | 181 return next_prerender_contents_.release(); |
182 } | 182 } |
183 | 183 |
184 base::Time time_; | 184 base::Time time_; |
185 base::TimeTicks time_ticks_; | 185 base::TimeTicks time_ticks_; |
186 scoped_ptr<PrerenderContents> next_prerender_contents_; | 186 scoped_ptr<PrerenderContents> next_prerender_contents_; |
187 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED, | 187 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED, |
188 // tracked so they will be automatically deleted. | 188 // tracked so they will be automatically deleted. |
189 ScopedVector<PrerenderContents> used_prerender_contents_; | 189 ScopedVector<PrerenderContents> used_prerender_contents_; |
190 | 190 |
191 PrerenderTracker* prerender_tracker_; | 191 PrerenderRenderViewTracker* prerender_render_view_tracker_; |
192 | 192 |
193 TestingProfile profile_; | 193 TestingProfile profile_; |
194 }; | 194 }; |
195 | 195 |
196 class RestorePrerenderMode { | 196 class RestorePrerenderMode { |
197 public: | 197 public: |
198 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) { | 198 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) { |
199 } | 199 } |
200 | 200 |
201 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); } | 201 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); } |
202 private: | 202 private: |
203 PrerenderManager::PrerenderManagerMode prev_mode_; | 203 PrerenderManager::PrerenderManagerMode prev_mode_; |
204 }; | 204 }; |
205 | 205 |
206 } // namespace | 206 } // namespace |
207 | 207 |
208 class PrerenderTest : public testing::Test { | 208 class PrerenderTest : public testing::Test { |
209 public: | 209 public: |
210 static const int kDefaultChildId = -1; | 210 static const int kDefaultChildId = -1; |
211 static const int kDefaultRenderViewRouteId = -1; | 211 static const int kDefaultRenderViewRouteId = -1; |
212 | 212 |
213 PrerenderTest() : ui_thread_(BrowserThread::UI, &message_loop_), | 213 PrerenderTest() |
214 prerender_manager_( | 214 : ui_thread_(BrowserThread::UI, &message_loop_), |
215 new TestPrerenderManager(prerender_tracker())), | 215 prerender_manager_( |
216 prerender_link_manager_( | 216 new TestPrerenderManager(prerender_render_view_tracker())), |
217 new PrerenderLinkManager(prerender_manager_.get())), | 217 prerender_link_manager_( |
218 last_prerender_id_(0) { | 218 new PrerenderLinkManager(prerender_manager_.get())), |
| 219 last_prerender_id_(0) { |
219 // Enable omnibox prerendering. | 220 // Enable omnibox prerendering. |
220 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 221 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
221 switches::kPrerenderFromOmnibox, | 222 switches::kPrerenderFromOmnibox, |
222 switches::kPrerenderFromOmniboxSwitchValueEnabled); | 223 switches::kPrerenderFromOmniboxSwitchValueEnabled); |
223 } | 224 } |
224 | 225 |
225 TestPrerenderManager* prerender_manager() { | 226 TestPrerenderManager* prerender_manager() { |
226 return prerender_manager_.get(); | 227 return prerender_manager_.get(); |
227 } | 228 } |
228 | 229 |
(...skipping 15 matching lines...) Expand all Loading... |
244 | 245 |
245 // Shorthand to add a simple preload with a reasonable source. | 246 // Shorthand to add a simple preload with a reasonable source. |
246 bool AddSimplePrerender(const GURL& url) { | 247 bool AddSimplePrerender(const GURL& url) { |
247 return prerender_link_manager()->OnAddPrerender( | 248 return prerender_link_manager()->OnAddPrerender( |
248 kDefaultChildId, GetNextPrerenderID(), | 249 kDefaultChildId, GetNextPrerenderID(), |
249 url, content::Referrer(), | 250 url, content::Referrer(), |
250 gfx::Size(), kDefaultRenderViewRouteId); | 251 gfx::Size(), kDefaultRenderViewRouteId); |
251 } | 252 } |
252 | 253 |
253 private: | 254 private: |
254 PrerenderTracker* prerender_tracker() { | 255 PrerenderRenderViewTracker* prerender_render_view_tracker() { |
255 return g_browser_process->prerender_tracker(); | 256 return g_browser_process->prerender_render_view_tracker(); |
256 } | 257 } |
257 | 258 |
258 // Needed to pass PrerenderManager's DCHECKs. | 259 // Needed to pass PrerenderManager's DCHECKs. |
259 MessageLoop message_loop_; | 260 MessageLoop message_loop_; |
260 content::TestBrowserThread ui_thread_; | 261 content::TestBrowserThread ui_thread_; |
261 scoped_ptr<TestPrerenderManager> prerender_manager_; | 262 scoped_ptr<TestPrerenderManager> prerender_manager_; |
262 scoped_ptr<PrerenderLinkManager> prerender_link_manager_; | 263 scoped_ptr<PrerenderLinkManager> prerender_link_manager_; |
263 int last_prerender_id_; | 264 int last_prerender_id_; |
264 }; | 265 }; |
265 | 266 |
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
911 DummyPrerenderContents* second_prerender_contents = | 912 DummyPrerenderContents* second_prerender_contents = |
912 prerender_manager()->CreateNextPrerenderContents( | 913 prerender_manager()->CreateNextPrerenderContents( |
913 url, FINAL_STATUS_USED); | 914 url, FINAL_STATUS_USED); |
914 EXPECT_TRUE(AddSimplePrerender(url)); | 915 EXPECT_TRUE(AddSimplePrerender(url)); |
915 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); | 916 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); |
916 ASSERT_EQ(second_prerender_contents, prerender_manager()->GetEntry(url)); | 917 ASSERT_EQ(second_prerender_contents, prerender_manager()->GetEntry(url)); |
917 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | 918 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
918 } | 919 } |
919 | 920 |
920 } // namespace prerender | 921 } // namespace prerender |
OLD | NEW |