Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(221)

Unified Diff: chrome/browser/prerender/prerender_unittest.cc

Issue 10198040: New link rel=prerender api, using WebKit::WebPrerenderingPlatform (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix base Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/prerender/prerender_unittest.cc
diff --git a/chrome/browser/prerender/prerender_manager_unittest.cc b/chrome/browser/prerender/prerender_unittest.cc
similarity index 63%
rename from chrome/browser/prerender/prerender_manager_unittest.cc
rename to chrome/browser/prerender/prerender_unittest.cc
index dd023b194ff6157878d2fa35b627fb7077921393..b50deda90ccac6c46ef89b5b79a5655c1eef4dea 100644
--- a/chrome/browser/prerender/prerender_manager_unittest.cc
+++ b/chrome/browser/prerender/prerender_unittest.cc
@@ -7,6 +7,7 @@
#include "base/message_loop.h"
#include "base/time.h"
#include "chrome/browser/prerender/prerender_contents.h"
+#include "chrome/browser/prerender/prerender_link_manager.h"
#include "chrome/browser/prerender/prerender_manager.h"
#include "chrome/browser/prerender/prerender_origin.h"
#include "chrome/common/chrome_switches.h"
@@ -16,6 +17,7 @@
#include "content/test/test_browser_thread.h"
#include "googleurl/src/gurl.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/size.h"
using content::BrowserThread;
@@ -61,6 +63,10 @@ class DummyPrerenderContents : public PrerenderContents {
FinalStatus expected_final_status() const { return expected_final_status_; }
+ bool prerendering_has_been_cancelled() const {
+ return PrerenderContents::prerendering_has_been_cancelled();
+ }
+
private:
bool has_started_;
FinalStatus expected_final_status_;
@@ -141,13 +147,6 @@ class TestPrerenderManager : public PrerenderManager {
return prerender_contents;
}
- // Shorthand to add a simple preload with a reasonable source.
- bool AddSimplePrerender(const GURL& url) {
- return AddPrerenderFromLinkRelPrerender(-1, -1,
- url,
- content::Referrer());
- }
-
void set_rate_limit_enabled(bool enabled) {
mutable_config().rate_limit_enabled = enabled;
}
@@ -207,11 +206,17 @@ class RestorePrerenderMode {
} // namespace
-class PrerenderManagerTest : public testing::Test {
+class PrerenderTest : public testing::Test {
public:
- PrerenderManagerTest() : ui_thread_(BrowserThread::UI, &message_loop_),
- prerender_manager_(
- new TestPrerenderManager(prerender_tracker())) {
+ static const int kDefaultChildId = -1;
+ static const int kDefaultRenderViewRouteId = -1;
+
+ PrerenderTest() : ui_thread_(BrowserThread::UI, &message_loop_),
+ prerender_manager_(
+ new TestPrerenderManager(prerender_tracker())),
+ prerender_link_manager_(
+ new PrerenderLinkManager(prerender_manager_.get())),
+ last_prerender_id_(0) {
// Enable omnibox prerendering.
CommandLine::ForCurrentProcess()->AppendSwitchASCII(
switches::kPrerenderFromOmnibox,
@@ -222,7 +227,34 @@ class PrerenderManagerTest : public testing::Test {
return prerender_manager_.get();
}
+ PrerenderLinkManager* prerender_link_manager() {
+ return prerender_link_manager_.get();
+ }
+
+ bool IsEmptyPrerenderLinkManager() {
+ return prerender_link_manager_->IsEmpty();
+ }
+
+ int last_prerender_id() const {
+ return last_prerender_id_;
+ }
+
+ // Shorthand to add a simple preload with a reasonable source.
+ bool AddSimplePrerender(const GURL& url) {
+ return prerender_link_manager()->OnAddPrerender(kDefaultChildId,
+ GetNextPrerenderID(),
+ url,
+ content::Referrer(),
+ gfx::Size(0, 0),
+ kDefaultRenderViewRouteId);
+ }
+
private:
+ int GetNextPrerenderID() {
dominich 2012/04/26 22:50:58 nit: method could be const
gavinp 2012/04/27 20:31:32 I don't think so, unless I make last_prerender_id_
dominich 2012/04/27 21:52:01 You're right, of course. Review blindness.
+ ++last_prerender_id_;
+ return last_prerender_id_;
dominich 2012/04/26 22:50:58 nit: or 'return ++last_prerender_id_;'
gavinp 2012/04/27 20:31:32 Done, though I bet a guinea that it compiles to th
+ }
+
PrerenderTracker* prerender_tracker() {
return g_browser_process->prerender_tracker();
}
@@ -231,35 +263,37 @@ class PrerenderManagerTest : public testing::Test {
MessageLoop message_loop_;
content::TestBrowserThread ui_thread_;
scoped_ptr<TestPrerenderManager> prerender_manager_;
+ scoped_ptr<PrerenderLinkManager> prerender_link_manager_;
+ int last_prerender_id_;
};
-TEST_F(PrerenderManagerTest, EmptyTest) {
+TEST_F(PrerenderTest, EmptyTest) {
EXPECT_FALSE(prerender_manager()->MaybeUsePrerenderedPage(
NULL,
GURL("http://www.google.com/")));
}
-TEST_F(PrerenderManagerTest, FoundTest) {
+TEST_F(PrerenderTest, FoundTest) {
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url,
FINAL_STATUS_USED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_TRUE(prerender_contents->has_started());
ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
}
// Make sure that if queue a request, and a second prerender request for the
// same URL comes in, that we drop the second request and keep the first one.
-TEST_F(PrerenderManagerTest, DropSecondRequestTest) {
+TEST_F(PrerenderTest, DropSecondRequestTest) {
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url,
FINAL_STATUS_USED);
DummyPrerenderContents* null = NULL;
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(prerender_contents->has_started());
@@ -267,7 +301,7 @@ TEST_F(PrerenderManagerTest, DropSecondRequestTest) {
prerender_manager()->CreateNextPrerenderContents(
url,
FINAL_STATUS_MANAGER_SHUTDOWN);
- EXPECT_FALSE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_FALSE(AddSimplePrerender(url));
EXPECT_EQ(prerender_contents1,
prerender_manager()->next_prerender_contents());
EXPECT_FALSE(prerender_contents1->has_started());
@@ -276,14 +310,14 @@ TEST_F(PrerenderManagerTest, DropSecondRequestTest) {
}
// Ensure that we expire a prerendered page after the max. permitted time.
-TEST_F(PrerenderManagerTest, ExpireTest) {
+TEST_F(PrerenderTest, ExpireTest) {
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url,
FINAL_STATUS_TIMED_OUT);
DummyPrerenderContents* null = NULL;
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(prerender_contents->has_started());
prerender_manager()->AdvanceTime(prerender_manager()->GetMaxAge() +
@@ -293,14 +327,14 @@ TEST_F(PrerenderManagerTest, ExpireTest) {
// LRU Test. Make sure that if we prerender more than one request, that
// the oldest one will be dropped.
-TEST_F(PrerenderManagerTest, DropOldestRequestTest) {
+TEST_F(PrerenderTest, DropOldestRequestTest) {
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url,
FINAL_STATUS_EVICTED);
DummyPrerenderContents* null = NULL;
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(prerender_contents->has_started());
@@ -309,7 +343,7 @@ TEST_F(PrerenderManagerTest, DropOldestRequestTest) {
prerender_manager()->CreateNextPrerenderContents(
url1,
FINAL_STATUS_USED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url1));
+ EXPECT_TRUE(AddSimplePrerender(url1));
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(prerender_contents1->has_started());
@@ -319,7 +353,7 @@ TEST_F(PrerenderManagerTest, DropOldestRequestTest) {
// Two element prerender test. Ensure that the LRU operates correctly if we
// permit 2 elements to be kept prerendered.
-TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) {
+TEST_F(PrerenderTest, TwoElementPrerenderTest) {
prerender_manager()->mutable_config().max_elements = 2;
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
@@ -327,7 +361,7 @@ TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) {
url,
FINAL_STATUS_EVICTED);
DummyPrerenderContents* null = NULL;
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(prerender_contents->has_started());
@@ -336,7 +370,7 @@ TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) {
prerender_manager()->CreateNextPrerenderContents(
url1,
FINAL_STATUS_USED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url1));
+ EXPECT_TRUE(AddSimplePrerender(url1));
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(prerender_contents1->has_started());
@@ -345,7 +379,7 @@ TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) {
prerender_manager()->CreateNextPrerenderContents(
url2,
FINAL_STATUS_USED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url2));
+ EXPECT_TRUE(AddSimplePrerender(url2));
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(prerender_contents2->has_started());
@@ -354,7 +388,7 @@ TEST_F(PrerenderManagerTest, TwoElementPrerenderTest) {
ASSERT_EQ(prerender_contents2, prerender_manager()->GetEntry(url2));
}
-TEST_F(PrerenderManagerTest, AliasURLTest) {
+TEST_F(PrerenderTest, AliasURLTest) {
GURL url("http://www.google.com/");
GURL alias_url1("http://www.google.com/index.html");
GURL alias_url2("http://google.com/");
@@ -367,37 +401,37 @@ TEST_F(PrerenderManagerTest, AliasURLTest) {
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url, alias_urls, FINAL_STATUS_USED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
ASSERT_EQ(NULL, prerender_manager()->GetEntry(not_an_alias_url));
ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url1));
prerender_contents = prerender_manager()->CreateNextPrerenderContents(
url, alias_urls, FINAL_STATUS_USED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url2));
prerender_contents = prerender_manager()->CreateNextPrerenderContents(
url, alias_urls, FINAL_STATUS_USED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
// Test that alias URLs can not be added.
prerender_contents = prerender_manager()->CreateNextPrerenderContents(
url, alias_urls, FINAL_STATUS_USED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
- EXPECT_FALSE(prerender_manager()->AddSimplePrerender(url));
- EXPECT_FALSE(prerender_manager()->AddSimplePrerender(alias_url1));
- EXPECT_FALSE(prerender_manager()->AddSimplePrerender(alias_url2));
+ EXPECT_TRUE(AddSimplePrerender(url));
+ EXPECT_FALSE(AddSimplePrerender(url));
+ EXPECT_FALSE(AddSimplePrerender(alias_url1));
+ EXPECT_FALSE(AddSimplePrerender(alias_url2));
ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
}
// Ensure that we ignore prerender requests within the rate limit.
-TEST_F(PrerenderManagerTest, RateLimitInWindowTest) {
+TEST_F(PrerenderTest, RateLimitInWindowTest) {
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url,
FINAL_STATUS_MANAGER_SHUTDOWN);
DummyPrerenderContents* null = NULL;
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(prerender_contents->has_started());
@@ -408,19 +442,19 @@ TEST_F(PrerenderManagerTest, RateLimitInWindowTest) {
prerender_manager()->CreateNextPrerenderContents(
url,
FINAL_STATUS_MANAGER_SHUTDOWN);
- EXPECT_FALSE(prerender_manager()->AddSimplePrerender(url1));
+ EXPECT_FALSE(AddSimplePrerender(url1));
prerender_manager()->set_rate_limit_enabled(false);
}
// Ensure that we don't ignore prerender requests outside the rate limit.
-TEST_F(PrerenderManagerTest, RateLimitOutsideWindowTest) {
+TEST_F(PrerenderTest, RateLimitOutsideWindowTest) {
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url,
FINAL_STATUS_EVICTED);
DummyPrerenderContents* null = NULL;
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(prerender_contents->has_started());
@@ -433,19 +467,19 @@ TEST_F(PrerenderManagerTest, RateLimitOutsideWindowTest) {
prerender_manager()->CreateNextPrerenderContents(
url1,
FINAL_STATUS_MANAGER_SHUTDOWN);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url1));
+ EXPECT_TRUE(AddSimplePrerender(url1));
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(rate_limit_prerender_contents->has_started());
prerender_manager()->set_rate_limit_enabled(false);
}
-TEST_F(PrerenderManagerTest, PendingPrerenderTest) {
+TEST_F(PrerenderTest, PendingPrerenderTest) {
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url,
FINAL_STATUS_USED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
int child_id;
int route_id;
@@ -465,7 +499,7 @@ TEST_F(PrerenderManagerTest, PendingPrerenderTest) {
// Tests that a PrerenderManager created for a browser session in the control
// group works as expected.
-TEST_F(PrerenderManagerTest, ControlGroup) {
+TEST_F(PrerenderTest, ControlGroup) {
RestorePrerenderMode restore_prerender_mode;
PrerenderManager::SetMode(
PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP);
@@ -474,14 +508,14 @@ TEST_F(PrerenderManagerTest, ControlGroup) {
prerender_manager()->CreateNextPrerenderContents(
url,
FINAL_STATUS_MANAGER_SHUTDOWN);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_FALSE(prerender_contents->has_started());
}
// Tests that prerendering is cancelled when the source render view does not
// exist. On failure, the DCHECK in CreatePrerenderContents() above should be
// triggered.
-TEST_F(PrerenderManagerTest, SourceRenderViewClosed) {
+TEST_F(PrerenderTest, SourceRenderViewClosed) {
GURL url("http://www.google.com/");
prerender_manager()->CreateNextPrerenderContents(
url,
@@ -492,55 +526,59 @@ TEST_F(PrerenderManagerTest, SourceRenderViewClosed) {
// Tests that the prerender manager ignores fragment references when matching
// prerender URLs in the case the fragment is not in the prerender URL.
-TEST_F(PrerenderManagerTest, PageMatchesFragmentTest) {
+TEST_F(PrerenderTest, PageMatchesFragmentTest) {
GURL url("http://www.google.com/");
GURL fragment_url("http://www.google.com/#test");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(url,
FINAL_STATUS_USED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_TRUE(prerender_contents->has_started());
ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(fragment_url));
}
// Tests that the prerender manager ignores fragment references when matching
// prerender URLs in the case the fragment is in the prerender URL.
-TEST_F(PrerenderManagerTest, FragmentMatchesPageTest) {
+// TODO(gavinp): Re-enable this in the Prerender API once we're officially
+// fragment clean.
+TEST_F(PrerenderTest, DISABLED_FragmentMatchesPageTest) {
GURL url("http://www.google.com/");
GURL fragment_url("http://www.google.com/#test");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(fragment_url,
FINAL_STATUS_USED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(fragment_url));
+ EXPECT_TRUE(AddSimplePrerender(fragment_url));
EXPECT_TRUE(prerender_contents->has_started());
ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
}
// Tests that the prerender manager ignores fragment references when matching
// prerender URLs in the case the fragment is in both URLs.
-TEST_F(PrerenderManagerTest, FragmentMatchesFragmentTest) {
+// TODO(gavinp): Re-enable this in the Prerender API once we're officially
+// fragment clean.
+TEST_F(PrerenderTest, DISABLED_FragmentMatchesFragmentTest) {
GURL fragment_url("http://www.google.com/#test");
GURL other_fragment_url("http://www.google.com/#other_test");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(fragment_url,
FINAL_STATUS_USED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(fragment_url));
+ EXPECT_TRUE(AddSimplePrerender(fragment_url));
EXPECT_TRUE(prerender_contents->has_started());
ASSERT_EQ(prerender_contents,
prerender_manager()->GetEntry(other_fragment_url));
}
// Make sure that clearing works as expected.
-TEST_F(PrerenderManagerTest, ClearTest) {
+TEST_F(PrerenderTest, ClearTest) {
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url,
FINAL_STATUS_CACHE_OR_HISTORY_CLEARED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_TRUE(prerender_contents->has_started());
prerender_manager()->ClearData(PrerenderManager::CLEAR_PRERENDER_CONTENTS);
DummyPrerenderContents* null = NULL;
@@ -548,12 +586,12 @@ TEST_F(PrerenderManagerTest, ClearTest) {
}
// Make sure canceling works as expected.
-TEST_F(PrerenderManagerTest, CancelAllTest) {
+TEST_F(PrerenderTest, CancelAllTest) {
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url, FINAL_STATUS_CANCELLED);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_TRUE(prerender_contents->has_started());
prerender_manager()->CancelAllPrerenders();
const DummyPrerenderContents* null = NULL;
@@ -561,7 +599,7 @@ TEST_F(PrerenderManagerTest, CancelAllTest) {
}
// Make sure canceling for omnibox works as expected.
-TEST_F(PrerenderManagerTest, CancelOmniboxRemovesOmniboxTest) {
+TEST_F(PrerenderTest, CancelOmniboxRemovesOmniboxTest) {
// Check canceling removes the Omnibox url.
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
@@ -574,28 +612,184 @@ TEST_F(PrerenderManagerTest, CancelOmniboxRemovesOmniboxTest) {
EXPECT_EQ(null, prerender_manager()->FindEntry(url));
}
-TEST_F(PrerenderManagerTest, CancelOmniboxDoesNotRemoveLinkTest) {
+TEST_F(PrerenderTest, CancelOmniboxDoesNotRemoveLinkTest) {
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url, ORIGIN_LINK_REL_PRERENDER, FINAL_STATUS_MANAGER_SHUTDOWN);
- EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_TRUE(prerender_contents->has_started());
prerender_manager()->CancelOmniboxPrerenders();
const DummyPrerenderContents* null = NULL;
EXPECT_NE(null, prerender_manager()->FindEntry(url));
}
-TEST_F(PrerenderManagerTest, OmniboxNotAllowedWhenDisabled) {
+TEST_F(PrerenderTest, OmniboxNotAllowedWhenDisabled) {
prerender_manager()->set_enabled(false);
EXPECT_FALSE(prerender_manager()->AddPrerenderFromOmnibox(
GURL("http://www.example.com"), NULL));
}
-TEST_F(PrerenderManagerTest, LinkRelNotAllowedWhenDisabled) {
+TEST_F(PrerenderTest, LinkRelNotAllowedWhenDisabled) {
prerender_manager()->set_enabled(false);
- EXPECT_FALSE(prerender_manager()->AddSimplePrerender(
+ EXPECT_FALSE(AddSimplePrerender(
GURL("http://www.example.com")));
}
+TEST_F(PrerenderTest, LinkManagerCancel) {
+ EXPECT_TRUE(IsEmptyPrerenderLinkManager());
+ GURL url("http://www.myexample.com");
+ DummyPrerenderContents* prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url,
+ FINAL_STATUS_CANCELLED);
+ EXPECT_TRUE(AddSimplePrerender(url));
+ EXPECT_TRUE(prerender_contents->has_started());
+ EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url));
+ prerender_link_manager()->OnCancelPrerender(last_prerender_id(),
+ kDefaultChildId);
+ EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
+ DummyPrerenderContents* null = NULL;
+ ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ EXPECT_TRUE(IsEmptyPrerenderLinkManager());
+}
+
+TEST_F(PrerenderTest, LinkManagerCancelTwiceCrash) {
+ EXPECT_TRUE(IsEmptyPrerenderLinkManager());
+ GURL url("http://www.myexample.com");
+ DummyPrerenderContents* prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url,
+ FINAL_STATUS_CANCELLED);
+ EXPECT_TRUE(AddSimplePrerender(url));
+ EXPECT_TRUE(prerender_contents->has_started());
+ EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url));
+ prerender_link_manager()->OnCancelPrerender(last_prerender_id(),
+ kDefaultChildId);
+ EXPECT_TRUE(IsEmptyPrerenderLinkManager());
+ EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
+ DummyPrerenderContents* null = NULL;
+ ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ EXPECT_DEBUG_DEATH(
+ prerender_link_manager()->OnCancelPrerender(last_prerender_id(),
+ kDefaultChildId),
+ "Canceling a prerender that doesn't exist");
+}
+
+TEST_F(PrerenderTest, LinkManagerAddTwiceCancelTwice) {
+ EXPECT_TRUE(IsEmptyPrerenderLinkManager());
+ GURL url("http://www.myexample.com");
+ DummyPrerenderContents* prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url, FINAL_STATUS_CANCELLED);
+ EXPECT_TRUE(AddSimplePrerender(url));
+ const int first_prerender_id = last_prerender_id();
+ EXPECT_TRUE(prerender_contents->has_started());
+ EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url));
+ // The second prerender doesn't successfully add (it's a dupe), but
+ // we should still be able to use the |prerender_id| to refer to it
+ // after the add, and it should still prevent subsequent removal
+ // of the prerender when the first one is canceled.
+ EXPECT_FALSE(AddSimplePrerender(url));
+ const int second_prerender_id = last_prerender_id();
+ EXPECT_TRUE(prerender_contents->has_started());
+ EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url));
+ prerender_link_manager()->OnCancelPrerender(first_prerender_id,
+ kDefaultChildId);
+ EXPECT_FALSE(IsEmptyPrerenderLinkManager());
+ EXPECT_TRUE(prerender_contents->has_started());
+ EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url));
+ prerender_link_manager()->OnCancelPrerender(second_prerender_id,
+ kDefaultChildId);
+ EXPECT_TRUE(IsEmptyPrerenderLinkManager());
+ EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
+ DummyPrerenderContents* null = NULL;
+ ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+}
+
+TEST_F(PrerenderTest, LinkManagerExpireThenCancel) {
+ EXPECT_TRUE(IsEmptyPrerenderLinkManager());
+ GURL url("http://www.myexample.com");
+ DummyPrerenderContents* prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url,
+ FINAL_STATUS_TIMED_OUT);
+ EXPECT_TRUE(AddSimplePrerender(url));
+ EXPECT_TRUE(prerender_contents->has_started());
+ EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindEntry(url));
+ prerender_manager()->AdvanceTime(prerender_manager()->GetMaxAge() +
+ base::TimeDelta::FromSeconds(1));
+ EXPECT_FALSE(IsEmptyPrerenderLinkManager());
+ DummyPrerenderContents* null = NULL;
+ ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ prerender_link_manager()->OnCancelPrerender(last_prerender_id(),
+ kDefaultChildId);
+ EXPECT_TRUE(IsEmptyPrerenderLinkManager());
+ ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+}
+
+TEST_F(PrerenderTest, LinkManagerExpireThenAddAgain) {
+ EXPECT_TRUE(IsEmptyPrerenderLinkManager());
+ GURL url("http://www.myexample.com");
+ DummyPrerenderContents* first_prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url,
+ FINAL_STATUS_TIMED_OUT);
+ EXPECT_TRUE(AddSimplePrerender(url));
+ EXPECT_TRUE(first_prerender_contents->has_started());
+ EXPECT_FALSE(first_prerender_contents->prerendering_has_been_cancelled());
+ ASSERT_EQ(first_prerender_contents, prerender_manager()->FindEntry(url));
+ prerender_manager()->AdvanceTime(prerender_manager()->GetMaxAge() +
+ base::TimeDelta::FromSeconds(1));
+ DummyPrerenderContents* null = NULL;
+ ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ // Unlike in LinkManagerAddTwiceCancelTwice, we expect this time adding to
+ // return true; the prerender has in the meantime been expired by the
+ // prerender manager, and so this is an add in the prerender manager sense.
+ DummyPrerenderContents* second_prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url,
+ FINAL_STATUS_USED);
+ EXPECT_TRUE(AddSimplePrerender(url));
+ EXPECT_TRUE(second_prerender_contents->has_started());
+ ASSERT_EQ(second_prerender_contents, prerender_manager()->GetEntry(url));
+ // The PrerenderLinkManager is not empty since we never removed the first
+ // prerender.
+ EXPECT_FALSE(IsEmptyPrerenderLinkManager());
+}
+
+TEST_F(PrerenderTest, LinkManagerCancelThenAddAgain) {
+ EXPECT_TRUE(IsEmptyPrerenderLinkManager());
+ GURL url("http://www.myexample.com");
+ DummyPrerenderContents* first_prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url,
+ FINAL_STATUS_CANCELLED);
+ EXPECT_TRUE(AddSimplePrerender(url));
+ EXPECT_TRUE(first_prerender_contents->has_started());
+ EXPECT_FALSE(first_prerender_contents->prerendering_has_been_cancelled());
+ ASSERT_EQ(first_prerender_contents, prerender_manager()->FindEntry(url));
+ prerender_link_manager()->OnCancelPrerender(last_prerender_id(),
+ kDefaultChildId);
+ EXPECT_TRUE(IsEmptyPrerenderLinkManager());
+ EXPECT_TRUE(first_prerender_contents->prerendering_has_been_cancelled());
+ DummyPrerenderContents* null = NULL;
+ ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ DummyPrerenderContents* second_prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url,
+ FINAL_STATUS_USED);
+ EXPECT_TRUE(AddSimplePrerender(url));
+ EXPECT_TRUE(second_prerender_contents->has_started());
+ ASSERT_EQ(second_prerender_contents, prerender_manager()->GetEntry(url));
+ EXPECT_FALSE(IsEmptyPrerenderLinkManager());
+}
+
} // namespace prerender
+

Powered by Google App Engine
This is Rietveld 408576698