| 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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 int DummyPrerenderContents::g_next_route_id_ = 0; | 92 int DummyPrerenderContents::g_next_route_id_ = 0; |
| 93 | 93 |
| 94 const gfx::Size kSize(640, 480); | 94 const gfx::Size kSize(640, 480); |
| 95 | 95 |
| 96 const uint32_t kDefaultRelTypes = PrerenderRelTypePrerender; | 96 const uint32_t kDefaultRelTypes = PrerenderRelTypePrerender; |
| 97 | 97 |
| 98 } // namespace | 98 } // namespace |
| 99 | 99 |
| 100 class UnitTestPrerenderManager : public PrerenderManager { | 100 class UnitTestPrerenderManager : public PrerenderManager { |
| 101 public: | 101 public: |
| 102 class UnittestTime : public TimeOverride { |
| 103 public: |
| 104 UnittestTime() : time_(Time::Now()), time_ticks_(TimeTicks::Now()) {} |
| 105 |
| 106 base::Time GetCurrentTime() const override { return time_; } |
| 107 base::TimeTicks GetCurrentTimeTicks() const override { return time_ticks_; } |
| 108 |
| 109 bool SetTime(const std::string& time_string) { |
| 110 return base::Time::FromString(time_string.c_str(), &time_); |
| 111 } |
| 112 |
| 113 void AdvanceTime(TimeDelta delta) { time_ += delta; } |
| 114 |
| 115 void AdvanceTimeTicks(TimeDelta delta) { time_ticks_ += delta; } |
| 116 |
| 117 private: |
| 118 base::Time time_; |
| 119 base::TimeTicks time_ticks_; |
| 120 }; |
| 121 |
| 102 using PrerenderManager::kMinTimeBetweenPrerendersMs; | 122 using PrerenderManager::kMinTimeBetweenPrerendersMs; |
| 103 using PrerenderManager::kNavigationRecordWindowMs; | 123 using PrerenderManager::kNavigationRecordWindowMs; |
| 104 | 124 |
| 105 explicit UnitTestPrerenderManager(Profile* profile) | 125 explicit UnitTestPrerenderManager(Profile* profile) |
| 106 : PrerenderManager(profile), | 126 : PrerenderManager(profile) { |
| 107 time_(Time::Now()), | |
| 108 time_ticks_(TimeTicks::Now()) { | |
| 109 set_rate_limit_enabled(false); | 127 set_rate_limit_enabled(false); |
| 128 std::unique_ptr<UnittestTime> unittest_time = |
| 129 base::MakeUnique<UnittestTime>(); |
| 130 unittest_time_ptr_ = unittest_time.get(); |
| 131 SetTimeOverride(std::move(unittest_time)); |
| 110 } | 132 } |
| 111 | 133 |
| 112 ~UnitTestPrerenderManager() override {} | 134 ~UnitTestPrerenderManager() override {} |
| 113 | 135 |
| 114 // From KeyedService, via PrererenderManager: | 136 // From KeyedService, via PrererenderManager: |
| 115 void Shutdown() override { | 137 void Shutdown() override { |
| 116 if (next_prerender_contents()) | 138 if (next_prerender_contents()) |
| 117 next_prerender_contents_->Destroy(FINAL_STATUS_MANAGER_SHUTDOWN); | 139 next_prerender_contents_->Destroy(FINAL_STATUS_MANAGER_SHUTDOWN); |
| 118 PrerenderManager::Shutdown(); | 140 PrerenderManager::Shutdown(); |
| 119 } | 141 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 141 FindIteratorForPrerenderContents(prerender_data->contents()); | 163 FindIteratorForPrerenderContents(prerender_data->contents()); |
| 142 CHECK(to_erase != active_prerenders_.end()); | 164 CHECK(to_erase != active_prerenders_.end()); |
| 143 std::unique_ptr<PrerenderContents> prerender_contents = | 165 std::unique_ptr<PrerenderContents> prerender_contents = |
| 144 prerender_data->ReleaseContents(); | 166 prerender_data->ReleaseContents(); |
| 145 active_prerenders_.erase(to_erase); | 167 active_prerenders_.erase(to_erase); |
| 146 | 168 |
| 147 prerender_contents->PrepareForUse(); | 169 prerender_contents->PrepareForUse(); |
| 148 return prerender_contents; | 170 return prerender_contents; |
| 149 } | 171 } |
| 150 | 172 |
| 151 bool SetTime(const std::string& time_string) { | |
| 152 return base::Time::FromString(time_string.c_str(), &time_); | |
| 153 } | |
| 154 | |
| 155 void AdvanceTime(TimeDelta delta) { | |
| 156 time_ += delta; | |
| 157 } | |
| 158 | |
| 159 void AdvanceTimeTicks(TimeDelta delta) { | |
| 160 time_ticks_ += delta; | |
| 161 } | |
| 162 | |
| 163 DummyPrerenderContents* CreateNextPrerenderContents( | 173 DummyPrerenderContents* CreateNextPrerenderContents( |
| 164 const GURL& url, | 174 const GURL& url, |
| 165 FinalStatus expected_final_status) { | 175 FinalStatus expected_final_status) { |
| 166 return SetNextPrerenderContents(base::MakeUnique<DummyPrerenderContents>( | 176 return SetNextPrerenderContents(base::MakeUnique<DummyPrerenderContents>( |
| 167 this, url, ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN, | 177 this, url, ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN, |
| 168 expected_final_status)); | 178 expected_final_status)); |
| 169 } | 179 } |
| 170 | 180 |
| 171 DummyPrerenderContents* CreateNextPrerenderContents( | 181 DummyPrerenderContents* CreateNextPrerenderContents( |
| 172 const GURL& url, | 182 const GURL& url, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 189 } | 199 } |
| 190 | 200 |
| 191 void set_rate_limit_enabled(bool enabled) { | 201 void set_rate_limit_enabled(bool enabled) { |
| 192 mutable_config().rate_limit_enabled = enabled; | 202 mutable_config().rate_limit_enabled = enabled; |
| 193 } | 203 } |
| 194 | 204 |
| 195 PrerenderContents* next_prerender_contents() { | 205 PrerenderContents* next_prerender_contents() { |
| 196 return next_prerender_contents_.get(); | 206 return next_prerender_contents_.get(); |
| 197 } | 207 } |
| 198 | 208 |
| 199 // from PrerenderManager | |
| 200 Time GetCurrentTime() const override { return time_; } | |
| 201 | |
| 202 TimeTicks GetCurrentTimeTicks() const override { return time_ticks_; } | |
| 203 | |
| 204 PrerenderContents* GetPrerenderContentsForRoute(int child_id, | 209 PrerenderContents* GetPrerenderContentsForRoute(int child_id, |
| 205 int route_id) const override { | 210 int route_id) const override { |
| 206 // Overridden for the PrerenderLinkManager's pending prerender logic. | 211 // Overridden for the PrerenderLinkManager's pending prerender logic. |
| 207 PrerenderContentsMap::const_iterator it = | 212 PrerenderContentsMap::const_iterator it = |
| 208 prerender_contents_map_.find(std::make_pair(child_id, route_id)); | 213 prerender_contents_map_.find(std::make_pair(child_id, route_id)); |
| 209 return it != prerender_contents_map_.end() ? it->second : nullptr; | 214 return it != prerender_contents_map_.end() ? it->second : nullptr; |
| 210 } | 215 } |
| 211 | 216 |
| 212 void DummyPrerenderContentsStarted(int child_id, | 217 void DummyPrerenderContentsStarted(int child_id, |
| 213 int route_id, | 218 int route_id, |
| 214 PrerenderContents* prerender_contents) { | 219 PrerenderContents* prerender_contents) { |
| 215 prerender_contents_map_[std::make_pair(child_id, route_id)] = | 220 prerender_contents_map_[std::make_pair(child_id, route_id)] = |
| 216 prerender_contents; | 221 prerender_contents; |
| 217 } | 222 } |
| 218 | 223 |
| 219 void DummyPrerenderContentsDestroyed(int child_id, | 224 void DummyPrerenderContentsDestroyed(int child_id, |
| 220 int route_id) { | 225 int route_id) { |
| 221 prerender_contents_map_.erase(std::make_pair(child_id, route_id)); | 226 prerender_contents_map_.erase(std::make_pair(child_id, route_id)); |
| 222 } | 227 } |
| 223 | 228 |
| 224 void SetIsLowEndDevice(bool is_low_end_device) { | 229 void SetIsLowEndDevice(bool is_low_end_device) { |
| 225 is_low_end_device_ = is_low_end_device; | 230 is_low_end_device_ = is_low_end_device; |
| 226 } | 231 } |
| 227 | 232 |
| 233 UnittestTime* unittest_time() const { return unittest_time_ptr_; } |
| 234 |
| 228 private: | 235 private: |
| 229 bool IsLowEndDevice() const override { return is_low_end_device_; } | 236 bool IsLowEndDevice() const override { return is_low_end_device_; } |
| 230 | 237 |
| 231 DummyPrerenderContents* SetNextPrerenderContents( | 238 DummyPrerenderContents* SetNextPrerenderContents( |
| 232 std::unique_ptr<DummyPrerenderContents> prerender_contents) { | 239 std::unique_ptr<DummyPrerenderContents> prerender_contents) { |
| 233 CHECK(!next_prerender_contents_); | 240 CHECK(!next_prerender_contents_); |
| 234 DummyPrerenderContents* contents_ptr = prerender_contents.get(); | 241 DummyPrerenderContents* contents_ptr = prerender_contents.get(); |
| 235 next_prerender_contents_ = std::move(prerender_contents); | 242 next_prerender_contents_ = std::move(prerender_contents); |
| 236 return contents_ptr; | 243 return contents_ptr; |
| 237 } | 244 } |
| 238 | 245 |
| 239 std::unique_ptr<PrerenderContents> CreatePrerenderContents( | 246 std::unique_ptr<PrerenderContents> CreatePrerenderContents( |
| 240 const GURL& url, | 247 const GURL& url, |
| 241 const Referrer& referrer, | 248 const Referrer& referrer, |
| 242 Origin origin) override { | 249 Origin origin) override { |
| 243 CHECK(next_prerender_contents_); | 250 CHECK(next_prerender_contents_); |
| 244 EXPECT_EQ(url, next_prerender_contents_->prerender_url()); | 251 EXPECT_EQ(url, next_prerender_contents_->prerender_url()); |
| 245 EXPECT_EQ(origin, next_prerender_contents_->origin()); | 252 EXPECT_EQ(origin, next_prerender_contents_->origin()); |
| 246 return std::move(next_prerender_contents_); | 253 return std::move(next_prerender_contents_); |
| 247 } | 254 } |
| 248 | 255 |
| 249 // Maintain a map from route pairs to PrerenderContents for | 256 // Maintain a map from route pairs to PrerenderContents for |
| 250 // GetPrerenderContentsForRoute. | 257 // GetPrerenderContentsForRoute. |
| 251 using PrerenderContentsMap = | 258 using PrerenderContentsMap = |
| 252 std::map<std::pair<int, int>, PrerenderContents*>; | 259 std::map<std::pair<int, int>, PrerenderContents*>; |
| 253 PrerenderContentsMap prerender_contents_map_; | 260 PrerenderContentsMap prerender_contents_map_; |
| 254 | 261 |
| 255 Time time_; | 262 UnittestTime* unittest_time_ptr_; |
| 256 TimeTicks time_ticks_; | |
| 257 std::unique_ptr<PrerenderContents> next_prerender_contents_; | 263 std::unique_ptr<PrerenderContents> next_prerender_contents_; |
| 258 bool is_low_end_device_; | 264 bool is_low_end_device_; |
| 259 }; | 265 }; |
| 260 | 266 |
| 261 class RestorePrerenderMode { | 267 class RestorePrerenderMode { |
| 262 public: | 268 public: |
| 263 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) { | 269 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) { |
| 264 } | 270 } |
| 265 | 271 |
| 266 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); } | 272 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); } |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 // Ensure that we expire a prerendered page after the max. permitted time. | 537 // Ensure that we expire a prerendered page after the max. permitted time. |
| 532 TEST_F(PrerenderTest, ExpireTest) { | 538 TEST_F(PrerenderTest, ExpireTest) { |
| 533 GURL url("http://www.google.com/"); | 539 GURL url("http://www.google.com/"); |
| 534 DummyPrerenderContents* prerender_contents = | 540 DummyPrerenderContents* prerender_contents = |
| 535 prerender_manager()->CreateNextPrerenderContents( | 541 prerender_manager()->CreateNextPrerenderContents( |
| 536 url, | 542 url, |
| 537 FINAL_STATUS_TIMED_OUT); | 543 FINAL_STATUS_TIMED_OUT); |
| 538 EXPECT_TRUE(AddSimplePrerender(url)); | 544 EXPECT_TRUE(AddSimplePrerender(url)); |
| 539 EXPECT_FALSE(prerender_manager()->next_prerender_contents()); | 545 EXPECT_FALSE(prerender_manager()->next_prerender_contents()); |
| 540 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 546 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 541 prerender_manager()->AdvanceTimeTicks( | 547 prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| 542 prerender_manager()->config().time_to_live + TimeDelta::FromSeconds(1)); | 548 prerender_manager()->config().time_to_live + TimeDelta::FromSeconds(1)); |
| 543 ASSERT_FALSE(prerender_manager()->FindEntry(url)); | 549 ASSERT_FALSE(prerender_manager()->FindEntry(url)); |
| 544 } | 550 } |
| 545 | 551 |
| 546 // Ensure that we don't launch prerenders of bad urls (in this case, a mailto: | 552 // Ensure that we don't launch prerenders of bad urls (in this case, a mailto: |
| 547 // url) | 553 // url) |
| 548 TEST_F(PrerenderTest, BadURLTest) { | 554 TEST_F(PrerenderTest, BadURLTest) { |
| 549 GURL url("mailto:test@gmail.com"); | 555 GURL url("mailto:test@gmail.com"); |
| 550 DummyPrerenderContents* prerender_contents = | 556 DummyPrerenderContents* prerender_contents = |
| 551 prerender_manager()->CreateNextPrerenderContents( | 557 prerender_manager()->CreateNextPrerenderContents( |
| (...skipping 23 matching lines...) Expand all Loading... |
| 575 prerender_manager()->CreateNextPrerenderContents(url, | 581 prerender_manager()->CreateNextPrerenderContents(url, |
| 576 FINAL_STATUS_TIMED_OUT); | 582 FINAL_STATUS_TIMED_OUT); |
| 577 EXPECT_TRUE(AddSimplePrerender(url)); | 583 EXPECT_TRUE(AddSimplePrerender(url)); |
| 578 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 584 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 579 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); | 585 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); |
| 580 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); | 586 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
| 581 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, | 587 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
| 582 last_prerender_id()); | 588 last_prerender_id()); |
| 583 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); | 589 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
| 584 EXPECT_FALSE(prerender_manager()->next_prerender_contents()); | 590 EXPECT_FALSE(prerender_manager()->next_prerender_contents()); |
| 585 prerender_manager()->AdvanceTimeTicks(test_advance); | 591 prerender_manager()->unittest_time()->AdvanceTimeTicks(test_advance); |
| 586 | 592 |
| 587 EXPECT_FALSE(prerender_manager()->FindEntry(url)); | 593 EXPECT_FALSE(prerender_manager()->FindEntry(url)); |
| 588 } | 594 } |
| 589 | 595 |
| 590 // But when we navigate away very close to the original expiry of a prerender, | 596 // But when we navigate away very close to the original expiry of a prerender, |
| 591 // we shouldn't expect it to be extended. | 597 // we shouldn't expect it to be extended. |
| 592 TEST_F(PrerenderTest, LinkManagerNavigateAwayNearExpiry) { | 598 TEST_F(PrerenderTest, LinkManagerNavigateAwayNearExpiry) { |
| 593 const TimeDelta time_to_live = TimeDelta::FromSeconds(300); | 599 const TimeDelta time_to_live = TimeDelta::FromSeconds(300); |
| 594 const TimeDelta abandon_time_to_live = TimeDelta::FromSeconds(20); | 600 const TimeDelta abandon_time_to_live = TimeDelta::FromSeconds(20); |
| 595 | 601 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 609 | 615 |
| 610 GURL url("http://example2.com"); | 616 GURL url("http://example2.com"); |
| 611 DummyPrerenderContents* prerender_contents = | 617 DummyPrerenderContents* prerender_contents = |
| 612 prerender_manager()->CreateNextPrerenderContents(url, | 618 prerender_manager()->CreateNextPrerenderContents(url, |
| 613 FINAL_STATUS_TIMED_OUT); | 619 FINAL_STATUS_TIMED_OUT); |
| 614 EXPECT_TRUE(AddSimplePrerender(url)); | 620 EXPECT_TRUE(AddSimplePrerender(url)); |
| 615 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 621 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 616 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); | 622 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); |
| 617 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); | 623 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
| 618 | 624 |
| 619 prerender_manager()->AdvanceTimeTicks(first_advance); | 625 prerender_manager()->unittest_time()->AdvanceTimeTicks(first_advance); |
| 620 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); | 626 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
| 621 | 627 |
| 622 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, | 628 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
| 623 last_prerender_id()); | 629 last_prerender_id()); |
| 624 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); | 630 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
| 625 | 631 |
| 626 EXPECT_FALSE(prerender_manager()->next_prerender_contents()); | 632 EXPECT_FALSE(prerender_manager()->next_prerender_contents()); |
| 627 | 633 |
| 628 prerender_manager()->AdvanceTimeTicks(second_advance); | 634 prerender_manager()->unittest_time()->AdvanceTimeTicks(second_advance); |
| 629 EXPECT_FALSE(prerender_manager()->FindEntry(url)); | 635 EXPECT_FALSE(prerender_manager()->FindEntry(url)); |
| 630 } | 636 } |
| 631 | 637 |
| 632 // When the user navigates away from a page, and then launches a new prerender, | 638 // When the user navigates away from a page, and then launches a new prerender, |
| 633 // the new prerender should preempt the abandoned prerender even if the | 639 // the new prerender should preempt the abandoned prerender even if the |
| 634 // abandoned prerender hasn't expired. | 640 // abandoned prerender hasn't expired. |
| 635 TEST_F(PrerenderTest, LinkManagerNavigateAwayLaunchAnother) { | 641 TEST_F(PrerenderTest, LinkManagerNavigateAwayLaunchAnother) { |
| 636 const TimeDelta time_to_live = TimeDelta::FromSeconds(300); | 642 const TimeDelta time_to_live = TimeDelta::FromSeconds(300); |
| 637 const TimeDelta abandon_time_to_live = TimeDelta::FromSeconds(20); | 643 const TimeDelta abandon_time_to_live = TimeDelta::FromSeconds(20); |
| 638 const TimeDelta test_advance = TimeDelta::FromSeconds(5); | 644 const TimeDelta test_advance = TimeDelta::FromSeconds(5); |
| 639 ASSERT_LT(test_advance, time_to_live); | 645 ASSERT_LT(test_advance, time_to_live); |
| 640 ASSERT_GT(abandon_time_to_live, test_advance); | 646 ASSERT_GT(abandon_time_to_live, test_advance); |
| 641 | 647 |
| 642 prerender_manager()->mutable_config().time_to_live = time_to_live; | 648 prerender_manager()->mutable_config().time_to_live = time_to_live; |
| 643 prerender_manager()->mutable_config().abandon_time_to_live = | 649 prerender_manager()->mutable_config().abandon_time_to_live = |
| 644 abandon_time_to_live; | 650 abandon_time_to_live; |
| 645 | 651 |
| 646 GURL url("http://example.com"); | 652 GURL url("http://example.com"); |
| 647 prerender_manager()->CreateNextPrerenderContents(url, FINAL_STATUS_CANCELLED); | 653 prerender_manager()->CreateNextPrerenderContents(url, FINAL_STATUS_CANCELLED); |
| 648 EXPECT_TRUE(AddSimplePrerender(url)); | 654 EXPECT_TRUE(AddSimplePrerender(url)); |
| 649 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, | 655 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
| 650 last_prerender_id()); | 656 last_prerender_id()); |
| 651 | 657 |
| 652 prerender_manager()->AdvanceTimeTicks(test_advance); | 658 prerender_manager()->unittest_time()->AdvanceTimeTicks(test_advance); |
| 653 | 659 |
| 654 GURL second_url("http://example2.com"); | 660 GURL second_url("http://example2.com"); |
| 655 DummyPrerenderContents* second_prerender_contents = | 661 DummyPrerenderContents* second_prerender_contents = |
| 656 prerender_manager()->CreateNextPrerenderContents( | 662 prerender_manager()->CreateNextPrerenderContents( |
| 657 second_url, FINAL_STATUS_MANAGER_SHUTDOWN); | 663 second_url, FINAL_STATUS_MANAGER_SHUTDOWN); |
| 658 EXPECT_TRUE(AddSimplePrerender(second_url)); | 664 EXPECT_TRUE(AddSimplePrerender(second_url)); |
| 659 EXPECT_EQ(second_prerender_contents, | 665 EXPECT_EQ(second_prerender_contents, |
| 660 prerender_manager()->FindEntry(second_url)); | 666 prerender_manager()->FindEntry(second_url)); |
| 661 } | 667 } |
| 662 | 668 |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 974 prerender_manager()->CreateNextPrerenderContents( | 980 prerender_manager()->CreateNextPrerenderContents( |
| 975 url, FINAL_STATUS_RECENTLY_VISITED); | 981 url, FINAL_STATUS_RECENTLY_VISITED); |
| 976 EXPECT_FALSE(AddSimplePrerender(url)); | 982 EXPECT_FALSE(AddSimplePrerender(url)); |
| 977 EXPECT_FALSE(prerender_contents->prerendering_has_started()); | 983 EXPECT_FALSE(prerender_contents->prerendering_has_started()); |
| 978 } | 984 } |
| 979 | 985 |
| 980 TEST_F(PrerenderTest, NotSoRecentlyVisited) { | 986 TEST_F(PrerenderTest, NotSoRecentlyVisited) { |
| 981 GURL url("http://www.google.com/"); | 987 GURL url("http://www.google.com/"); |
| 982 | 988 |
| 983 prerender_manager()->RecordNavigation(url); | 989 prerender_manager()->RecordNavigation(url); |
| 984 prerender_manager()->AdvanceTimeTicks( | 990 prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| 985 TimeDelta::FromMilliseconds( | 991 TimeDelta::FromMilliseconds( |
| 986 UnitTestPrerenderManager::kNavigationRecordWindowMs + 500)); | 992 UnitTestPrerenderManager::kNavigationRecordWindowMs + 500)); |
| 987 | 993 |
| 988 DummyPrerenderContents* prerender_contents = | 994 DummyPrerenderContents* prerender_contents = |
| 989 prerender_manager()->CreateNextPrerenderContents( | 995 prerender_manager()->CreateNextPrerenderContents( |
| 990 url, FINAL_STATUS_USED); | 996 url, FINAL_STATUS_USED); |
| 991 EXPECT_TRUE(AddSimplePrerender(url)); | 997 EXPECT_TRUE(AddSimplePrerender(url)); |
| 992 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 998 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 993 std::unique_ptr<PrerenderContents> entry = | 999 std::unique_ptr<PrerenderContents> entry = |
| 994 prerender_manager()->FindAndUseEntry(url); | 1000 prerender_manager()->FindAndUseEntry(url); |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1123 EXPECT_FALSE(prerender_handle); | 1129 EXPECT_FALSE(prerender_handle); |
| 1124 EXPECT_FALSE(prerender_contents->prerendering_has_started()); | 1130 EXPECT_FALSE(prerender_contents->prerendering_has_started()); |
| 1125 } | 1131 } |
| 1126 | 1132 |
| 1127 // Checks that the "PrerenderSilence experiment does not disable offline | 1133 // Checks that the "PrerenderSilence experiment does not disable offline |
| 1128 // prerendering. | 1134 // prerendering. |
| 1129 TEST_F(PrerenderTest, PrerenderSilenceAllowsOffline) { | 1135 TEST_F(PrerenderTest, PrerenderSilenceAllowsOffline) { |
| 1130 // Set the time to 30 seconds before the experiment expires. | 1136 // Set the time to 30 seconds before the experiment expires. |
| 1131 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 1137 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1132 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:01:00Z")); | 1138 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:01:00Z")); |
| 1133 ASSERT_TRUE(prerender_manager()->SetTime("2016-12-20T00:00:30Z")); | 1139 ASSERT_TRUE( |
| 1140 prerender_manager()->unittest_time()->SetTime("2016-12-20T00:00:30Z")); |
| 1134 GURL url("http://www.google.com/"); | 1141 GURL url("http://www.google.com/"); |
| 1135 DummyPrerenderContents* prerender_contents = | 1142 DummyPrerenderContents* prerender_contents = |
| 1136 prerender_manager()->CreateNextPrerenderContents( | 1143 prerender_manager()->CreateNextPrerenderContents( |
| 1137 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN); | 1144 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN); |
| 1138 std::unique_ptr<PrerenderHandle> prerender_handle = | 1145 std::unique_ptr<PrerenderHandle> prerender_handle = |
| 1139 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize); | 1146 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize); |
| 1140 EXPECT_TRUE(prerender_handle); | 1147 EXPECT_TRUE(prerender_handle); |
| 1141 EXPECT_TRUE(prerender_handle->IsPrerendering()); | 1148 EXPECT_TRUE(prerender_handle->IsPrerendering()); |
| 1142 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1149 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1143 EXPECT_EQ(prerender_contents, prerender_handle->contents()); | 1150 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
| 1144 EXPECT_EQ(ORIGIN_OFFLINE, prerender_handle->contents()->origin()); | 1151 EXPECT_EQ(ORIGIN_OFFLINE, prerender_handle->contents()->origin()); |
| 1145 } | 1152 } |
| 1146 | 1153 |
| 1147 // Checks that the "PrerenderSilence" experiment disables prerendering. | 1154 // Checks that the "PrerenderSilence" experiment disables prerendering. |
| 1148 TEST_F(PrerenderTest, PrerenderSilenceDisallowsNonOffline) { | 1155 TEST_F(PrerenderTest, PrerenderSilenceDisallowsNonOffline) { |
| 1149 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 1156 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1150 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); | 1157 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); |
| 1151 const Origin origins[] = { | 1158 const Origin origins[] = { |
| 1152 ORIGIN_GWS_PRERENDER, | 1159 ORIGIN_GWS_PRERENDER, |
| 1153 ORIGIN_OMNIBOX, | 1160 ORIGIN_OMNIBOX, |
| 1154 ORIGIN_NONE, | 1161 ORIGIN_NONE, |
| 1155 ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN, | 1162 ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN, |
| 1156 ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN, | 1163 ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN, |
| 1157 ORIGIN_EXTERNAL_REQUEST, | 1164 ORIGIN_EXTERNAL_REQUEST, |
| 1158 ORIGIN_INSTANT, | 1165 ORIGIN_INSTANT, |
| 1159 ORIGIN_LINK_REL_NEXT, | 1166 ORIGIN_LINK_REL_NEXT, |
| 1160 ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR, | 1167 ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR, |
| 1161 }; | 1168 }; |
| 1162 ASSERT_TRUE(prerender_manager()->SetTime("2016-12-20T00:01:00Z")); | 1169 ASSERT_TRUE( |
| 1170 prerender_manager()->unittest_time()->SetTime("2016-12-20T00:01:00Z")); |
| 1163 for (const Origin& origin : origins) { | 1171 for (const Origin& origin : origins) { |
| 1164 EXPECT_TRUE( | 1172 EXPECT_TRUE( |
| 1165 prerender_manager()->IsPrerenderSilenceExperimentForTesting(origin)); | 1173 prerender_manager()->IsPrerenderSilenceExperimentForTesting(origin)); |
| 1166 } | 1174 } |
| 1167 } | 1175 } |
| 1168 | 1176 |
| 1169 // Checks that prerendering is enabled after expiration of the | 1177 // Checks that prerendering is enabled after expiration of the |
| 1170 // "PrerenderSilence" experiment. | 1178 // "PrerenderSilence" experiment. |
| 1171 TEST_F(PrerenderTest, PrerenderSilenceAllowsAfterExpiration) { | 1179 TEST_F(PrerenderTest, PrerenderSilenceAllowsAfterExpiration) { |
| 1172 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 1180 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1173 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); | 1181 "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); |
| 1174 GURL url("http://www.google.com/"); | 1182 GURL url("http://www.google.com/"); |
| 1175 ASSERT_TRUE(prerender_manager()->SetTime("2016-12-20T00:01:00Z")); | 1183 ASSERT_TRUE( |
| 1176 prerender_manager()->AdvanceTime(TimeDelta::FromSeconds(60)); | 1184 prerender_manager()->unittest_time()->SetTime("2016-12-20T00:01:00Z")); |
| 1185 prerender_manager()->unittest_time()->AdvanceTime(TimeDelta::FromSeconds(60)); |
| 1177 DummyPrerenderContents* prerender_contents = | 1186 DummyPrerenderContents* prerender_contents = |
| 1178 prerender_manager()->CreateNextPrerenderContents(url, FINAL_STATUS_USED); | 1187 prerender_manager()->CreateNextPrerenderContents(url, FINAL_STATUS_USED); |
| 1179 EXPECT_TRUE(AddSimplePrerender(url)); | 1188 EXPECT_TRUE(AddSimplePrerender(url)); |
| 1180 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1189 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1181 std::unique_ptr<PrerenderContents> entry = | 1190 std::unique_ptr<PrerenderContents> entry = |
| 1182 prerender_manager()->FindAndUseEntry(url); | 1191 prerender_manager()->FindAndUseEntry(url); |
| 1183 ASSERT_EQ(prerender_contents, entry.get()); | 1192 ASSERT_EQ(prerender_contents, entry.get()); |
| 1184 } | 1193 } |
| 1185 | 1194 |
| 1186 TEST_F(PrerenderTest, PrerenderAllowedForOfflineAndForcedCellular) { | 1195 TEST_F(PrerenderTest, PrerenderAllowedForOfflineAndForcedCellular) { |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1461 GURL url("http://www.myexample.com"); | 1470 GURL url("http://www.myexample.com"); |
| 1462 DummyPrerenderContents* prerender_contents = | 1471 DummyPrerenderContents* prerender_contents = |
| 1463 prerender_manager()->CreateNextPrerenderContents( | 1472 prerender_manager()->CreateNextPrerenderContents( |
| 1464 url, FINAL_STATUS_TIMED_OUT); | 1473 url, FINAL_STATUS_TIMED_OUT); |
| 1465 | 1474 |
| 1466 EXPECT_TRUE(AddSimplePrerender(url)); | 1475 EXPECT_TRUE(AddSimplePrerender(url)); |
| 1467 | 1476 |
| 1468 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1477 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1469 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); | 1478 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); |
| 1470 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); | 1479 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
| 1471 prerender_manager()->AdvanceTimeTicks( | 1480 prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| 1472 prerender_manager()->config().time_to_live + TimeDelta::FromSeconds(1)); | 1481 prerender_manager()->config().time_to_live + TimeDelta::FromSeconds(1)); |
| 1473 | 1482 |
| 1474 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | 1483 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
| 1475 ASSERT_FALSE(prerender_manager()->FindEntry(url)); | 1484 ASSERT_FALSE(prerender_manager()->FindEntry(url)); |
| 1476 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, | 1485 prerender_link_manager()->OnCancelPrerender(kDefaultChildId, |
| 1477 last_prerender_id()); | 1486 last_prerender_id()); |
| 1478 | 1487 |
| 1479 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1488 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1480 ASSERT_FALSE(prerender_manager()->FindEntry(url)); | 1489 ASSERT_FALSE(prerender_manager()->FindEntry(url)); |
| 1481 } | 1490 } |
| 1482 | 1491 |
| 1483 TEST_F(PrerenderTest, LinkManagerExpireThenAddAgain) { | 1492 TEST_F(PrerenderTest, LinkManagerExpireThenAddAgain) { |
| 1484 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1493 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1485 GURL url("http://www.myexample.com"); | 1494 GURL url("http://www.myexample.com"); |
| 1486 DummyPrerenderContents* first_prerender_contents = | 1495 DummyPrerenderContents* first_prerender_contents = |
| 1487 prerender_manager()->CreateNextPrerenderContents( | 1496 prerender_manager()->CreateNextPrerenderContents( |
| 1488 url, FINAL_STATUS_TIMED_OUT); | 1497 url, FINAL_STATUS_TIMED_OUT); |
| 1489 EXPECT_TRUE(AddSimplePrerender(url)); | 1498 EXPECT_TRUE(AddSimplePrerender(url)); |
| 1490 EXPECT_TRUE(first_prerender_contents->prerendering_has_started()); | 1499 EXPECT_TRUE(first_prerender_contents->prerendering_has_started()); |
| 1491 EXPECT_FALSE(first_prerender_contents->prerendering_has_been_cancelled()); | 1500 EXPECT_FALSE(first_prerender_contents->prerendering_has_been_cancelled()); |
| 1492 ASSERT_EQ(first_prerender_contents, | 1501 ASSERT_EQ(first_prerender_contents, |
| 1493 prerender_manager()->FindEntry(url)); | 1502 prerender_manager()->FindEntry(url)); |
| 1494 prerender_manager()->AdvanceTimeTicks( | 1503 prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| 1495 prerender_manager()->config().time_to_live + TimeDelta::FromSeconds(1)); | 1504 prerender_manager()->config().time_to_live + TimeDelta::FromSeconds(1)); |
| 1496 ASSERT_FALSE(prerender_manager()->FindEntry(url)); | 1505 ASSERT_FALSE(prerender_manager()->FindEntry(url)); |
| 1497 DummyPrerenderContents* second_prerender_contents = | 1506 DummyPrerenderContents* second_prerender_contents = |
| 1498 prerender_manager()->CreateNextPrerenderContents( | 1507 prerender_manager()->CreateNextPrerenderContents( |
| 1499 url, FINAL_STATUS_USED); | 1508 url, FINAL_STATUS_USED); |
| 1500 EXPECT_TRUE(AddSimplePrerender(url)); | 1509 EXPECT_TRUE(AddSimplePrerender(url)); |
| 1501 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); | 1510 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); |
| 1502 std::unique_ptr<PrerenderContents> entry = | 1511 std::unique_ptr<PrerenderContents> entry = |
| 1503 prerender_manager()->FindAndUseEntry(url); | 1512 prerender_manager()->FindAndUseEntry(url); |
| 1504 ASSERT_EQ(second_prerender_contents, entry.get()); | 1513 ASSERT_EQ(second_prerender_contents, entry.get()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1536 prerender_manager()->CreateNextPrerenderContents( | 1545 prerender_manager()->CreateNextPrerenderContents( |
| 1537 url, FINAL_STATUS_TIMED_OUT); | 1546 url, FINAL_STATUS_TIMED_OUT); |
| 1538 | 1547 |
| 1539 EXPECT_TRUE(AddSimplePrerender(url)); | 1548 EXPECT_TRUE(AddSimplePrerender(url)); |
| 1540 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1549 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1541 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); | 1550 EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); |
| 1542 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); | 1551 ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
| 1543 | 1552 |
| 1544 prerender_link_manager()->OnChannelClosing(kDefaultChildId); | 1553 prerender_link_manager()->OnChannelClosing(kDefaultChildId); |
| 1545 | 1554 |
| 1546 prerender_manager()->AdvanceTimeTicks( | 1555 prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| 1547 prerender_manager()->config().abandon_time_to_live + | 1556 prerender_manager()->config().abandon_time_to_live + |
| 1548 TimeDelta::FromSeconds(1)); | 1557 TimeDelta::FromSeconds(1)); |
| 1549 | 1558 |
| 1550 EXPECT_FALSE(prerender_manager()->FindEntry(url)); | 1559 EXPECT_FALSE(prerender_manager()->FindEntry(url)); |
| 1551 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1560 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1552 } | 1561 } |
| 1553 | 1562 |
| 1554 // Creates two prerenders, one of which should be blocked by the | 1563 // Creates two prerenders, one of which should be blocked by the |
| 1555 // max_link_concurrency; abandons both of them and waits to make sure both | 1564 // max_link_concurrency; abandons both of them and waits to make sure both |
| 1556 // are cleared from the PrerenderLinkManager. | 1565 // are cleared from the PrerenderLinkManager. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1572 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | 1581 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
| 1573 | 1582 |
| 1574 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url)); | 1583 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url)); |
| 1575 EXPECT_FALSE(prerender_manager()->FindEntry(second_url)); | 1584 EXPECT_FALSE(prerender_manager()->FindEntry(second_url)); |
| 1576 | 1585 |
| 1577 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, | 1586 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
| 1578 first_prerender_id); | 1587 first_prerender_id); |
| 1579 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, | 1588 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
| 1580 second_prerender_id); | 1589 second_prerender_id); |
| 1581 | 1590 |
| 1582 prerender_manager()->AdvanceTimeTicks( | 1591 prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| 1583 prerender_manager()->config().abandon_time_to_live + | 1592 prerender_manager()->config().abandon_time_to_live + |
| 1584 TimeDelta::FromSeconds(1)); | 1593 TimeDelta::FromSeconds(1)); |
| 1585 EXPECT_FALSE(prerender_manager()->FindEntry(first_url)); | 1594 EXPECT_FALSE(prerender_manager()->FindEntry(first_url)); |
| 1586 EXPECT_FALSE(prerender_manager()->FindEntry(second_url)); | 1595 EXPECT_FALSE(prerender_manager()->FindEntry(second_url)); |
| 1587 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1596 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1588 } | 1597 } |
| 1589 | 1598 |
| 1590 // Creates two prerenders, the second one started by the first, both of which | 1599 // Creates two prerenders, the second one started by the first, both of which |
| 1591 // should be blocked by max_concurrency; abandons both of them and waits to make | 1600 // should be blocked by max_concurrency; abandons both of them and waits to make |
| 1592 // sure both are cleared from the PrerenderLinkManager. | 1601 // sure both are cleared from the PrerenderLinkManager. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1615 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | 1624 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
| 1616 | 1625 |
| 1617 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url)); | 1626 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url)); |
| 1618 EXPECT_FALSE(prerender_manager()->FindEntry(pending_url)); | 1627 EXPECT_FALSE(prerender_manager()->FindEntry(pending_url)); |
| 1619 | 1628 |
| 1620 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, | 1629 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
| 1621 first_prerender_id); | 1630 first_prerender_id); |
| 1622 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, | 1631 prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
| 1623 second_prerender_id); | 1632 second_prerender_id); |
| 1624 | 1633 |
| 1625 prerender_manager()->AdvanceTimeTicks( | 1634 prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| 1626 prerender_manager()->config().abandon_time_to_live + | 1635 prerender_manager()->config().abandon_time_to_live + |
| 1627 TimeDelta::FromSeconds(1)); | 1636 TimeDelta::FromSeconds(1)); |
| 1628 EXPECT_FALSE(prerender_manager()->FindEntry(first_url)); | 1637 EXPECT_FALSE(prerender_manager()->FindEntry(first_url)); |
| 1629 EXPECT_FALSE(prerender_manager()->FindEntry(pending_url)); | 1638 EXPECT_FALSE(prerender_manager()->FindEntry(pending_url)); |
| 1630 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1639 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1631 } | 1640 } |
| 1632 | 1641 |
| 1633 // Creates two prerenders, one of which should be blocked by the | 1642 // Creates two prerenders, one of which should be blocked by the |
| 1634 // max_link_concurrency; uses one after the max wait to launch, and | 1643 // max_link_concurrency; uses one after the max wait to launch, and |
| 1635 // ensures the second prerender does not start. | 1644 // ensures the second prerender does not start. |
| 1636 TEST_F(PrerenderTest, LinkManagerWaitToLaunchNotLaunched) { | 1645 TEST_F(PrerenderTest, LinkManagerWaitToLaunchNotLaunched) { |
| 1637 SetConcurrency(1); | 1646 SetConcurrency(1); |
| 1638 ASSERT_LT(prerender_manager()->config().max_wait_to_launch, | 1647 ASSERT_LT(prerender_manager()->config().max_wait_to_launch, |
| 1639 prerender_manager()->config().time_to_live); | 1648 prerender_manager()->config().time_to_live); |
| 1640 GURL first_url("http://www.myexample.com"); | 1649 GURL first_url("http://www.myexample.com"); |
| 1641 DummyPrerenderContents* prerender_contents = | 1650 DummyPrerenderContents* prerender_contents = |
| 1642 prerender_manager()->CreateNextPrerenderContents( | 1651 prerender_manager()->CreateNextPrerenderContents( |
| 1643 first_url, FINAL_STATUS_USED); | 1652 first_url, FINAL_STATUS_USED); |
| 1644 EXPECT_TRUE(AddSimplePrerender(first_url)); | 1653 EXPECT_TRUE(AddSimplePrerender(first_url)); |
| 1645 | 1654 |
| 1646 GURL second_url("http://www.neverlaunched.com"); | 1655 GURL second_url("http://www.neverlaunched.com"); |
| 1647 EXPECT_FALSE(AddSimplePrerender(second_url)); | 1656 EXPECT_FALSE(AddSimplePrerender(second_url)); |
| 1648 | 1657 |
| 1649 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | 1658 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
| 1650 | 1659 |
| 1651 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url)); | 1660 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url)); |
| 1652 EXPECT_FALSE(prerender_manager()->FindEntry(second_url)); | 1661 EXPECT_FALSE(prerender_manager()->FindEntry(second_url)); |
| 1653 | 1662 |
| 1654 prerender_manager()->AdvanceTimeTicks( | 1663 prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| 1655 prerender_manager()->config().max_wait_to_launch + | 1664 prerender_manager()->config().max_wait_to_launch + |
| 1656 TimeDelta::FromSeconds(1)); | 1665 TimeDelta::FromSeconds(1)); |
| 1657 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url)); | 1666 EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url)); |
| 1658 EXPECT_FALSE(prerender_manager()->FindEntry(second_url)); | 1667 EXPECT_FALSE(prerender_manager()->FindEntry(second_url)); |
| 1659 | 1668 |
| 1660 std::unique_ptr<PrerenderContents> entry = | 1669 std::unique_ptr<PrerenderContents> entry = |
| 1661 prerender_manager()->FindAndUseEntry(first_url); | 1670 prerender_manager()->FindAndUseEntry(first_url); |
| 1662 EXPECT_EQ(prerender_contents, entry.get()); | 1671 EXPECT_EQ(prerender_contents, entry.get()); |
| 1663 | 1672 |
| 1664 EXPECT_FALSE(prerender_manager()->FindEntry(first_url)); | 1673 EXPECT_FALSE(prerender_manager()->FindEntry(first_url)); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1689 const TimeDelta wait_for_first_prerender_to_expire = | 1698 const TimeDelta wait_for_first_prerender_to_expire = |
| 1690 prerender_manager()->config().time_to_live - | 1699 prerender_manager()->config().time_to_live - |
| 1691 wait_to_launch_second_prerender + | 1700 wait_to_launch_second_prerender + |
| 1692 TimeDelta::FromSeconds(1); | 1701 TimeDelta::FromSeconds(1); |
| 1693 ASSERT_LT(prerender_manager()->config().time_to_live, | 1702 ASSERT_LT(prerender_manager()->config().time_to_live, |
| 1694 wait_to_launch_second_prerender + | 1703 wait_to_launch_second_prerender + |
| 1695 wait_for_first_prerender_to_expire); | 1704 wait_for_first_prerender_to_expire); |
| 1696 ASSERT_GT(prerender_manager()->config().max_wait_to_launch.InSeconds(), | 1705 ASSERT_GT(prerender_manager()->config().max_wait_to_launch.InSeconds(), |
| 1697 wait_for_first_prerender_to_expire.InSeconds()); | 1706 wait_for_first_prerender_to_expire.InSeconds()); |
| 1698 | 1707 |
| 1699 prerender_manager()->AdvanceTimeTicks(wait_to_launch_second_prerender); | 1708 prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| 1709 wait_to_launch_second_prerender); |
| 1700 GURL second_url("http://www.willlaunch.com"); | 1710 GURL second_url("http://www.willlaunch.com"); |
| 1701 DummyPrerenderContents* second_prerender_contents = | 1711 DummyPrerenderContents* second_prerender_contents = |
| 1702 prerender_manager()->CreateNextPrerenderContents( | 1712 prerender_manager()->CreateNextPrerenderContents( |
| 1703 second_url, FINAL_STATUS_USED); | 1713 second_url, FINAL_STATUS_USED); |
| 1704 EXPECT_FALSE(AddSimplePrerender(second_url)); | 1714 EXPECT_FALSE(AddSimplePrerender(second_url)); |
| 1705 | 1715 |
| 1706 // The first prerender is still running, but the second has not yet launched. | 1716 // The first prerender is still running, but the second has not yet launched. |
| 1707 EXPECT_EQ(first_prerender_contents, | 1717 EXPECT_EQ(first_prerender_contents, |
| 1708 prerender_manager()->FindEntry(first_url)); | 1718 prerender_manager()->FindEntry(first_url)); |
| 1709 EXPECT_FALSE(prerender_manager()->FindEntry(second_url)); | 1719 EXPECT_FALSE(prerender_manager()->FindEntry(second_url)); |
| 1710 | 1720 |
| 1711 // The first prerender should have died, giving life to the second one. | 1721 // The first prerender should have died, giving life to the second one. |
| 1712 prerender_manager()->AdvanceTimeTicks(wait_for_first_prerender_to_expire); | 1722 prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| 1723 wait_for_first_prerender_to_expire); |
| 1713 EXPECT_FALSE(prerender_manager()->FindEntry(first_url)); | 1724 EXPECT_FALSE(prerender_manager()->FindEntry(first_url)); |
| 1714 std::unique_ptr<PrerenderContents> entry = | 1725 std::unique_ptr<PrerenderContents> entry = |
| 1715 prerender_manager()->FindAndUseEntry(second_url); | 1726 prerender_manager()->FindAndUseEntry(second_url); |
| 1716 EXPECT_EQ(second_prerender_contents, entry.get()); | 1727 EXPECT_EQ(second_prerender_contents, entry.get()); |
| 1717 } | 1728 } |
| 1718 | 1729 |
| 1719 TEST_F(PrerenderTest, InstantSearchNotAllowedWhenDisabled) { | 1730 TEST_F(PrerenderTest, InstantSearchNotAllowedWhenDisabled) { |
| 1720 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 1731 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 1721 "EmbeddedSearch", | 1732 "EmbeddedSearch", |
| 1722 "Group82 espv:8 use_cacheable_ntp:1 prefetch_results:1")); | 1733 "Group82 espv:8 use_cacheable_ntp:1 prefetch_results:1")); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1762 prerender_contents->SetPrerenderMode(PREFETCH_ONLY); | 1773 prerender_contents->SetPrerenderMode(PREFETCH_ONLY); |
| 1763 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("GET")); | 1774 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("GET")); |
| 1764 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("HEAD")); | 1775 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("HEAD")); |
| 1765 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("OPTIONS")); | 1776 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("OPTIONS")); |
| 1766 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("POST")); | 1777 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("POST")); |
| 1767 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("TRACE")); | 1778 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("TRACE")); |
| 1768 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("WHATEVER")); | 1779 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("WHATEVER")); |
| 1769 } | 1780 } |
| 1770 | 1781 |
| 1771 } // namespace prerender | 1782 } // namespace prerender |
| OLD | NEW |