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 4dead3002f8a6e6533093a32e82e8069fbe31180..0ad24899cbd49acd1a25ce2568761df890536e50 100644 |
| --- a/chrome/browser/prerender/prerender_unittest.cc |
| +++ b/chrome/browser/prerender/prerender_unittest.cc |
| @@ -1355,4 +1355,53 @@ TEST_F(PrerenderTest, LinkManagerWaitToLaunchNotLaunched) { |
| EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
| } |
| +// Creates two prerenders, one of which should start when the first one expires. |
| +TEST_F(PrerenderTest, LinkManagerExpireRevealingLaunch) { |
| + SetConcurrency(1); |
| + ASSERT_LT(prerender_manager()->config().max_wait_to_launch, |
| + prerender_manager()->config().time_to_live); |
| + |
| + GURL first_url("http://www.willexpire.com"); |
| + DummyPrerenderContents* first_prerender_contents = |
| + prerender_manager()->CreateNextPrerenderContents( |
| + first_url, FINAL_STATUS_TIMED_OUT); |
| + EXPECT_TRUE(AddSimplePrerender(first_url)); |
| + EXPECT_EQ(first_prerender_contents, |
| + prerender_manager()->FindEntry(first_url)); |
| + |
| + // Insert the second prerender so it will be still be launchable when the |
| + // first expires. |
| + const TimeDelta wait_to_launch_second_prerender = |
| + prerender_manager()->config().time_to_live - |
| + prerender_manager()->config().max_wait_to_launch + |
| + TimeDelta::FromSeconds(2); |
| + const TimeDelta wait_for_first_prerender_to_expire = |
| + prerender_manager()->config().max_wait_to_launch - |
| + TimeDelta::FromSeconds(1); |
|
mmenke
2013/01/01 18:18:36
optional: This may be a little clearer if you use
gavinp
2013/01/02 14:54:04
Done. Writing these types of equations is always t
|
| + EXPECT_LT(prerender_manager()->config().time_to_live, |
| + wait_to_launch_second_prerender + |
| + wait_for_first_prerender_to_expire); |
| + EXPECT_GT(prerender_manager()->config().max_wait_to_launch.InSeconds(), |
| + wait_for_first_prerender_to_expire.InSeconds());; |
|
mmenke
2013/01/01 18:18:36
nit: extra semi-colon.
gavinp
2013/01/02 14:54:04
Done.
|
| + |
| + prerender_manager()->AdvanceTimeTicks(wait_to_launch_second_prerender); |
| + GURL second_url("http://www.willlaunch.com"); |
| + DummyPrerenderContents* second_prerender_contents = |
| + prerender_manager()->CreateNextPrerenderContents( |
| + second_url, FINAL_STATUS_USED); |
| + EXPECT_FALSE(AddSimplePrerender(second_url)); |
| + |
| + // The first prerender is still running, but the second has not yet launched. |
| + EXPECT_EQ(first_prerender_contents, |
| + prerender_manager()->FindEntry(first_url)); |
| + PrerenderContents* null = NULL; |
| + EXPECT_EQ(null, 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); |
| + EXPECT_EQ(null, prerender_manager()->FindEntry(first_url)); |
| + EXPECT_EQ(second_prerender_contents, |
| + prerender_manager()->FindAndUseEntry(second_url)); |
| +} |
| + |
| } // namespace prerender |