Chromium Code Reviews| Index: chrome/browser/prerender/prerender_unittest.cc |
| diff --git a/chrome/browser/prerender/prerender_unittest.cc b/chrome/browser/prerender/prerender_unittest.cc |
| index 607f49b8872fd2906f7ec3a69a254348b0b39106..2c47eddfaa7ce5627eab903210201d2be3445770 100644 |
| --- a/chrome/browser/prerender/prerender_unittest.cc |
| +++ b/chrome/browser/prerender/prerender_unittest.cc |
| @@ -99,14 +99,36 @@ const uint32_t kDefaultRelTypes = PrerenderRelTypePrerender; |
| class UnitTestPrerenderManager : public PrerenderManager { |
| public: |
| + class UnittestTime : public TimeOverride { |
|
pasko
2016/10/05 12:35:25
Compared to the other TimeOverride this one only a
mattcary
2016/10/10 11:54:43
I think the use of time in prerender_browsertest.c
pasko
2016/10/10 12:40:20
That does not look dangerous to me. TimeTicks and
mattcary
2016/10/10 13:56:08
Discussed offline, added todo & task to use Simple
|
| + public: |
| + UnittestTime() : time_(Time::Now()), time_ticks_(TimeTicks::Now()) {} |
| + |
| + base::Time GetCurrentTime() const override { return time_; } |
| + base::TimeTicks GetCurrentTimeTicks() const override { return time_ticks_; } |
| + |
| + bool SetTime(const std::string& time_string) { |
| + return base::Time::FromString(time_string.c_str(), &time_); |
| + } |
| + |
| + void AdvanceTime(TimeDelta delta) { time_ += delta; } |
| + |
| + void AdvanceTimeTicks(TimeDelta delta) { time_ticks_ += delta; } |
| + |
| + private: |
| + base::Time time_; |
| + base::TimeTicks time_ticks_; |
| + }; |
| + |
| using PrerenderManager::kMinTimeBetweenPrerendersMs; |
| using PrerenderManager::kNavigationRecordWindowMs; |
| explicit UnitTestPrerenderManager(Profile* profile) |
| - : PrerenderManager(profile), |
| - time_(Time::Now()), |
| - time_ticks_(TimeTicks::Now()) { |
| + : PrerenderManager(profile) { |
| set_rate_limit_enabled(false); |
| + std::unique_ptr<UnittestTime> unittest_time = |
| + base::MakeUnique<UnittestTime>(); |
| + unittest_time_ptr_ = unittest_time.get(); |
| + SetTimeOverride(std::move(unittest_time)); |
| } |
| ~UnitTestPrerenderManager() override {} |
| @@ -148,18 +170,6 @@ class UnitTestPrerenderManager : public PrerenderManager { |
| return prerender_contents; |
| } |
| - bool SetTime(const std::string& time_string) { |
| - return base::Time::FromString(time_string.c_str(), &time_); |
| - } |
| - |
| - void AdvanceTime(TimeDelta delta) { |
| - time_ += delta; |
| - } |
| - |
| - void AdvanceTimeTicks(TimeDelta delta) { |
| - time_ticks_ += delta; |
| - } |
| - |
| DummyPrerenderContents* CreateNextPrerenderContents( |
| const GURL& url, |
| FinalStatus expected_final_status) { |
| @@ -196,11 +206,6 @@ class UnitTestPrerenderManager : public PrerenderManager { |
| return next_prerender_contents_.get(); |
| } |
| - // from PrerenderManager |
| - Time GetCurrentTime() const override { return time_; } |
| - |
| - TimeTicks GetCurrentTimeTicks() const override { return time_ticks_; } |
| - |
| PrerenderContents* GetPrerenderContentsForRoute(int child_id, |
| int route_id) const override { |
| // Overridden for the PrerenderLinkManager's pending prerender logic. |
| @@ -225,6 +230,8 @@ class UnitTestPrerenderManager : public PrerenderManager { |
| is_low_end_device_ = is_low_end_device; |
| } |
| + UnittestTime* unittest_time() const { return unittest_time_ptr_; } |
| + |
| private: |
| bool IsLowEndDevice() const override { return is_low_end_device_; } |
| @@ -252,8 +259,7 @@ class UnitTestPrerenderManager : public PrerenderManager { |
| std::map<std::pair<int, int>, PrerenderContents*>; |
| PrerenderContentsMap prerender_contents_map_; |
| - Time time_; |
| - TimeTicks time_ticks_; |
| + UnittestTime* unittest_time_ptr_; |
| std::unique_ptr<PrerenderContents> next_prerender_contents_; |
| bool is_low_end_device_; |
| }; |
| @@ -538,7 +544,7 @@ TEST_F(PrerenderTest, ExpireTest) { |
| EXPECT_TRUE(AddSimplePrerender(url)); |
| EXPECT_FALSE(prerender_manager()->next_prerender_contents()); |
| EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| - prerender_manager()->AdvanceTimeTicks( |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| prerender_manager()->config().time_to_live + TimeDelta::FromSeconds(1)); |
| ASSERT_FALSE(prerender_manager()->FindEntry(url)); |
| } |
| @@ -582,7 +588,7 @@ TEST_F(PrerenderTest, LinkManagerNavigateAwayExpire) { |
| last_prerender_id()); |
| EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
| EXPECT_FALSE(prerender_manager()->next_prerender_contents()); |
| - prerender_manager()->AdvanceTimeTicks(test_advance); |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks(test_advance); |
| EXPECT_FALSE(prerender_manager()->FindEntry(url)); |
| } |
| @@ -616,7 +622,7 @@ TEST_F(PrerenderTest, LinkManagerNavigateAwayNearExpiry) { |
| EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); |
| ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
| - prerender_manager()->AdvanceTimeTicks(first_advance); |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks(first_advance); |
| EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
| prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
| @@ -625,7 +631,7 @@ TEST_F(PrerenderTest, LinkManagerNavigateAwayNearExpiry) { |
| EXPECT_FALSE(prerender_manager()->next_prerender_contents()); |
| - prerender_manager()->AdvanceTimeTicks(second_advance); |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks(second_advance); |
| EXPECT_FALSE(prerender_manager()->FindEntry(url)); |
| } |
| @@ -649,7 +655,7 @@ TEST_F(PrerenderTest, LinkManagerNavigateAwayLaunchAnother) { |
| prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
| last_prerender_id()); |
| - prerender_manager()->AdvanceTimeTicks(test_advance); |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks(test_advance); |
| GURL second_url("http://example2.com"); |
| DummyPrerenderContents* second_prerender_contents = |
| @@ -981,7 +987,7 @@ TEST_F(PrerenderTest, NotSoRecentlyVisited) { |
| GURL url("http://www.google.com/"); |
| prerender_manager()->RecordNavigation(url); |
| - prerender_manager()->AdvanceTimeTicks( |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| TimeDelta::FromMilliseconds( |
| UnitTestPrerenderManager::kNavigationRecordWindowMs + 500)); |
| @@ -1114,7 +1120,8 @@ TEST_F(PrerenderTest, PrerenderSilenceAllowsOffline) { |
| // Set the time to 30 seconds before the experiment expires. |
| ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:01:00Z")); |
| - ASSERT_TRUE(prerender_manager()->SetTime("2016-12-20T00:00:30Z")); |
| + ASSERT_TRUE( |
| + prerender_manager()->unittest_time()->SetTime("2016-12-20T00:00:30Z")); |
| GURL url("http://www.google.com/"); |
| DummyPrerenderContents* prerender_contents = |
| prerender_manager()->CreateNextPrerenderContents( |
| @@ -1143,7 +1150,8 @@ TEST_F(PrerenderTest, PrerenderSilenceDisallowsNonOffline) { |
| ORIGIN_LINK_REL_NEXT, |
| ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR, |
| }; |
| - ASSERT_TRUE(prerender_manager()->SetTime("2016-12-20T00:01:00Z")); |
| + ASSERT_TRUE( |
| + prerender_manager()->unittest_time()->SetTime("2016-12-20T00:01:00Z")); |
| for (const Origin& origin : origins) { |
| EXPECT_TRUE( |
| prerender_manager()->IsPrerenderSilenceExperimentForTesting(origin)); |
| @@ -1156,8 +1164,9 @@ TEST_F(PrerenderTest, PrerenderSilenceAllowsAfterExpiration) { |
| ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| "PrerenderSilence", "ExperimentYes_expires_2016-12-20T00:02:00Z")); |
| GURL url("http://www.google.com/"); |
| - ASSERT_TRUE(prerender_manager()->SetTime("2016-12-20T00:01:00Z")); |
| - prerender_manager()->AdvanceTime(TimeDelta::FromSeconds(60)); |
| + ASSERT_TRUE( |
| + prerender_manager()->unittest_time()->SetTime("2016-12-20T00:01:00Z")); |
| + prerender_manager()->unittest_time()->AdvanceTime(TimeDelta::FromSeconds(60)); |
| DummyPrerenderContents* prerender_contents = |
| prerender_manager()->CreateNextPrerenderContents(url, FINAL_STATUS_USED); |
| EXPECT_TRUE(AddSimplePrerender(url)); |
| @@ -1452,7 +1461,7 @@ TEST_F(PrerenderTest, LinkManagerExpireThenCancel) { |
| EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled()); |
| ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url)); |
| - prerender_manager()->AdvanceTimeTicks( |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| prerender_manager()->config().time_to_live + TimeDelta::FromSeconds(1)); |
| EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
| @@ -1475,7 +1484,7 @@ TEST_F(PrerenderTest, LinkManagerExpireThenAddAgain) { |
| EXPECT_FALSE(first_prerender_contents->prerendering_has_been_cancelled()); |
| ASSERT_EQ(first_prerender_contents, |
| prerender_manager()->FindEntry(url)); |
| - prerender_manager()->AdvanceTimeTicks( |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| prerender_manager()->config().time_to_live + TimeDelta::FromSeconds(1)); |
| ASSERT_FALSE(prerender_manager()->FindEntry(url)); |
| DummyPrerenderContents* second_prerender_contents = |
| @@ -1527,7 +1536,7 @@ TEST_F(PrerenderTest, LinkManagerChannelClosing) { |
| prerender_link_manager()->OnChannelClosing(kDefaultChildId); |
| - prerender_manager()->AdvanceTimeTicks( |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| prerender_manager()->config().abandon_time_to_live + |
| TimeDelta::FromSeconds(1)); |
| @@ -1563,7 +1572,7 @@ TEST_F(PrerenderTest, LinkManagerAbandonInactivePrerender) { |
| prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
| second_prerender_id); |
| - prerender_manager()->AdvanceTimeTicks( |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| prerender_manager()->config().abandon_time_to_live + |
| TimeDelta::FromSeconds(1)); |
| EXPECT_FALSE(prerender_manager()->FindEntry(first_url)); |
| @@ -1606,7 +1615,7 @@ TEST_F(PrerenderTest, LinkManagerClearOnPendingAbandon) { |
| prerender_link_manager()->OnAbandonPrerender(kDefaultChildId, |
| second_prerender_id); |
| - prerender_manager()->AdvanceTimeTicks( |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| prerender_manager()->config().abandon_time_to_live + |
| TimeDelta::FromSeconds(1)); |
| EXPECT_FALSE(prerender_manager()->FindEntry(first_url)); |
| @@ -1635,7 +1644,7 @@ TEST_F(PrerenderTest, LinkManagerWaitToLaunchNotLaunched) { |
| EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url)); |
| EXPECT_FALSE(prerender_manager()->FindEntry(second_url)); |
| - prerender_manager()->AdvanceTimeTicks( |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| prerender_manager()->config().max_wait_to_launch + |
| TimeDelta::FromSeconds(1)); |
| EXPECT_EQ(prerender_contents, prerender_manager()->FindEntry(first_url)); |
| @@ -1680,7 +1689,8 @@ TEST_F(PrerenderTest, LinkManagerExpireRevealingLaunch) { |
| ASSERT_GT(prerender_manager()->config().max_wait_to_launch.InSeconds(), |
| wait_for_first_prerender_to_expire.InSeconds()); |
| - prerender_manager()->AdvanceTimeTicks(wait_to_launch_second_prerender); |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| + wait_to_launch_second_prerender); |
| GURL second_url("http://www.willlaunch.com"); |
| DummyPrerenderContents* second_prerender_contents = |
| prerender_manager()->CreateNextPrerenderContents( |
| @@ -1693,7 +1703,8 @@ TEST_F(PrerenderTest, LinkManagerExpireRevealingLaunch) { |
| EXPECT_FALSE(prerender_manager()->FindEntry(second_url)); |
| // The first prerender should have died, giving life to the second one. |
| - prerender_manager()->AdvanceTimeTicks(wait_for_first_prerender_to_expire); |
| + prerender_manager()->unittest_time()->AdvanceTimeTicks( |
| + wait_for_first_prerender_to_expire); |
| EXPECT_FALSE(prerender_manager()->FindEntry(first_url)); |
| std::unique_ptr<PrerenderContents> entry = |
| prerender_manager()->FindAndUseEntry(second_url); |