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 <map> | |
| 6 #include <utility> | |
| 7 | |
| 5 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 6 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 7 #include "base/memory/scoped_vector.h" | 10 #include "base/memory/scoped_vector.h" |
| 8 #include "base/message_loop/message_loop.h" | 11 #include "base/message_loop/message_loop.h" |
| 9 #include "base/metrics/field_trial.h" | 12 #include "base/metrics/field_trial.h" |
| 10 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
| 11 #include "base/time/time.h" | 14 #include "base/time/time.h" |
| 12 #include "chrome/browser/prerender/prerender_contents.h" | 15 #include "chrome/browser/prerender/prerender_contents.h" |
| 13 #include "chrome/browser/prerender/prerender_handle.h" | 16 #include "chrome/browser/prerender/prerender_handle.h" |
| 14 #include "chrome/browser/prerender/prerender_link_manager.h" | 17 #include "chrome/browser/prerender/prerender_link_manager.h" |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 36 namespace { | 39 namespace { |
| 37 | 40 |
| 38 class DummyPrerenderContents : public PrerenderContents { | 41 class DummyPrerenderContents : public PrerenderContents { |
| 39 public: | 42 public: |
| 40 DummyPrerenderContents(UnitTestPrerenderManager* test_prerender_manager, | 43 DummyPrerenderContents(UnitTestPrerenderManager* test_prerender_manager, |
| 41 PrerenderTracker* prerender_tracker, | 44 PrerenderTracker* prerender_tracker, |
| 42 const GURL& url, | 45 const GURL& url, |
| 43 Origin origin, | 46 Origin origin, |
| 44 FinalStatus expected_final_status); | 47 FinalStatus expected_final_status); |
| 45 | 48 |
| 46 virtual ~DummyPrerenderContents() { | 49 virtual ~DummyPrerenderContents(); |
| 47 EXPECT_EQ(expected_final_status_, final_status()); | |
| 48 } | |
| 49 | 50 |
| 50 virtual void StartPrerendering( | 51 virtual void StartPrerendering( |
| 51 int ALLOW_UNUSED creator_child_id, | 52 int ALLOW_UNUSED creator_child_id, |
| 52 const gfx::Size& ALLOW_UNUSED size, | 53 const gfx::Size& ALLOW_UNUSED size, |
| 53 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace) | 54 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace) |
| 54 OVERRIDE; | 55 OVERRIDE; |
| 55 | 56 |
| 56 virtual bool GetChildId(int* child_id) const OVERRIDE { | 57 virtual bool GetChildId(int* child_id) const OVERRIDE { |
| 57 // Having a default child_id of -1 forces pending prerenders not to fail | 58 // Having a default child_id of -1 forces pending prerenders not to fail |
| 58 // on session storage and cross domain checking. | 59 // on session storage and cross domain checking. |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 128 PrerenderContents* FindAndUseEntry(const GURL& url) { | 129 PrerenderContents* FindAndUseEntry(const GURL& url) { |
| 129 PrerenderData* prerender_data = FindPrerenderData(url, NULL); | 130 PrerenderData* prerender_data = FindPrerenderData(url, NULL); |
| 130 if (!prerender_data) | 131 if (!prerender_data) |
| 131 return NULL; | 132 return NULL; |
| 132 ScopedVector<PrerenderData>::iterator to_erase = | 133 ScopedVector<PrerenderData>::iterator to_erase = |
| 133 FindIteratorForPrerenderContents(prerender_data->contents()); | 134 FindIteratorForPrerenderContents(prerender_data->contents()); |
| 134 CHECK(to_erase != active_prerenders_.end()); | 135 CHECK(to_erase != active_prerenders_.end()); |
| 135 PrerenderContents* prerender_contents = prerender_data->ReleaseContents(); | 136 PrerenderContents* prerender_contents = prerender_data->ReleaseContents(); |
| 136 active_prerenders_.erase(to_erase); | 137 active_prerenders_.erase(to_erase); |
| 137 | 138 |
| 138 prerender_contents->SetFinalStatus(FINAL_STATUS_USED); | |
| 139 prerender_contents->PrepareForUse(); | 139 prerender_contents->PrepareForUse(); |
| 140 return prerender_contents; | 140 return prerender_contents; |
| 141 } | 141 } |
| 142 | 142 |
| 143 void AdvanceTime(TimeDelta delta) { | 143 void AdvanceTime(TimeDelta delta) { |
| 144 time_ += delta; | 144 time_ += delta; |
| 145 } | 145 } |
| 146 | 146 |
| 147 void AdvanceTimeTicks(TimeDelta delta) { | 147 void AdvanceTimeTicks(TimeDelta delta) { |
| 148 time_ticks_ += delta; | 148 time_ticks_ += delta; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 197 | 197 |
| 198 // from PrerenderManager | 198 // from PrerenderManager |
| 199 virtual Time GetCurrentTime() const OVERRIDE { | 199 virtual Time GetCurrentTime() const OVERRIDE { |
| 200 return time_; | 200 return time_; |
| 201 } | 201 } |
| 202 | 202 |
| 203 virtual TimeTicks GetCurrentTimeTicks() const OVERRIDE { | 203 virtual TimeTicks GetCurrentTimeTicks() const OVERRIDE { |
| 204 return time_ticks_; | 204 return time_ticks_; |
| 205 } | 205 } |
| 206 | 206 |
| 207 virtual PrerenderContents* GetPrerenderContentsForRoute( | |
| 208 int child_id, int route_id) const OVERRIDE { | |
| 209 // Overridden for the PrerenderLinkManager's pending prerender logic. | |
| 210 PrerenderContentsMap::const_iterator iter = prerender_contents_map_.find( | |
| 211 std::make_pair(child_id, route_id)); | |
| 212 if (iter == prerender_contents_map_.end()) | |
| 213 return NULL; | |
| 214 return iter->second; | |
| 215 } | |
| 216 | |
| 217 void DummyPrerenderContentsStarted(int child_id, | |
| 218 int route_id, | |
| 219 PrerenderContents* prerender_contents) { | |
| 220 prerender_contents_map_[std::make_pair(child_id, route_id)] = | |
| 221 prerender_contents; | |
| 222 } | |
| 223 | |
| 224 void DummyPrerenderContentsDestroyed(int child_id, | |
| 225 int route_id) { | |
| 226 prerender_contents_map_.erase(std::make_pair(child_id, route_id)); | |
| 227 } | |
| 228 | |
| 207 private: | 229 private: |
| 208 void SetNextPrerenderContents(DummyPrerenderContents* prerender_contents) { | 230 void SetNextPrerenderContents(DummyPrerenderContents* prerender_contents) { |
| 209 CHECK(!next_prerender_contents_.get()); | 231 CHECK(!next_prerender_contents_.get()); |
| 210 next_prerender_contents_.reset(prerender_contents); | 232 next_prerender_contents_.reset(prerender_contents); |
| 211 if (prerender_contents->expected_final_status() == FINAL_STATUS_USED) | 233 if (prerender_contents->expected_final_status() == FINAL_STATUS_USED) |
| 212 used_prerender_contents_.push_back(prerender_contents); | 234 used_prerender_contents_.push_back(prerender_contents); |
| 213 } | 235 } |
| 214 | 236 |
| 215 | 237 |
| 216 virtual PrerenderContents* CreatePrerenderContents( | 238 virtual PrerenderContents* CreatePrerenderContents( |
| 217 const GURL& url, | 239 const GURL& url, |
| 218 const Referrer& referrer, | 240 const Referrer& referrer, |
| 219 Origin origin, | 241 Origin origin, |
| 220 uint8 experiment_id) OVERRIDE { | 242 uint8 experiment_id) OVERRIDE { |
| 221 CHECK(next_prerender_contents_.get()); | 243 CHECK(next_prerender_contents_.get()); |
| 222 EXPECT_EQ(url, next_prerender_contents_->prerender_url()); | 244 EXPECT_EQ(url, next_prerender_contents_->prerender_url()); |
| 223 EXPECT_EQ(origin, next_prerender_contents_->origin()); | 245 EXPECT_EQ(origin, next_prerender_contents_->origin()); |
| 224 return next_prerender_contents_.release(); | 246 return next_prerender_contents_.release(); |
| 225 } | 247 } |
| 226 | 248 |
| 249 // Maintain a map from route pairs to PrerenderContents for | |
| 250 // GetPrerenderContentsForRoute. | |
| 251 typedef std::map<std::pair<int,int>, PrerenderContents*> PrerenderContentsMap; | |
| 252 PrerenderContentsMap prerender_contents_map_; | |
| 253 | |
| 227 Time time_; | 254 Time time_; |
| 228 TimeTicks time_ticks_; | 255 TimeTicks time_ticks_; |
| 229 scoped_ptr<PrerenderContents> next_prerender_contents_; | 256 scoped_ptr<PrerenderContents> next_prerender_contents_; |
| 230 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED, | 257 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED, |
| 231 // tracked so they will be automatically deleted. | 258 // tracked so they will be automatically deleted. |
| 232 ScopedVector<PrerenderContents> used_prerender_contents_; | 259 ScopedVector<PrerenderContents> used_prerender_contents_; |
| 233 | 260 |
| 234 PrerenderTracker* prerender_tracker_; | 261 PrerenderTracker* prerender_tracker_; |
| 235 }; | 262 }; |
| 236 | 263 |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 251 Origin origin, | 278 Origin origin, |
| 252 FinalStatus expected_final_status) | 279 FinalStatus expected_final_status) |
| 253 : PrerenderContents(test_prerender_manager, | 280 : PrerenderContents(test_prerender_manager, |
| 254 NULL, url, Referrer(), origin, | 281 NULL, url, Referrer(), origin, |
| 255 PrerenderManager::kNoExperiment), | 282 PrerenderManager::kNoExperiment), |
| 256 route_id_(g_next_route_id_++), | 283 route_id_(g_next_route_id_++), |
| 257 test_prerender_manager_(test_prerender_manager), | 284 test_prerender_manager_(test_prerender_manager), |
| 258 expected_final_status_(expected_final_status) { | 285 expected_final_status_(expected_final_status) { |
| 259 } | 286 } |
| 260 | 287 |
| 288 DummyPrerenderContents::~DummyPrerenderContents() { | |
| 289 EXPECT_EQ(expected_final_status_, final_status()); | |
| 290 test_prerender_manager_->DummyPrerenderContentsDestroyed(-1, route_id_); | |
| 291 } | |
| 292 | |
| 261 void DummyPrerenderContents::StartPrerendering( | 293 void DummyPrerenderContents::StartPrerendering( |
| 262 int ALLOW_UNUSED creator_child_id, | 294 int ALLOW_UNUSED creator_child_id, |
| 263 const gfx::Size& ALLOW_UNUSED size, | 295 const gfx::Size& ALLOW_UNUSED size, |
| 264 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace) { | 296 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace) { |
| 265 // In the base PrerenderContents implementation, StartPrerendering will | 297 // In the base PrerenderContents implementation, StartPrerendering will |
| 266 // be called even when the PrerenderManager is part of the control group, | 298 // be called even when the PrerenderManager is part of the control group, |
| 267 // but it will early exit before actually creating a new RenderView if | 299 // but it will early exit before actually creating a new RenderView if |
| 268 // |is_control_group| is true; | 300 // |is_control_group| is true; |
| 269 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks(); | 301 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks(); |
| 270 if (!test_prerender_manager_->IsControlGroup(experiment_id())) { | 302 if (!test_prerender_manager_->IsControlGroup(experiment_id())) { |
| 271 prerendering_has_started_ = true; | 303 prerendering_has_started_ = true; |
| 304 test_prerender_manager_->DummyPrerenderContentsStarted(-1, route_id_, this); | |
| 272 NotifyPrerenderStart(); | 305 NotifyPrerenderStart(); |
| 273 } | 306 } |
| 274 } | 307 } |
| 275 | 308 |
| 276 class PrerenderTest : public testing::Test { | 309 class PrerenderTest : public testing::Test { |
| 277 public: | 310 public: |
| 278 static const int kDefaultChildId = -1; | 311 static const int kDefaultChildId = -1; |
| 279 static const int kDefaultRenderViewRouteId = -1; | 312 static const int kDefaultRenderViewRouteId = -1; |
| 280 | 313 |
| 281 PrerenderTest() : ui_thread_(BrowserThread::UI, &message_loop_), | 314 PrerenderTest() : ui_thread_(BrowserThread::UI, &message_loop_), |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 325 return ++last_prerender_id_; | 358 return ++last_prerender_id_; |
| 326 } | 359 } |
| 327 | 360 |
| 328 bool LauncherHasRunningPrerender(int child_id, int prerender_id) { | 361 bool LauncherHasRunningPrerender(int child_id, int prerender_id) { |
| 329 PrerenderLinkManager::LinkPrerender* prerender = | 362 PrerenderLinkManager::LinkPrerender* prerender = |
| 330 prerender_link_manager()->FindByLauncherChildIdAndPrerenderId( | 363 prerender_link_manager()->FindByLauncherChildIdAndPrerenderId( |
| 331 child_id, prerender_id); | 364 child_id, prerender_id); |
| 332 return prerender && prerender->handle; | 365 return prerender && prerender->handle; |
| 333 } | 366 } |
| 334 | 367 |
| 368 bool LauncherHasScheduledPrerender(int child_id, int prerender_id) { | |
| 369 PrerenderLinkManager::LinkPrerender* prerender = | |
| 370 prerender_link_manager()->FindByLauncherChildIdAndPrerenderId( | |
| 371 child_id, prerender_id); | |
| 372 return prerender != NULL; | |
| 373 } | |
| 374 | |
| 335 // Shorthand to add a simple prerender with a reasonable source. Returns | 375 // Shorthand to add a simple prerender with a reasonable source. Returns |
| 336 // true iff the prerender has been added to the PrerenderManager by the | 376 // true iff the prerender has been added to the PrerenderManager by the |
| 337 // PrerenderLinkManager and the PrerenderManager returned a handle. | 377 // PrerenderLinkManager and the PrerenderManager returned a handle. |
| 338 bool AddSimplePrerender(const GURL& url) { | 378 bool AddSimplePrerender(const GURL& url) { |
| 339 prerender_link_manager()->OnAddPrerender(kDefaultChildId, | 379 prerender_link_manager()->OnAddPrerender(kDefaultChildId, |
| 340 GetNextPrerenderID(), | 380 GetNextPrerenderID(), |
| 341 url, content::Referrer(), | 381 url, content::Referrer(), |
| 342 kSize, kDefaultRenderViewRouteId); | 382 kSize, kDefaultRenderViewRouteId); |
| 343 return LauncherHasRunningPrerender(kDefaultChildId, last_prerender_id()); | 383 return LauncherHasRunningPrerender(kDefaultChildId, last_prerender_id()); |
| 344 } | 384 } |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 580 prerender_manager()->CreateNextPrerenderContents(urls.back(), | 620 prerender_manager()->CreateNextPrerenderContents(urls.back(), |
| 581 FINAL_STATUS_USED)); | 621 FINAL_STATUS_USED)); |
| 582 EXPECT_TRUE(AddSimplePrerender(urls.back())); | 622 EXPECT_TRUE(AddSimplePrerender(urls.back())); |
| 583 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); | 623 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); |
| 584 EXPECT_TRUE(prerender_contentses.back()->prerendering_has_started()); | 624 EXPECT_TRUE(prerender_contentses.back()->prerendering_has_started()); |
| 585 } | 625 } |
| 586 | 626 |
| 587 if (concurrencies_to_test[i].max_link_concurrency > | 627 if (concurrencies_to_test[i].max_link_concurrency > |
| 588 effective_max_link_concurrency) { | 628 effective_max_link_concurrency) { |
| 589 // We should be able to launch more prerenders on this system, but not for | 629 // We should be able to launch more prerenders on this system, but not for |
| 590 // our current launcher. | 630 // the default launcher. |
| 591 int child_id; | |
| 592 int route_id; | |
| 593 ASSERT_TRUE(prerender_contentses.back()->GetChildId(&child_id)); | |
| 594 ASSERT_TRUE(prerender_contentses.back()->GetRouteId(&route_id)); | |
| 595 | |
| 596 GURL extra_url("http://google.com/extraurl"); | 631 GURL extra_url("http://google.com/extraurl"); |
| 597 prerender_link_manager()->OnAddPrerender(child_id, | 632 EXPECT_FALSE(AddSimplePrerender(extra_url)); |
| 598 GetNextPrerenderID(), | |
| 599 extra_url, content::Referrer(), | |
| 600 kSize, route_id); | |
| 601 const int prerender_id = last_prerender_id(); | 633 const int prerender_id = last_prerender_id(); |
| 602 EXPECT_TRUE(LauncherHasRunningPrerender(child_id, prerender_id)); | 634 EXPECT_TRUE(LauncherHasScheduledPrerender(kDefaultChildId, |
| 603 prerender_link_manager()->OnCancelPrerender(child_id, prerender_id); | 635 prerender_id)); |
| 604 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, prerender_id)); | 636 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, |
| 637 prerender_id); | |
| 638 EXPECT_FALSE(LauncherHasScheduledPrerender(kDefaultChildId, | |
| 639 prerender_id)); | |
| 605 } | 640 } |
| 606 | 641 |
| 607 DummyPrerenderContents* prerender_contents_to_delay = | 642 DummyPrerenderContents* prerender_contents_to_delay = |
| 608 prerender_manager()->CreateNextPrerenderContents(url_to_delay, | 643 prerender_manager()->CreateNextPrerenderContents(url_to_delay, |
| 609 FINAL_STATUS_USED); | 644 FINAL_STATUS_USED); |
| 610 EXPECT_FALSE(AddSimplePrerender(url_to_delay)); | 645 EXPECT_FALSE(AddSimplePrerender(url_to_delay)); |
| 611 EXPECT_FALSE(prerender_contents_to_delay->prerendering_has_started()); | 646 EXPECT_FALSE(prerender_contents_to_delay->prerendering_has_started()); |
| 612 EXPECT_NE(null, prerender_manager()->next_prerender_contents()); | 647 EXPECT_NE(null, prerender_manager()->next_prerender_contents()); |
| 613 EXPECT_EQ(null, prerender_manager()->FindEntry(url_to_delay)); | 648 EXPECT_EQ(null, prerender_manager()->FindEntry(url_to_delay)); |
| 614 for (size_t j = 0; j < effective_max_link_concurrency; ++j) { | 649 for (size_t j = 0; j < effective_max_link_concurrency; ++j) { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 670 FINAL_STATUS_USED); | 705 FINAL_STATUS_USED); |
| 671 EXPECT_TRUE(AddSimplePrerender(url)); | 706 EXPECT_TRUE(AddSimplePrerender(url)); |
| 672 | 707 |
| 673 int child_id; | 708 int child_id; |
| 674 int route_id; | 709 int route_id; |
| 675 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); | 710 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); |
| 676 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); | 711 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); |
| 677 | 712 |
| 678 GURL pending_url("http://news.google.com/"); | 713 GURL pending_url("http://news.google.com/"); |
| 679 | 714 |
| 715 // Schedule a pending prerender launched from the prerender. | |
| 680 DummyPrerenderContents* pending_prerender_contents = | 716 DummyPrerenderContents* pending_prerender_contents = |
| 681 prerender_manager()->CreateNextPrerenderContents( | 717 prerender_manager()->CreateNextPrerenderContents( |
| 682 pending_url, | 718 pending_url, |
| 683 ORIGIN_GWS_PRERENDER, | 719 ORIGIN_GWS_PRERENDER, |
| 684 FINAL_STATUS_USED); | 720 FINAL_STATUS_USED); |
| 685 scoped_ptr<PrerenderHandle> pending_prerender_handle( | 721 prerender_link_manager()->OnAddPrerender( |
| 686 prerender_manager()->AddPrerenderFromLinkRelPrerender( | 722 child_id, GetNextPrerenderID(), pending_url, |
| 687 child_id, route_id, pending_url, | 723 Referrer(url, blink::WebReferrerPolicyDefault), |
| 688 Referrer(url, blink::WebReferrerPolicyDefault), kSize)); | 724 kSize, route_id); |
| 689 CHECK(pending_prerender_handle.get()); | 725 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id())); |
| 690 EXPECT_FALSE(pending_prerender_handle->IsPrerendering()); | 726 EXPECT_FALSE(pending_prerender_contents->prerendering_has_started()); |
| 691 | 727 |
| 728 // Use the referring prerender. | |
| 692 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 729 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 693 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | 730 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); |
| 694 | 731 |
| 695 EXPECT_TRUE(pending_prerender_handle->IsPrerendering()); | 732 // The pending prerender should start now. |
| 733 EXPECT_TRUE(LauncherHasRunningPrerender(child_id, last_prerender_id())); | |
| 734 EXPECT_TRUE(pending_prerender_contents->prerendering_has_started()); | |
| 696 ASSERT_EQ(pending_prerender_contents, | 735 ASSERT_EQ(pending_prerender_contents, |
| 697 prerender_manager()->FindAndUseEntry(pending_url)); | 736 prerender_manager()->FindAndUseEntry(pending_url)); |
| 698 EXPECT_FALSE(pending_prerender_handle->IsPrerendering()); | |
| 699 } | 737 } |
| 700 | 738 |
| 701 TEST_F(PrerenderTest, InvalidPendingPrerenderTest) { | 739 TEST_F(PrerenderTest, InvalidPendingPrerenderTest) { |
| 702 GURL url("http://www.google.com/"); | 740 GURL url("http://www.google.com/"); |
| 703 DummyPrerenderContents* prerender_contents = | 741 DummyPrerenderContents* prerender_contents = |
| 704 prerender_manager()->CreateNextPrerenderContents( | 742 prerender_manager()->CreateNextPrerenderContents( |
| 705 url, | 743 url, |
| 706 FINAL_STATUS_USED); | 744 FINAL_STATUS_USED); |
| 707 EXPECT_TRUE(AddSimplePrerender(url)); | 745 EXPECT_TRUE(AddSimplePrerender(url)); |
| 708 | 746 |
| 709 int child_id; | 747 int child_id; |
| 710 int route_id; | 748 int route_id; |
| 711 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); | 749 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); |
| 712 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); | 750 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); |
| 713 | 751 |
| 714 // This pending URL has an unsupported scheme, and won't be able | 752 // This pending URL has an unsupported scheme, and won't be able |
| 715 // to start. | 753 // to start. |
| 716 GURL pending_url("ftp://news.google.com/"); | 754 GURL pending_url("ftp://news.google.com/"); |
| 717 | 755 |
| 718 prerender_manager()->CreateNextPrerenderContents( | 756 // Schedule a pending prerender launched from the prerender. |
| 719 pending_url, | 757 DummyPrerenderContents* pending_prerender_contents = |
| 720 ORIGIN_GWS_PRERENDER, | 758 prerender_manager()->CreateNextPrerenderContents( |
| 721 FINAL_STATUS_UNSUPPORTED_SCHEME); | 759 pending_url, |
| 722 scoped_ptr<PrerenderHandle> pending_prerender_handle( | 760 ORIGIN_GWS_PRERENDER, |
| 723 prerender_manager()->AddPrerenderFromLinkRelPrerender( | 761 FINAL_STATUS_UNSUPPORTED_SCHEME); |
| 724 child_id, route_id, pending_url, | 762 prerender_link_manager()->OnAddPrerender( |
|
gavinp
2014/01/30 19:58:49
Nice. I like that these tests are going through th
davidben
2014/01/30 21:01:51
They have to anyway; the logic has moved to Preren
| |
| 725 Referrer(url, blink::WebReferrerPolicyDefault), kSize)); | 763 child_id, GetNextPrerenderID(), pending_url, |
| 726 DCHECK(pending_prerender_handle.get()); | 764 Referrer(url, blink::WebReferrerPolicyDefault), |
| 727 EXPECT_FALSE(pending_prerender_handle->IsPrerendering()); | 765 kSize, route_id); |
| 766 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id())); | |
| 767 EXPECT_FALSE(pending_prerender_contents->prerendering_has_started()); | |
| 728 | 768 |
| 769 // Use the referring prerender. | |
| 729 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 770 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 730 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | 771 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); |
| 731 | 772 |
| 732 EXPECT_FALSE(pending_prerender_handle->IsPrerendering()); | 773 // The pending prerender still doesn't start. |
| 774 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id())); | |
| 775 EXPECT_FALSE(pending_prerender_contents->prerendering_has_started()); | |
| 733 } | 776 } |
| 734 | 777 |
| 735 TEST_F(PrerenderTest, CancelPendingPrerenderTest) { | 778 TEST_F(PrerenderTest, CancelPendingPrerenderTest) { |
| 736 GURL url("http://www.google.com/"); | 779 GURL url("http://www.google.com/"); |
| 737 DummyPrerenderContents* prerender_contents = | 780 DummyPrerenderContents* prerender_contents = |
| 738 prerender_manager()->CreateNextPrerenderContents( | 781 prerender_manager()->CreateNextPrerenderContents( |
| 739 url, | 782 url, |
| 740 FINAL_STATUS_USED); | 783 FINAL_STATUS_USED); |
| 741 EXPECT_TRUE(AddSimplePrerender(url)); | 784 EXPECT_TRUE(AddSimplePrerender(url)); |
| 742 | 785 |
| 743 int child_id; | 786 int child_id; |
| 744 int route_id; | 787 int route_id; |
| 745 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); | 788 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); |
| 746 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); | 789 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); |
| 747 | 790 |
| 748 GURL pending_url("http://news.google.com/"); | 791 GURL pending_url("http://news.google.com/"); |
| 749 | 792 |
| 750 scoped_ptr<PrerenderHandle> pending_prerender_handle( | 793 // Schedule a pending prerender launched from the prerender. |
| 751 prerender_manager()->AddPrerenderFromLinkRelPrerender( | 794 prerender_link_manager()->OnAddPrerender( |
| 752 child_id, route_id, pending_url, | 795 child_id, GetNextPrerenderID(), pending_url, |
| 753 Referrer(url, blink::WebReferrerPolicyDefault), kSize)); | 796 Referrer(url, blink::WebReferrerPolicyDefault), |
| 754 CHECK(pending_prerender_handle.get()); | 797 kSize, route_id); |
| 755 EXPECT_FALSE(pending_prerender_handle->IsPrerendering()); | 798 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id())); |
| 756 | 799 |
| 800 // Cancel the pending prerender. | |
| 801 prerender_link_manager()->OnCancelPrerender(child_id, last_prerender_id()); | |
| 802 | |
| 803 // Use the referring prerender. | |
| 757 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 804 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 805 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | |
| 758 | 806 |
| 759 pending_prerender_handle.reset(); | 807 // The pending prerender doesn't start. |
| 760 | 808 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id())); |
| 761 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | |
| 762 } | 809 } |
| 763 | 810 |
| 764 // Tests that a PrerenderManager created for a browser session in the control | 811 // Tests that a PrerenderManager created for a browser session in the control |
| 765 // group works as expected. | 812 // group works as expected. |
| 766 TEST_F(PrerenderTest, ControlGroup) { | 813 TEST_F(PrerenderTest, ControlGroup) { |
| 767 RestorePrerenderMode restore_prerender_mode; | 814 RestorePrerenderMode restore_prerender_mode; |
| 768 PrerenderManager::SetMode( | 815 PrerenderManager::SetMode( |
| 769 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); | 816 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); |
| 770 GURL url("http://www.google.com/"); | 817 GURL url("http://www.google.com/"); |
| 771 DummyPrerenderContents* prerender_contents = | 818 DummyPrerenderContents* prerender_contents = |
| (...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1477 CHECK(prerender_handle.get()); | 1524 CHECK(prerender_handle.get()); |
| 1478 EXPECT_TRUE(prerender_handle->IsPrerendering()); | 1525 EXPECT_TRUE(prerender_handle->IsPrerendering()); |
| 1479 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1526 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1480 EXPECT_EQ(prerender_contents, prerender_handle->contents()); | 1527 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
| 1481 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); | 1528 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); |
| 1482 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | 1529 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); |
| 1483 EXPECT_FALSE(prerender_handle->IsPrerendering()); | 1530 EXPECT_FALSE(prerender_handle->IsPrerendering()); |
| 1484 } | 1531 } |
| 1485 | 1532 |
| 1486 } // namespace prerender | 1533 } // namespace prerender |
| OLD | NEW |