| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 PrerenderContents* prerender_contents) { | 209 PrerenderContents* prerender_contents) { |
| 210 prerender_contents_map_[std::make_pair(child_id, route_id)] = | 210 prerender_contents_map_[std::make_pair(child_id, route_id)] = |
| 211 prerender_contents; | 211 prerender_contents; |
| 212 } | 212 } |
| 213 | 213 |
| 214 void DummyPrerenderContentsDestroyed(int child_id, | 214 void DummyPrerenderContentsDestroyed(int child_id, |
| 215 int route_id) { | 215 int route_id) { |
| 216 prerender_contents_map_.erase(std::make_pair(child_id, route_id)); | 216 prerender_contents_map_.erase(std::make_pair(child_id, route_id)); |
| 217 } | 217 } |
| 218 | 218 |
| 219 void SetIsLowEndDevice(bool is_low_end_device) { |
| 220 is_low_end_device_ = is_low_end_device; |
| 221 } |
| 222 |
| 219 private: | 223 private: |
| 224 bool IsLowEndDevice() const override { return is_low_end_device_; } |
| 225 |
| 220 DummyPrerenderContents* SetNextPrerenderContents( | 226 DummyPrerenderContents* SetNextPrerenderContents( |
| 221 std::unique_ptr<DummyPrerenderContents> prerender_contents) { | 227 std::unique_ptr<DummyPrerenderContents> prerender_contents) { |
| 222 CHECK(!next_prerender_contents_); | 228 CHECK(!next_prerender_contents_); |
| 223 DummyPrerenderContents* contents_ptr = prerender_contents.get(); | 229 DummyPrerenderContents* contents_ptr = prerender_contents.get(); |
| 224 next_prerender_contents_ = std::move(prerender_contents); | 230 next_prerender_contents_ = std::move(prerender_contents); |
| 225 return contents_ptr; | 231 return contents_ptr; |
| 226 } | 232 } |
| 227 | 233 |
| 228 std::unique_ptr<PrerenderContents> CreatePrerenderContents( | 234 std::unique_ptr<PrerenderContents> CreatePrerenderContents( |
| 229 const GURL& url, | 235 const GURL& url, |
| 230 const Referrer& referrer, | 236 const Referrer& referrer, |
| 231 Origin origin) override { | 237 Origin origin) override { |
| 232 CHECK(next_prerender_contents_); | 238 CHECK(next_prerender_contents_); |
| 233 EXPECT_EQ(url, next_prerender_contents_->prerender_url()); | 239 EXPECT_EQ(url, next_prerender_contents_->prerender_url()); |
| 234 EXPECT_EQ(origin, next_prerender_contents_->origin()); | 240 EXPECT_EQ(origin, next_prerender_contents_->origin()); |
| 235 return std::move(next_prerender_contents_); | 241 return std::move(next_prerender_contents_); |
| 236 } | 242 } |
| 237 | 243 |
| 238 // Maintain a map from route pairs to PrerenderContents for | 244 // Maintain a map from route pairs to PrerenderContents for |
| 239 // GetPrerenderContentsForRoute. | 245 // GetPrerenderContentsForRoute. |
| 240 using PrerenderContentsMap = | 246 using PrerenderContentsMap = |
| 241 std::map<std::pair<int, int>, PrerenderContents*>; | 247 std::map<std::pair<int, int>, PrerenderContents*>; |
| 242 PrerenderContentsMap prerender_contents_map_; | 248 PrerenderContentsMap prerender_contents_map_; |
| 243 | 249 |
| 244 Time time_; | 250 Time time_; |
| 245 TimeTicks time_ticks_; | 251 TimeTicks time_ticks_; |
| 246 std::unique_ptr<PrerenderContents> next_prerender_contents_; | 252 std::unique_ptr<PrerenderContents> next_prerender_contents_; |
| 253 bool is_low_end_device_; |
| 247 }; | 254 }; |
| 248 | 255 |
| 249 class RestorePrerenderMode { | 256 class RestorePrerenderMode { |
| 250 public: | 257 public: |
| 251 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) { | 258 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) { |
| 252 } | 259 } |
| 253 | 260 |
| 254 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); } | 261 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); } |
| 255 | 262 |
| 256 private: | 263 private: |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 static const int kDefaultChildId = -1; | 310 static const int kDefaultChildId = -1; |
| 304 static const int kDefaultRenderViewRouteId = -1; | 311 static const int kDefaultRenderViewRouteId = -1; |
| 305 | 312 |
| 306 PrerenderTest() | 313 PrerenderTest() |
| 307 : ui_thread_(BrowserThread::UI, &message_loop_), | 314 : ui_thread_(BrowserThread::UI, &message_loop_), |
| 308 prerender_manager_(new UnitTestPrerenderManager(&profile_)), | 315 prerender_manager_(new UnitTestPrerenderManager(&profile_)), |
| 309 prerender_link_manager_( | 316 prerender_link_manager_( |
| 310 new PrerenderLinkManager(prerender_manager_.get())), | 317 new PrerenderLinkManager(prerender_manager_.get())), |
| 311 last_prerender_id_(0), | 318 last_prerender_id_(0), |
| 312 field_trial_list_(nullptr) { | 319 field_trial_list_(nullptr) { |
| 320 prerender_manager()->SetIsLowEndDevice(false); |
| 321 |
| 313 // Enable omnibox prerendering. | 322 // Enable omnibox prerendering. |
| 314 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 323 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 315 switches::kPrerenderFromOmnibox, | 324 switches::kPrerenderFromOmnibox, |
| 316 switches::kPrerenderFromOmniboxSwitchValueEnabled); | 325 switches::kPrerenderFromOmniboxSwitchValueEnabled); |
| 317 } | 326 } |
| 318 | 327 |
| 319 ~PrerenderTest() override { | 328 ~PrerenderTest() override { |
| 320 prerender_link_manager_->OnChannelClosing(kDefaultChildId); | 329 prerender_link_manager_->OnChannelClosing(kDefaultChildId); |
| 321 prerender_link_manager_->Shutdown(); | 330 prerender_link_manager_->Shutdown(); |
| 322 prerender_manager_->Shutdown(); | 331 prerender_manager_->Shutdown(); |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 430 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN); | 439 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN); |
| 431 std::unique_ptr<PrerenderHandle> prerender_handle( | 440 std::unique_ptr<PrerenderHandle> prerender_handle( |
| 432 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize)); | 441 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize)); |
| 433 EXPECT_TRUE(prerender_handle); | 442 EXPECT_TRUE(prerender_handle); |
| 434 EXPECT_TRUE(prerender_handle->IsPrerendering()); | 443 EXPECT_TRUE(prerender_handle->IsPrerendering()); |
| 435 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 444 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 436 EXPECT_EQ(prerender_contents, prerender_handle->contents()); | 445 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
| 437 EXPECT_EQ(ORIGIN_OFFLINE, prerender_handle->contents()->origin()); | 446 EXPECT_EQ(ORIGIN_OFFLINE, prerender_handle->contents()->origin()); |
| 438 } | 447 } |
| 439 | 448 |
| 449 TEST_F(PrerenderTest, PrerenderDisabledOnLowEndDevice) { |
| 450 GURL url("http://www.google.com/"); |
| 451 ASSERT_TRUE(PrerenderManager::IsPrerenderingPossible()); |
| 452 prerender_manager()->SetIsLowEndDevice(true); |
| 453 EXPECT_FALSE(AddSimplePrerender(url)); |
| 454 } |
| 455 |
| 456 TEST_F(PrerenderTest, OfflinePrerenderPossibleOnLowEndDevice) { |
| 457 GURL url("http://www.google.com/"); |
| 458 ASSERT_TRUE(PrerenderManager::IsPrerenderingPossible()); |
| 459 |
| 460 prerender_manager()->SetIsLowEndDevice(true); |
| 461 |
| 462 DummyPrerenderContents* prerender_contents = |
| 463 prerender_manager()->CreateNextPrerenderContents( |
| 464 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN); |
| 465 std::unique_ptr<PrerenderHandle> prerender_handle( |
| 466 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize)); |
| 467 EXPECT_TRUE(prerender_handle); |
| 468 EXPECT_TRUE(prerender_handle->IsPrerendering()); |
| 469 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 470 } |
| 471 |
| 440 TEST_F(PrerenderTest, FoundTest) { | 472 TEST_F(PrerenderTest, FoundTest) { |
| 441 GURL url("http://www.google.com/"); | 473 GURL url("http://www.google.com/"); |
| 442 DummyPrerenderContents* prerender_contents = | 474 DummyPrerenderContents* prerender_contents = |
| 443 prerender_manager()->CreateNextPrerenderContents( | 475 prerender_manager()->CreateNextPrerenderContents( |
| 444 url, | 476 url, |
| 445 FINAL_STATUS_USED); | 477 FINAL_STATUS_USED); |
| 446 EXPECT_TRUE(AddSimplePrerender(url)); | 478 EXPECT_TRUE(AddSimplePrerender(url)); |
| 447 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 479 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 448 std::unique_ptr<PrerenderContents> entry = | 480 std::unique_ptr<PrerenderContents> entry = |
| 449 prerender_manager()->FindAndUseEntry(url); | 481 prerender_manager()->FindAndUseEntry(url); |
| (...skipping 1178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1628 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1660 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1629 EXPECT_EQ(prerender_contents, prerender_handle->contents()); | 1661 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
| 1630 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); | 1662 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); |
| 1631 std::unique_ptr<PrerenderContents> entry = | 1663 std::unique_ptr<PrerenderContents> entry = |
| 1632 prerender_manager()->FindAndUseEntry(url); | 1664 prerender_manager()->FindAndUseEntry(url); |
| 1633 ASSERT_EQ(prerender_contents, entry.get()); | 1665 ASSERT_EQ(prerender_contents, entry.get()); |
| 1634 EXPECT_FALSE(prerender_handle->IsPrerendering()); | 1666 EXPECT_FALSE(prerender_handle->IsPrerendering()); |
| 1635 } | 1667 } |
| 1636 | 1668 |
| 1637 } // namespace prerender | 1669 } // namespace prerender |
| OLD | NEW |