Index: chrome/browser/prerender/prerender_unittest.cc |
diff --git a/chrome/browser/prerender/prerender_unittest.cc b/chrome/browser/prerender/prerender_unittest.cc |
index f9961bac1840cfe0e924d3a5f2ddca411a21f326..ed84fbb2b80ddcc64c19a657e50879fbc798231e 100644 |
--- a/chrome/browser/prerender/prerender_unittest.cc |
+++ b/chrome/browser/prerender/prerender_unittest.cc |
@@ -781,6 +781,39 @@ TEST_F(PrerenderTest, LinkManagerNavigateAwayLaunchAnother) { |
prerender_manager()->FindEntry(second_url)); |
} |
+// Prefetching the same URL twice during |time_to_live| results in a duplicate |
+// and is aborted. |
+TEST_F(PrerenderTest, NoStatePrefetchDuplicate) { |
+ const GURL kUrl("http://www.google.com/"); |
+ const TimeDelta kTimeToLive = TimeDelta::FromSeconds(300); |
+ const TimeDelta kTestAdvance = TimeDelta::FromSeconds(100); |
+ |
+ RestorePrerenderMode restore_prerender_mode; |
+ prerender_manager()->SetMode( |
+ PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); |
+ base::SimpleTestTickClock* tick_clock = |
+ OverridePrerenderManagerTimeTicks(prerender_manager()); |
+ prerender_manager()->mutable_config().time_to_live = kTimeToLive; |
+ |
+ // Prefetch the url once. |
+ prerender_manager()->CreateNextPrerenderContents( |
+ kUrl, ORIGIN_OMNIBOX, FINAL_STATUS_MANAGER_SHUTDOWN); |
+ EXPECT_TRUE( |
+ prerender_manager()->AddPrerenderFromOmnibox(kUrl, nullptr, gfx::Size())); |
+ |
+ prerender_manager()->CreateNextPrerenderContents( |
+ kUrl, ORIGIN_OMNIBOX, FINAL_STATUS_MANAGER_SHUTDOWN); |
+ |
+ // Prefetching again before time_to_live aborts, because it is a duplicate. |
+ tick_clock->Advance(kTestAdvance); |
+ EXPECT_FALSE( |
+ prerender_manager()->AddPrerenderFromOmnibox(kUrl, nullptr, gfx::Size())); |
+ |
+ // Prefetching after time_to_live succeeds. |
+ tick_clock->Advance(prerender_manager()->config().time_to_live); |
+ EXPECT_TRUE( |
+ prerender_manager()->AddPrerenderFromOmnibox(kUrl, nullptr, gfx::Size())); |
+} |
// Make sure that if we prerender more requests than we support, that we launch |
// them in the order given up until we reach MaxConcurrency, at which point we |