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/stringprintf.h" | 8 #include "base/stringprintf.h" |
9 #include "base/time.h" | 9 #include "base/time.h" |
10 #include "chrome/browser/prerender/prerender_contents.h" | 10 #include "chrome/browser/prerender/prerender_contents.h" |
(...skipping 30 matching lines...) Expand all Loading... |
41 Origin origin, | 41 Origin origin, |
42 FinalStatus expected_final_status); | 42 FinalStatus expected_final_status); |
43 | 43 |
44 virtual ~DummyPrerenderContents() { | 44 virtual ~DummyPrerenderContents() { |
45 EXPECT_EQ(expected_final_status_, final_status()); | 45 EXPECT_EQ(expected_final_status_, final_status()); |
46 } | 46 } |
47 | 47 |
48 virtual void StartPrerendering( | 48 virtual void StartPrerendering( |
49 int ALLOW_UNUSED creator_child_id, | 49 int ALLOW_UNUSED creator_child_id, |
50 const gfx::Size& ALLOW_UNUSED size, | 50 const gfx::Size& ALLOW_UNUSED size, |
51 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace, | 51 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace) |
52 bool is_control_group) OVERRIDE; | 52 OVERRIDE; |
53 | 53 |
54 virtual bool GetChildId(int* child_id) const OVERRIDE { | 54 virtual bool GetChildId(int* child_id) const OVERRIDE { |
55 // Having a default child_id of -1 forces pending prerenders not to fail | 55 // Having a default child_id of -1 forces pending prerenders not to fail |
56 // on session storage and cross domain checking. | 56 // on session storage and cross domain checking. |
57 *child_id = -1; | 57 *child_id = -1; |
58 return true; | 58 return true; |
59 } | 59 } |
60 | 60 |
61 virtual bool GetRouteId(int* route_id) const OVERRIDE { | 61 virtual bool GetRouteId(int* route_id) const OVERRIDE { |
62 *route_id = 0; | 62 *route_id = route_id_; |
63 return true; | 63 return true; |
64 } | 64 } |
65 | 65 |
66 FinalStatus expected_final_status() const { return expected_final_status_; } | 66 FinalStatus expected_final_status() const { return expected_final_status_; } |
67 | 67 |
68 bool prerendering_has_been_cancelled() const { | 68 bool prerendering_has_been_cancelled() const { |
69 return PrerenderContents::prerendering_has_been_cancelled(); | 69 return PrerenderContents::prerendering_has_been_cancelled(); |
70 } | 70 } |
71 | 71 |
72 private: | 72 private: |
| 73 static int g_next_route_id_; |
| 74 int route_id_; |
| 75 |
73 UnitTestPrerenderManager* test_prerender_manager_; | 76 UnitTestPrerenderManager* test_prerender_manager_; |
74 FinalStatus expected_final_status_; | 77 FinalStatus expected_final_status_; |
75 }; | 78 }; |
76 | 79 |
| 80 int DummyPrerenderContents::g_next_route_id_ = 0; |
| 81 |
77 const gfx::Size kSize(640, 480); | 82 const gfx::Size kSize(640, 480); |
78 | 83 |
79 } // namespace | 84 } // namespace |
80 | 85 |
81 class UnitTestPrerenderManager : public PrerenderManager { | 86 class UnitTestPrerenderManager : public PrerenderManager { |
82 public: | 87 public: |
83 using PrerenderManager::kMinTimeBetweenPrerendersMs; | 88 using PrerenderManager::kMinTimeBetweenPrerendersMs; |
84 using PrerenderManager::kNavigationRecordWindowMs; | 89 using PrerenderManager::kNavigationRecordWindowMs; |
85 | 90 |
86 explicit UnitTestPrerenderManager(Profile* profile, | 91 explicit UnitTestPrerenderManager(Profile* profile, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 PrerenderContents* FindAndUseEntry(const GURL& url) { | 127 PrerenderContents* FindAndUseEntry(const GURL& url) { |
123 PrerenderData* prerender_data = FindPrerenderData(url, NULL); | 128 PrerenderData* prerender_data = FindPrerenderData(url, NULL); |
124 if (!prerender_data) | 129 if (!prerender_data) |
125 return NULL; | 130 return NULL; |
126 ScopedVector<PrerenderData>::iterator to_erase = | 131 ScopedVector<PrerenderData>::iterator to_erase = |
127 FindIteratorForPrerenderContents(prerender_data->contents()); | 132 FindIteratorForPrerenderContents(prerender_data->contents()); |
128 CHECK(to_erase != active_prerenders_.end()); | 133 CHECK(to_erase != active_prerenders_.end()); |
129 PrerenderContents* prerender_contents = prerender_data->ReleaseContents(); | 134 PrerenderContents* prerender_contents = prerender_data->ReleaseContents(); |
130 active_prerenders_.erase(to_erase); | 135 active_prerenders_.erase(to_erase); |
131 | 136 |
132 prerender_contents->set_final_status(FINAL_STATUS_USED); | 137 prerender_contents->SetFinalStatus(FINAL_STATUS_USED); |
133 prerender_contents->StartPendingPrerenders(); | 138 prerender_contents->StartPendingPrerenders(); |
134 return prerender_contents; | 139 return prerender_contents; |
135 } | 140 } |
136 | 141 |
137 void AdvanceTime(TimeDelta delta) { | 142 void AdvanceTime(TimeDelta delta) { |
138 time_ += delta; | 143 time_ += delta; |
139 } | 144 } |
140 | 145 |
141 void AdvanceTimeTicks(TimeDelta delta) { | 146 void AdvanceTimeTicks(TimeDelta delta) { |
142 time_ticks_ += delta; | 147 time_ticks_ += delta; |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 private: | 242 private: |
238 PrerenderManager::PrerenderManagerMode prev_mode_; | 243 PrerenderManager::PrerenderManagerMode prev_mode_; |
239 }; | 244 }; |
240 | 245 |
241 DummyPrerenderContents::DummyPrerenderContents( | 246 DummyPrerenderContents::DummyPrerenderContents( |
242 UnitTestPrerenderManager* test_prerender_manager, | 247 UnitTestPrerenderManager* test_prerender_manager, |
243 PrerenderTracker* prerender_tracker, | 248 PrerenderTracker* prerender_tracker, |
244 const GURL& url, | 249 const GURL& url, |
245 Origin origin, | 250 Origin origin, |
246 FinalStatus expected_final_status) | 251 FinalStatus expected_final_status) |
247 : PrerenderContents(test_prerender_manager, prerender_tracker, | 252 : PrerenderContents(test_prerender_manager, |
248 NULL, url, Referrer(), origin, | 253 NULL, url, Referrer(), origin, |
249 PrerenderManager::kNoExperiment), | 254 PrerenderManager::kNoExperiment), |
| 255 route_id_(g_next_route_id_++), |
250 test_prerender_manager_(test_prerender_manager), | 256 test_prerender_manager_(test_prerender_manager), |
251 expected_final_status_(expected_final_status) { | 257 expected_final_status_(expected_final_status) { |
252 } | 258 } |
253 | 259 |
254 void DummyPrerenderContents::StartPrerendering( | 260 void DummyPrerenderContents::StartPrerendering( |
255 int ALLOW_UNUSED creator_child_id, | 261 int ALLOW_UNUSED creator_child_id, |
256 const gfx::Size& ALLOW_UNUSED size, | 262 const gfx::Size& ALLOW_UNUSED size, |
257 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace, | 263 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace) { |
258 bool is_control_group) { | |
259 // In the base PrerenderContents implementation, StartPrerendering will | 264 // In the base PrerenderContents implementation, StartPrerendering will |
260 // be called even when the PrerenderManager is part of the control group, | 265 // be called even when the PrerenderManager is part of the control group, |
261 // but it will early exit before actually creating a new RenderView if | 266 // but it will early exit before actually creating a new RenderView if |
262 // |is_control_group| is true; | 267 // |is_control_group| is true; |
263 if (!is_control_group) | 268 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks(); |
| 269 if (!test_prerender_manager_->IsControlGroup(experiment_id())) { |
264 prerendering_has_started_ = true; | 270 prerendering_has_started_ = true; |
265 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks(); | 271 NotifyPrerenderStart(); |
| 272 } |
266 } | 273 } |
267 | 274 |
268 class PrerenderTest : public testing::Test { | 275 class PrerenderTest : public testing::Test { |
269 public: | 276 public: |
270 static const int kDefaultChildId = -1; | 277 static const int kDefaultChildId = -1; |
271 static const int kDefaultRenderViewRouteId = -1; | 278 static const int kDefaultRenderViewRouteId = -1; |
272 | 279 |
273 PrerenderTest() : ui_thread_(BrowserThread::UI, &message_loop_), | 280 PrerenderTest() : ui_thread_(BrowserThread::UI, &message_loop_), |
274 prerender_manager_(new UnitTestPrerenderManager( | 281 prerender_manager_(new UnitTestPrerenderManager( |
275 &profile_, prerender_tracker())), | 282 &profile_, prerender_tracker())), |
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1190 prerender_manager()->CreateNextPrerenderContents( | 1197 prerender_manager()->CreateNextPrerenderContents( |
1191 url, FINAL_STATUS_USED); | 1198 url, FINAL_STATUS_USED); |
1192 EXPECT_TRUE(AddSimplePrerender(url)); | 1199 EXPECT_TRUE(AddSimplePrerender(url)); |
1193 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); | 1200 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); |
1194 ASSERT_EQ(second_prerender_contents, | 1201 ASSERT_EQ(second_prerender_contents, |
1195 prerender_manager()->FindAndUseEntry(url)); | 1202 prerender_manager()->FindAndUseEntry(url)); |
1196 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | 1203 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
1197 } | 1204 } |
1198 | 1205 |
1199 } // namespace prerender | 1206 } // namespace prerender |
OLD | NEW |