summaryrefslogtreecommitdiffstats
path: root/chrome/browser/prerender/prerender_unittest.cc
diff options
context:
space:
mode:
authorgavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-14 15:11:02 +0000
committergavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-14 15:11:02 +0000
commit5463c700e47a3beac464d95b251335bd90145a4d (patch)
tree31278200af813860369b5210e7d798edc850e6ad /chrome/browser/prerender/prerender_unittest.cc
parente88ff89bb0979a4d3321f9affef7d88f93fcc231 (diff)
downloadchromium_src-5463c700e47a3beac464d95b251335bd90145a4d.zip
chromium_src-5463c700e47a3beac464d95b251335bd90145a4d.tar.gz
chromium_src-5463c700e47a3beac464d95b251335bd90145a4d.tar.bz2
Handle interface to prerenders.
The prerender_manager now returns a PrerenderHandle* when creating a prerender; this is a useful object for canceling the prerender, as well as signaling navigation, etc... BUG=None Review URL: https://chromiumcodereview.appspot.com/10553029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@146735 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/prerender/prerender_unittest.cc')
-rw-r--r--chrome/browser/prerender/prerender_unittest.cc365
1 files changed, 256 insertions, 109 deletions
diff --git a/chrome/browser/prerender/prerender_unittest.cc b/chrome/browser/prerender/prerender_unittest.cc
index b6403d9..5a17ee0 100644
--- a/chrome/browser/prerender/prerender_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_handle.h"
#include "chrome/browser/prerender/prerender_link_manager.h"
#include "chrome/browser/prerender/prerender_manager.h"
#include "chrome/browser/prerender/prerender_origin.h"
@@ -24,20 +25,17 @@ using content::Referrer;
namespace prerender {
+class UnitTestPrerenderManager;
+
namespace {
class DummyPrerenderContents : public PrerenderContents {
public:
- DummyPrerenderContents(PrerenderManager* prerender_manager,
+ DummyPrerenderContents(UnitTestPrerenderManager* test_prerender_manager,
PrerenderTracker* prerender_tracker,
const GURL& url,
Origin origin,
- FinalStatus expected_final_status)
- : PrerenderContents(prerender_manager, prerender_tracker,
- NULL, url, Referrer(), origin,
- PrerenderManager::kNoExperiment),
- expected_final_status_(expected_final_status) {
- }
+ FinalStatus expected_final_status);
virtual ~DummyPrerenderContents() {
EXPECT_EQ(expected_final_status_, final_status());
@@ -47,14 +45,7 @@ class DummyPrerenderContents : public PrerenderContents {
int ALLOW_UNUSED creator_child_id,
const gfx::Size& ALLOW_UNUSED size,
content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace,
- bool is_control_group) OVERRIDE {
- // In the base PrerenderContents implementation, StartPrerendering will
- // be called even when the PrerenderManager is part of the control group,
- // but it will early exit before actually creating a new RenderView if
- // |is_control_group| is true;
- if (!is_control_group)
- prerendering_has_started_ = true;
- }
+ bool is_control_group) OVERRIDE;
virtual bool GetChildId(int* child_id) const OVERRIDE {
*child_id = 0;
@@ -73,12 +64,20 @@ class DummyPrerenderContents : public PrerenderContents {
}
private:
+ UnitTestPrerenderManager* test_prerender_manager_;
FinalStatus expected_final_status_;
};
-class TestPrerenderManager : public PrerenderManager {
+const gfx::Size kSize(640, 480);
+
+} // namespace
+
+class UnitTestPrerenderManager : public PrerenderManager {
public:
- explicit TestPrerenderManager(PrerenderTracker* prerender_tracker)
+ using PrerenderManager::kNavigationRecordWindowMs;
+ using PrerenderManager::GetMaxAge;
+
+ explicit UnitTestPrerenderManager(PrerenderTracker* prerender_tracker)
: PrerenderManager(&profile_, prerender_tracker),
time_(base::Time::Now()),
time_ticks_(base::TimeTicks::Now()),
@@ -87,23 +86,36 @@ class TestPrerenderManager : public PrerenderManager {
set_rate_limit_enabled(false);
}
- virtual ~TestPrerenderManager() {
+ virtual ~UnitTestPrerenderManager() {
if (next_prerender_contents()) {
next_prerender_contents_.release()->Destroy(
FINAL_STATUS_MANAGER_SHUTDOWN);
}
- // Set the final status for all PrerenderContents with an expected final
- // status of FINAL_STATUS_USED. These values are normally set when the
- // prerendered RVH is swapped into a tab, which doesn't happen in these
- // unit tests.
- for (ScopedVector<PrerenderContents>::iterator it =
- used_prerender_contents_.begin();
- it != used_prerender_contents_.end(); ++it) {
- (*it)->set_final_status(FINAL_STATUS_USED);
- }
DoShutdown();
}
+ PrerenderContents* FindEntry(const GURL& url) {
+ DeleteOldEntries();
+ DeletePendingDeleteEntries();
+ if (PrerenderData* data = FindPrerenderData(url, NULL))
+ return data->contents();
+ return NULL;
+ }
+
+ PrerenderContents* FindAndUseEntry(const GURL& url) {
+ PrerenderData* prerender_data = FindPrerenderData(url, NULL);
+ if (!prerender_data)
+ return NULL;
+ PrerenderContents* prerender_contents = prerender_data->contents();
+ prerender_contents->set_final_status(FINAL_STATUS_USED);
+ std::list<linked_ptr<PrerenderData> >::iterator to_erase =
+ FindIteratorForPrerenderContents(prerender_contents);
+ DCHECK(to_erase != active_prerender_list_.end());
+ active_prerender_list_.erase(to_erase);
+ prerender_contents->StartPendingPrerenders();
+ return prerender_contents;
+ }
+
void AdvanceTime(base::TimeDelta delta) {
time_ += delta;
}
@@ -159,6 +171,15 @@ class TestPrerenderManager : public PrerenderManager {
return next_prerender_contents_.get();
}
+ // from PrerenderManager
+ virtual base::Time GetCurrentTime() const OVERRIDE {
+ return time_;
+ }
+
+ virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE {
+ return time_ticks_;
+ }
+
private:
void SetNextPrerenderContents(DummyPrerenderContents* prerender_contents) {
DCHECK(!next_prerender_contents_.get());
@@ -167,13 +188,6 @@ class TestPrerenderManager : public PrerenderManager {
used_prerender_contents_.push_back(prerender_contents);
}
- virtual base::Time GetCurrentTime() const OVERRIDE {
- return time_;
- }
-
- virtual base::TimeTicks GetCurrentTimeTicks() const OVERRIDE {
- return time_ticks_;
- }
virtual PrerenderContents* CreatePrerenderContents(
const GURL& url,
@@ -181,8 +195,8 @@ class TestPrerenderManager : public PrerenderManager {
Origin origin,
uint8 experiment_id) OVERRIDE {
DCHECK(next_prerender_contents_.get());
- DCHECK_EQ(next_prerender_contents_->prerender_url(), url);
- DCHECK_EQ(next_prerender_contents_->origin(), origin);
+ EXPECT_EQ(url, next_prerender_contents_->prerender_url());
+ EXPECT_EQ(origin, next_prerender_contents_->origin());
return next_prerender_contents_.release();
}
@@ -208,7 +222,32 @@ class RestorePrerenderMode {
PrerenderManager::PrerenderManagerMode prev_mode_;
};
-} // namespace
+DummyPrerenderContents::DummyPrerenderContents(
+ UnitTestPrerenderManager* test_prerender_manager,
+ PrerenderTracker* prerender_tracker,
+ const GURL& url,
+ Origin origin,
+ FinalStatus expected_final_status)
+ : PrerenderContents(test_prerender_manager, prerender_tracker,
+ NULL, url, Referrer(), origin,
+ PrerenderManager::kNoExperiment),
+ test_prerender_manager_(test_prerender_manager),
+ expected_final_status_(expected_final_status) {
+}
+
+void DummyPrerenderContents::StartPrerendering(
+ int ALLOW_UNUSED creator_child_id,
+ const gfx::Size& ALLOW_UNUSED size,
+ content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace,
+ bool is_control_group) {
+ // In the base PrerenderContents implementation, StartPrerendering will
+ // be called even when the PrerenderManager is part of the control group,
+ // but it will early exit before actually creating a new RenderView if
+ // |is_control_group| is true;
+ if (!is_control_group)
+ prerendering_has_started_ = true;
+ load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks();
+}
class PrerenderTest : public testing::Test {
public:
@@ -217,7 +256,7 @@ class PrerenderTest : public testing::Test {
PrerenderTest() : ui_thread_(BrowserThread::UI, &message_loop_),
prerender_manager_(
- new TestPrerenderManager(prerender_tracker())),
+ new UnitTestPrerenderManager(prerender_tracker())),
prerender_link_manager_(
new PrerenderLinkManager(prerender_manager_.get())),
last_prerender_id_(0) {
@@ -227,7 +266,11 @@ class PrerenderTest : public testing::Test {
switches::kPrerenderFromOmniboxSwitchValueEnabled);
}
- TestPrerenderManager* prerender_manager() {
+ ~PrerenderTest() {
+ prerender_link_manager_->OnChannelClosing(kDefaultChildId);
+ }
+
+ UnitTestPrerenderManager* prerender_manager() {
return prerender_manager_.get();
}
@@ -252,7 +295,7 @@ class PrerenderTest : public testing::Test {
return prerender_link_manager()->OnAddPrerender(
kDefaultChildId, GetNextPrerenderID(),
url, content::Referrer(),
- gfx::Size(), kDefaultRenderViewRouteId);
+ kSize, kDefaultRenderViewRouteId);
}
private:
@@ -263,18 +306,23 @@ class PrerenderTest : public testing::Test {
// Needed to pass PrerenderManager's DCHECKs.
MessageLoop message_loop_;
content::TestBrowserThread ui_thread_;
- scoped_ptr<TestPrerenderManager> prerender_manager_;
+ scoped_ptr<UnitTestPrerenderManager> prerender_manager_;
scoped_ptr<PrerenderLinkManager> prerender_link_manager_;
int last_prerender_id_;
};
-TEST_F(PrerenderTest, EmptyTest) {
- EXPECT_FALSE(prerender_manager()->MaybeUsePrerenderedPage(
- NULL,
- GURL("http://www.google.com/")));
+TEST_F(PrerenderTest, FoundTest) {
+ GURL url("http://www.google.com/");
+ DummyPrerenderContents* prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url,
+ FINAL_STATUS_USED);
+ EXPECT_TRUE(AddSimplePrerender(url));
+ EXPECT_TRUE(prerender_contents->prerendering_has_started());
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
}
-TEST_F(PrerenderTest, FoundTest) {
+TEST_F(PrerenderTest, DuplicateTest) {
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
@@ -282,7 +330,19 @@ TEST_F(PrerenderTest, FoundTest) {
FINAL_STATUS_USED);
EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_TRUE(prerender_contents->prerendering_has_started());
- ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
+
+ scoped_ptr<PrerenderHandle> duplicate_prerender_handle(
+ prerender_manager()->AddPrerenderFromLinkRelPrerender(
+ kDefaultChildId, kDefaultRenderViewRouteId, url,
+ Referrer(url, WebKit::WebReferrerPolicyDefault), kSize));
+
+ EXPECT_TRUE(duplicate_prerender_handle->IsValid());
+ EXPECT_TRUE(duplicate_prerender_handle->IsPrerendering());
+
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
+
+ EXPECT_FALSE(duplicate_prerender_handle->IsValid());
+ EXPECT_FALSE(duplicate_prerender_handle->IsPrerendering());
}
// Make sure that if queue a request, and a second prerender request for the
@@ -307,7 +367,7 @@ TEST_F(PrerenderTest, DropSecondRequestTest) {
prerender_manager()->next_prerender_contents());
EXPECT_FALSE(prerender_contents1->prerendering_has_started());
- ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
}
// Ensure that we expire a prerendered page after the max. permitted time.
@@ -321,9 +381,9 @@ TEST_F(PrerenderTest, ExpireTest) {
EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(prerender_contents->prerendering_has_started());
- prerender_manager()->AdvanceTime(prerender_manager()->GetMaxAge() +
- base::TimeDelta::FromSeconds(1));
- ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ prerender_manager()->AdvanceTimeTicks(prerender_manager()->GetMaxAge() +
+ base::TimeDelta::FromSeconds(1));
+ ASSERT_EQ(null, prerender_manager()->FindEntry(url));
}
// LRU Test. Make sure that if we prerender more than one request, that
@@ -348,8 +408,8 @@ TEST_F(PrerenderTest, DropOldestRequestTest) {
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(prerender_contents1->prerendering_has_started());
- ASSERT_EQ(null, prerender_manager()->GetEntry(url));
- ASSERT_EQ(prerender_contents1, prerender_manager()->GetEntry(url1));
+ ASSERT_EQ(null, prerender_manager()->FindEntry(url));
+ ASSERT_EQ(prerender_contents1, prerender_manager()->FindAndUseEntry(url1));
}
// Two element prerender test. Ensure that the LRU operates correctly if we
@@ -384,9 +444,9 @@ TEST_F(PrerenderTest, TwoElementPrerenderTest) {
EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
EXPECT_TRUE(prerender_contents2->prerendering_has_started());
- ASSERT_EQ(null, prerender_manager()->GetEntry(url));
- ASSERT_EQ(prerender_contents1, prerender_manager()->GetEntry(url1));
- ASSERT_EQ(prerender_contents2, prerender_manager()->GetEntry(url2));
+ ASSERT_EQ(null, prerender_manager()->FindEntry(url));
+ ASSERT_EQ(prerender_contents1, prerender_manager()->FindAndUseEntry(url1));
+ ASSERT_EQ(prerender_contents2, prerender_manager()->FindAndUseEntry(url2));
}
TEST_F(PrerenderTest, AliasURLTest) {
@@ -403,16 +463,18 @@ TEST_F(PrerenderTest, AliasURLTest) {
prerender_manager()->CreateNextPrerenderContents(
url, alias_urls, FINAL_STATUS_USED);
EXPECT_TRUE(AddSimplePrerender(url));
- ASSERT_EQ(NULL, prerender_manager()->GetEntry(not_an_alias_url));
- ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url1));
+ ASSERT_EQ(NULL, prerender_manager()->FindEntry(not_an_alias_url));
+ ASSERT_EQ(prerender_contents,
+ prerender_manager()->FindAndUseEntry(alias_url1));
prerender_contents = prerender_manager()->CreateNextPrerenderContents(
url, alias_urls, FINAL_STATUS_USED);
EXPECT_TRUE(AddSimplePrerender(url));
- ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(alias_url2));
+ ASSERT_EQ(prerender_contents,
+ prerender_manager()->FindAndUseEntry(alias_url2));
prerender_contents = prerender_manager()->CreateNextPrerenderContents(
url, alias_urls, FINAL_STATUS_USED);
EXPECT_TRUE(AddSimplePrerender(url));
- ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
// Test that alias URLs can not be added.
prerender_contents = prerender_manager()->CreateNextPrerenderContents(
@@ -421,7 +483,7 @@ TEST_F(PrerenderTest, AliasURLTest) {
EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_TRUE(AddSimplePrerender(alias_url1));
EXPECT_TRUE(AddSimplePrerender(alias_url2));
- ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
}
// Ensure that we ignore prerender requests within the rate limit.
@@ -489,14 +551,92 @@ TEST_F(PrerenderTest, PendingPrerenderTest) {
GURL pending_url("http://news.google.com/");
- EXPECT_TRUE(prerender_manager()->AddPrerenderFromLinkRelPrerender(
- child_id, route_id,
- pending_url, Referrer(url, WebKit::WebReferrerPolicyDefault),
- gfx::Size()));
+ DummyPrerenderContents* pending_prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ pending_url,
+ ORIGIN_GWS_PRERENDER,
+ FINAL_STATUS_USED);
+ scoped_ptr<PrerenderHandle> pending_prerender_handle(
+ prerender_manager()->AddPrerenderFromLinkRelPrerender(
+ child_id, route_id, pending_url,
+ Referrer(url, WebKit::WebReferrerPolicyDefault), kSize));
+ DCHECK(pending_prerender_handle.get());
+ EXPECT_TRUE(pending_prerender_handle->IsValid());
+ EXPECT_TRUE(pending_prerender_handle->IsPending());
- EXPECT_TRUE(prerender_manager()->IsPendingEntry(pending_url));
EXPECT_TRUE(prerender_contents->prerendering_has_started());
- ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
+
+ EXPECT_FALSE(pending_prerender_handle->IsPending());
+ ASSERT_EQ(pending_prerender_contents,
+ prerender_manager()->FindAndUseEntry(pending_url));
+}
+
+TEST_F(PrerenderTest, InvalidPendingPrerenderTest) {
+ GURL url("http://www.google.com/");
+ DummyPrerenderContents* prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url,
+ FINAL_STATUS_USED);
+ EXPECT_TRUE(AddSimplePrerender(url));
+
+ int child_id;
+ int route_id;
+ ASSERT_TRUE(prerender_contents->GetChildId(&child_id));
+ ASSERT_TRUE(prerender_contents->GetRouteId(&route_id));
+
+ // This pending URL has an unsupported scheme, and won't be able
+ // to start.
+ GURL pending_url("ftp://news.google.com/");
+
+ prerender_manager()->CreateNextPrerenderContents(
+ pending_url,
+ ORIGIN_GWS_PRERENDER,
+ FINAL_STATUS_UNSUPPORTED_SCHEME);
+ scoped_ptr<PrerenderHandle> pending_prerender_handle(
+ prerender_manager()->AddPrerenderFromLinkRelPrerender(
+ child_id, route_id, pending_url,
+ Referrer(url, WebKit::WebReferrerPolicyDefault), kSize));
+ DCHECK(pending_prerender_handle.get());
+ EXPECT_TRUE(pending_prerender_handle->IsValid());
+ EXPECT_TRUE(pending_prerender_handle->IsPending());
+
+ EXPECT_TRUE(prerender_contents->prerendering_has_started());
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
+
+ EXPECT_FALSE(pending_prerender_handle->IsValid());
+ EXPECT_FALSE(pending_prerender_handle->IsPending());
+}
+
+TEST_F(PrerenderTest, CancelPendingPrerenderTest) {
+ GURL url("http://www.google.com/");
+ DummyPrerenderContents* prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url,
+ FINAL_STATUS_USED);
+ EXPECT_TRUE(AddSimplePrerender(url));
+
+ int child_id;
+ int route_id;
+ ASSERT_TRUE(prerender_contents->GetChildId(&child_id));
+ ASSERT_TRUE(prerender_contents->GetRouteId(&route_id));
+
+ GURL pending_url("http://news.google.com/");
+
+ scoped_ptr<PrerenderHandle> pending_prerender_handle(
+ prerender_manager()->AddPrerenderFromLinkRelPrerender(
+ child_id, route_id, pending_url,
+ Referrer(url, WebKit::WebReferrerPolicyDefault), kSize));
+ DCHECK(pending_prerender_handle.get());
+ EXPECT_TRUE(pending_prerender_handle->IsValid());
+ EXPECT_TRUE(pending_prerender_handle->IsPending());
+
+ EXPECT_TRUE(prerender_contents->prerendering_has_started());
+
+ pending_prerender_handle->OnCancel();
+ EXPECT_FALSE(pending_prerender_handle->IsValid());
+
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
}
// Tests that a PrerenderManager created for a browser session in the control
@@ -524,7 +664,7 @@ TEST_F(PrerenderTest, SourceRenderViewClosed) {
FINAL_STATUS_MANAGER_SHUTDOWN);
EXPECT_FALSE(prerender_link_manager()->OnAddPrerender(
100, GetNextPrerenderID(), url,
- Referrer(), gfx::Size(), 200));
+ Referrer(), kSize, 200));
}
// Tests that prerendering is cancelled when we launch a second prerender of
@@ -547,14 +687,14 @@ TEST_F(PrerenderTest, NotSoRecentlyVisited) {
prerender_manager()->RecordNavigation(url);
prerender_manager()->AdvanceTimeTicks(
base::TimeDelta::FromMilliseconds(
- PrerenderManager::kNavigationRecordWindowMs + 500));
+ UnitTestPrerenderManager::kNavigationRecordWindowMs + 500));
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url, FINAL_STATUS_USED);
EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_TRUE(prerender_contents->prerendering_has_started());
- ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
}
// Tests that our PPLT dummy prerender gets created properly.
@@ -573,7 +713,7 @@ TEST_F(PrerenderTest, PPLTDummy) {
// Adding this ftp URL will force the expected unsupported scheme error.
prerender_contents->AddAliasURL(ftp_url);
- ASSERT_EQ(pplt_dummy_contents, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(pplt_dummy_contents, prerender_manager()->FindAndUseEntry(url));
}
// Tests that our PPLT dummy prerender gets created properly, even
@@ -593,29 +733,29 @@ TEST_F(PrerenderTest, RecentlyVisitedPPLTDummy) {
GURL ftp_url("ftp://ftp.google.com/");
prerender_contents->AddAliasURL(ftp_url);
- ASSERT_EQ(pplt_dummy_contents, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(pplt_dummy_contents, prerender_manager()->FindAndUseEntry(url));
}
-// 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(PrerenderTest, PageMatchesFragmentTest) {
- GURL url("http://www.google.com/");
+// Tests that the prerender link manager discards fragments when launching,
+// and matches only occur on URLs without fragments.
+// TODO(gavinp): Drop this test once we are fragment clean.
+TEST_F(PrerenderTest, FragmentDroppedOnLaunchTest) {
GURL fragment_url("http://www.google.com/#test");
+ GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(url,
FINAL_STATUS_USED);
- EXPECT_TRUE(AddSimplePrerender(url));
+ EXPECT_TRUE(AddSimplePrerender(fragment_url));
EXPECT_TRUE(prerender_contents->prerendering_has_started());
- ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(fragment_url));
+ EXPECT_FALSE(prerender_manager()->FindEntry(fragment_url));
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
}
-// Tests that the prerender manager ignores fragment references when matching
-// prerender URLs in the case the fragment is in the prerender URL.
-// TODO(gavinp): Re-enable this in the Prerender API once we're officially
+// Tests that the prerender manager matches include the fragment.
+// TODO(gavinp): Re-enable this once we are fragment clean.
// fragment clean.
-TEST_F(PrerenderTest, DISABLED_FragmentMatchesPageTest) {
- GURL url("http://www.google.com/");
+TEST_F(PrerenderTest, DISABLED_FragmentMatchesTest) {
GURL fragment_url("http://www.google.com/#test");
DummyPrerenderContents* prerender_contents =
@@ -623,14 +763,14 @@ TEST_F(PrerenderTest, DISABLED_FragmentMatchesPageTest) {
FINAL_STATUS_USED);
EXPECT_TRUE(AddSimplePrerender(fragment_url));
EXPECT_TRUE(prerender_contents->prerendering_has_started());
- ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(prerender_contents,
+ prerender_manager()->FindAndUseEntry(fragment_url));
}
-// Tests that the prerender manager ignores fragment references when matching
-// prerender URLs in the case the fragment is in both URLs.
-// TODO(gavinp): Re-enable this in the Prerender API once we're officially
-// fragment clean.
-TEST_F(PrerenderTest, DISABLED_FragmentMatchesFragmentTest) {
+// Tests that the prerender manager uses fragment references when matching
+// prerender URLs in the case a different fragment is in both URLs.
+// TODO(gavinp): Re-enable this once we are fragment clean.
+TEST_F(PrerenderTest, DISABLED_FragmentsDifferTest) {
GURL fragment_url("http://www.google.com/#test");
GURL other_fragment_url("http://www.google.com/#other_test");
@@ -639,8 +779,12 @@ TEST_F(PrerenderTest, DISABLED_FragmentMatchesFragmentTest) {
FINAL_STATUS_USED);
EXPECT_TRUE(AddSimplePrerender(fragment_url));
EXPECT_TRUE(prerender_contents->prerendering_has_started());
+
+ DummyPrerenderContents* null = NULL;
+ ASSERT_EQ(null, prerender_manager()->FindEntry(other_fragment_url));
+
ASSERT_EQ(prerender_contents,
- prerender_manager()->GetEntry(other_fragment_url));
+ prerender_manager()->FindAndUseEntry(fragment_url));
}
// Make sure that clearing works as expected.
@@ -700,7 +844,7 @@ TEST_F(PrerenderTest, LinkManagerCancel) {
EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
DummyPrerenderContents* null = NULL;
- ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(null, prerender_manager()->FindEntry(url));
EXPECT_TRUE(IsEmptyPrerenderLinkManager());
}
@@ -728,10 +872,10 @@ TEST_F(PrerenderTest, LinkManagerCancelThenAbandon) {
EXPECT_TRUE(IsEmptyPrerenderLinkManager());
EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
DummyPrerenderContents* null = NULL;
- ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(null, prerender_manager()->FindEntry(url));
}
-// TODO(gavinp): Update this test after abandon has an effect on Prerenders,
+// TODO(gavinp): Re-enabmed this test after abandon has an effect on Prerenders,
// like shortening the timeouts.
TEST_F(PrerenderTest, LinkManagerAbandon) {
EXPECT_TRUE(IsEmptyPrerenderLinkManager());
@@ -750,7 +894,7 @@ TEST_F(PrerenderTest, LinkManagerAbandon) {
last_prerender_id());
EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
- ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
EXPECT_TRUE(IsEmptyPrerenderLinkManager());
}
@@ -771,7 +915,7 @@ TEST_F(PrerenderTest, LinkManagerCancelTwice) {
EXPECT_TRUE(IsEmptyPrerenderLinkManager());
EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
DummyPrerenderContents* null = NULL;
- ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(null, prerender_manager()->FindEntry(url));
prerender_link_manager()->OnCancelPrerender(kDefaultChildId,
last_prerender_id());
}
@@ -806,7 +950,7 @@ TEST_F(PrerenderTest, LinkManagerAddTwiceCancelTwice) {
EXPECT_TRUE(IsEmptyPrerenderLinkManager());
EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
DummyPrerenderContents* null = NULL;
- ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(null, prerender_manager()->FindEntry(url));
}
TEST_F(PrerenderTest, LinkManagerAddTwiceCancelTwiceThenAbandonTwice) {
@@ -849,7 +993,7 @@ TEST_F(PrerenderTest, LinkManagerAddTwiceCancelTwiceThenAbandonTwice) {
EXPECT_TRUE(IsEmptyPrerenderLinkManager());
EXPECT_TRUE(prerender_contents->prerendering_has_been_cancelled());
DummyPrerenderContents* null = NULL;
- ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(null, prerender_manager()->FindEntry(url));
}
// TODO(gavinp): Update this test after abandon has an effect on Prerenders,
@@ -883,7 +1027,7 @@ TEST_F(PrerenderTest, LinkManagerAddTwiceAbandonTwice) {
EXPECT_TRUE(IsEmptyPrerenderLinkManager());
EXPECT_FALSE(prerender_contents->prerendering_has_been_cancelled());
- ASSERT_EQ(prerender_contents, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
}
// TODO(gavinp): After abandon shortens the expire time on a Prerender,
@@ -902,17 +1046,17 @@ 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()->AdvanceTime(prerender_manager()->GetMaxAge() +
- base::TimeDelta::FromSeconds(1));
+ prerender_manager()->AdvanceTimeTicks(prerender_manager()->GetMaxAge() +
+ base::TimeDelta::FromSeconds(1));
EXPECT_FALSE(IsEmptyPrerenderLinkManager());
DummyPrerenderContents* null = NULL;
- ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(null, prerender_manager()->FindEntry(url));
prerender_link_manager()->OnCancelPrerender(kDefaultChildId,
last_prerender_id());
EXPECT_TRUE(IsEmptyPrerenderLinkManager());
- ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(null, prerender_manager()->FindEntry(url));
}
TEST_F(PrerenderTest, LinkManagerExpireThenAddAgain) {
@@ -924,17 +1068,19 @@ TEST_F(PrerenderTest, LinkManagerExpireThenAddAgain) {
EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_TRUE(first_prerender_contents->prerendering_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));
+ ASSERT_EQ(first_prerender_contents,
+ prerender_manager()->FindAndUseEntry(url));
+ prerender_manager()->AdvanceTimeTicks(prerender_manager()->GetMaxAge() +
+ base::TimeDelta::FromSeconds(1));
DummyPrerenderContents* null = NULL;
- ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(null, prerender_manager()->FindEntry(url));
DummyPrerenderContents* second_prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url, FINAL_STATUS_USED);
EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_TRUE(second_prerender_contents->prerendering_has_started());
- ASSERT_EQ(second_prerender_contents, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(second_prerender_contents,
+ prerender_manager()->FindAndUseEntry(url));
// The PrerenderLinkManager is not empty since we never removed the first
// prerender.
EXPECT_FALSE(IsEmptyPrerenderLinkManager());
@@ -955,13 +1101,14 @@ TEST_F(PrerenderTest, LinkManagerCancelThenAddAgain) {
EXPECT_TRUE(IsEmptyPrerenderLinkManager());
EXPECT_TRUE(first_prerender_contents->prerendering_has_been_cancelled());
DummyPrerenderContents* null = NULL;
- ASSERT_EQ(null, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(null, prerender_manager()->FindEntry(url));
DummyPrerenderContents* second_prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url, FINAL_STATUS_USED);
EXPECT_TRUE(AddSimplePrerender(url));
EXPECT_TRUE(second_prerender_contents->prerendering_has_started());
- ASSERT_EQ(second_prerender_contents, prerender_manager()->GetEntry(url));
+ ASSERT_EQ(second_prerender_contents,
+ prerender_manager()->FindAndUseEntry(url));
EXPECT_FALSE(IsEmptyPrerenderLinkManager());
}