Chromium Code Reviews| 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 bool is_control_group) 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; |
|
mmenke
2012/12/03 20:02:47
This is just weird. :(
(Not asking you change it
gavinp
2012/12/04 18:04:48
Yes, it is.
| |
| 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 s_next_route_id_; | |
|
mmenke
2012/12/03 20:02:47
I don't think I've seen a single static variable p
gavinp
2012/12/04 18:04:48
Done.
| |
| 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::s_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 150 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_(s_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) { | 264 bool is_control_group) { |
| 259 // In the base PrerenderContents implementation, StartPrerendering will | 265 // In the base PrerenderContents implementation, StartPrerendering will |
| 260 // be called even when the PrerenderManager is part of the control group, | 266 // 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 | 267 // but it will early exit before actually creating a new RenderView if |
| 262 // |is_control_group| is true; | 268 // |is_control_group| is true; |
| 263 if (!is_control_group) | 269 if (!is_control_group) |
| 264 prerendering_has_started_ = true; | 270 prerendering_has_started_ = true; |
| 265 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks(); | 271 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks(); |
| 272 NotifyPrerenderStart(); | |
| 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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 350 url, | 357 url, |
| 351 FINAL_STATUS_USED); | 358 FINAL_STATUS_USED); |
| 352 EXPECT_TRUE(AddSimplePrerender(url)); | 359 EXPECT_TRUE(AddSimplePrerender(url)); |
| 353 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 360 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 354 | 361 |
| 355 scoped_ptr<PrerenderHandle> duplicate_prerender_handle( | 362 scoped_ptr<PrerenderHandle> duplicate_prerender_handle( |
| 356 prerender_manager()->AddPrerenderFromLinkRelPrerender( | 363 prerender_manager()->AddPrerenderFromLinkRelPrerender( |
| 357 kDefaultChildId, kDefaultRenderViewRouteId, url, | 364 kDefaultChildId, kDefaultRenderViewRouteId, url, |
| 358 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); | 365 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); |
| 359 | 366 |
| 360 EXPECT_TRUE(duplicate_prerender_handle->IsValid()); | |
| 361 EXPECT_TRUE(duplicate_prerender_handle->IsPrerendering()); | 367 EXPECT_TRUE(duplicate_prerender_handle->IsPrerendering()); |
| 362 | 368 |
| 363 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | 369 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); |
| 364 | 370 |
| 365 EXPECT_FALSE(duplicate_prerender_handle->IsValid()); | |
|
mmenke
2012/12/03 20:02:47
Why remove these?
gavinp
2012/12/04 18:04:48
No good reason. Fixed.
| |
| 366 EXPECT_FALSE(duplicate_prerender_handle->IsPrerendering()); | 371 EXPECT_FALSE(duplicate_prerender_handle->IsPrerendering()); |
| 367 } | 372 } |
| 368 | 373 |
| 369 // Make sure that if queue a request, and a second prerender request for the | 374 // Make sure that if queue a request, and a second prerender request for the |
| 370 // same URL comes in, that we drop the second request and keep the first one. | 375 // same URL comes in, that we drop the second request and keep the first one. |
| 371 TEST_F(PrerenderTest, DropSecondRequestTest) { | 376 TEST_F(PrerenderTest, DropSecondRequestTest) { |
| 372 GURL url("http://www.google.com/"); | 377 GURL url("http://www.google.com/"); |
| 373 DummyPrerenderContents* prerender_contents = | 378 DummyPrerenderContents* prerender_contents = |
| 374 prerender_manager()->CreateNextPrerenderContents( | 379 prerender_manager()->CreateNextPrerenderContents( |
| 375 url, | 380 url, |
| (...skipping 818 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1194 EXPECT_TRUE(AddSimplePrerender(url)); | 1199 EXPECT_TRUE(AddSimplePrerender(url)); |
| 1195 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); | 1200 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); |
| 1196 ASSERT_EQ(second_prerender_contents, | 1201 ASSERT_EQ(second_prerender_contents, |
| 1197 prerender_manager()->FindAndUseEntry(url)); | 1202 prerender_manager()->FindAndUseEntry(url)); |
| 1198 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | 1203 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
| 1199 } | 1204 } |
| 1200 | 1205 |
| 1201 #endif // !(defined(OS_WIN) && defined(USE_AURA)) | 1206 #endif // !(defined(OS_WIN) && defined(USE_AURA)) |
| 1202 | 1207 |
| 1203 } // namespace prerender | 1208 } // namespace prerender |
| OLD | NEW |