Index: chrome/browser/prerender/prerender_unittest.cc |
diff --git a/chrome/browser/prerender/prerender_unittest.cc b/chrome/browser/prerender/prerender_unittest.cc |
index b6403d900366d08ba1340d9b2b7bc5d6ad3ffe6f..a04499c8aacb8eb8c7a85054f4b0fc966b75c8be 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()->FindEntry(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()); |
} |