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..82b9e9666d8301ff63c6a55b5f6abbe41db6aefb 100644 |
--- a/chrome/browser/prerender/prerender_unittest.cc |
+++ b/chrome/browser/prerender/prerender_unittest.cc |
@@ -38,6 +38,7 @@ |
#include "content/public/browser/render_view_host.h" |
#include "content/public/test/test_browser_thread.h" |
#include "net/base/network_change_notifier.h" |
+#include "net/http/http_cache.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "ui/gfx/geometry/rect.h" |
#include "ui/gfx/geometry/size.h" |
@@ -781,6 +782,37 @@ 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/"); |
+ |
+ RestorePrerenderMode restore_prerender_mode; |
+ prerender_manager()->SetMode( |
+ PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); |
+ base::SimpleTestTickClock* tick_clock = |
+ OverridePrerenderManagerTimeTicks(prerender_manager()); |
+ |
+ // 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(base::TimeDelta::FromSeconds(1)); |
+ EXPECT_FALSE( |
+ prerender_manager()->AddPrerenderFromOmnibox(kUrl, nullptr, gfx::Size())); |
+ |
+ // Prefetching after time_to_live succeeds. |
+ tick_clock->Advance( |
+ base::TimeDelta::FromMinutes(net::HttpCache::kPrefetchReuseMins)); |
+ 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 |