Index: chrome/browser/prerender/prerender_tracker_unittest.cc |
=================================================================== |
--- chrome/browser/prerender/prerender_tracker_unittest.cc (revision 244175) |
+++ chrome/browser/prerender/prerender_tracker_unittest.cc (working copy) |
@@ -87,24 +87,11 @@ |
mutable_config().rate_limit_enabled = false; |
} |
- virtual void DestroyPrerenderForRenderView( |
- int process_id, int view_id, FinalStatus final_status) OVERRIDE { |
- cancelled_id_pairs_.insert(std::make_pair(process_id, view_id)); |
- } |
- |
// We never allocate our PrerenderContents in PrerenderManager, so we don't |
// ever want the default pending delete behaviour. |
virtual void MoveEntryToPendingDelete(PrerenderContents* entry, |
FinalStatus final_status) OVERRIDE { |
} |
- |
- bool WasPrerenderCancelled(int child_id, int route_id) { |
- std::pair<int, int> child_route_id_pair(child_id, route_id); |
- return cancelled_id_pairs_.count(child_route_id_pair) != 0; |
- } |
- |
- // Set of all the RenderViews that have been cancelled. |
- std::set<std::pair<int, int> > cancelled_id_pairs_; |
}; |
class DeferredRedirectDelegate : public net::URLRequest::Delegate, |
@@ -212,15 +199,6 @@ |
return &test_contents_; |
} |
- int GetCurrentStatus(int child_id, int route_id) { |
- FinalStatus final_status; |
- if (!prerender_tracker()->GetFinalStatus(child_id, route_id, |
- &final_status)) { |
- return -1; |
- } |
- return final_status; |
- } |
- |
// Runs any tasks queued on either thread. |
void RunEvents() { |
message_loop_.RunUntilIdle(); |
@@ -235,287 +213,23 @@ |
TestPrerenderContents test_contents_; |
}; |
-// Check that a non-existant RenderView is handled correctly. |
-TEST_F(PrerenderTrackerTest, PrerenderTrackerNull) { |
- EXPECT_FALSE(prerender_tracker()->TryUse(kDefaultChildId, kDefaultRouteId)); |
- EXPECT_FALSE(prerender_tracker()->TryCancel( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED)); |
- EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED)); |
+TEST_F(PrerenderTrackerTest, IsPrerenderingOnIOThread) { |
EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread( |
- kDefaultChildId, kDefaultRouteId)); |
- FinalStatus final_status; |
- EXPECT_FALSE(prerender_tracker()->GetFinalStatus( |
- kDefaultChildId, kDefaultRouteId, &final_status)); |
- EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled( |
- kDefaultChildId, kDefaultRouteId)); |
-} |
+ kDefaultChildId, kDefaultRouteId)); |
-// Check that a page that is used is handled correctly. |
-TEST_F(PrerenderTrackerTest, PrerenderTrackerUsed) { |
test_contents()->Start(); |
- |
- EXPECT_EQ(FINAL_STATUS_MAX, |
- GetCurrentStatus(kDefaultChildId, kDefaultRouteId)); |
- |
// This calls AddPrerenderOnIOThreadTask(). |
RunEvents(); |
- |
EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread( |
- kDefaultChildId, kDefaultRouteId)); |
- EXPECT_EQ(FINAL_STATUS_MAX, |
- GetCurrentStatus(kDefaultChildId, kDefaultRouteId)); |
+ kDefaultChildId, kDefaultRouteId)); |
- // Display the prerendered RenderView. |
- EXPECT_TRUE(prerender_tracker()->TryUse(kDefaultChildId, kDefaultRouteId)); |
- |
- // Make sure the page can't be destroyed or claim it was destroyed after |
- // it's been used. |
- EXPECT_FALSE(prerender_tracker()->TryCancel( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED)); |
- EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT)); |
- EXPECT_EQ(FINAL_STATUS_USED, |
- GetCurrentStatus(kDefaultChildId, kDefaultRouteId)); |
- |
- // This would call DestroyPrerenderForChildRouteIdPair(), if the prerender |
- // were cancelled. |
- RunEvents(); |
- |
- // These functions should all behave as before. |
- EXPECT_FALSE(prerender_tracker()->TryCancel( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED)); |
- EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT)); |
- EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus( |
- kDefaultChildId, kDefaultRouteId)); |
- |
- // This calls DestroyPrerenderForChildRouteIdPair(). |
- test_contents()->Use(); |
- EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread( |
- kDefaultChildId, kDefaultRouteId)); |
- |
- // This calls RemovePrerenderOnIOThreadTask(). |
- RunEvents(); |
- |
- FinalStatus final_status; |
- EXPECT_FALSE(prerender_tracker()->GetFinalStatus( |
- kDefaultChildId, kDefaultRouteId, &final_status)); |
- EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread( |
- kDefaultChildId, kDefaultRouteId)); |
- EXPECT_FALSE(prerender_tracker()->TryCancel( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED)); |
- EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled( |
- kDefaultChildId, kDefaultRouteId)); |
-} |
- |
-// Check that a prerendered page cancelled by TryCancel() is handled correctly. |
-TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelled) { |
- test_contents()->Start(); |
- EXPECT_EQ(FINAL_STATUS_MAX, |
- GetCurrentStatus(kDefaultChildId, kDefaultRouteId)); |
- |
- // This calls AddPrerenderOnIOThreadTask(). |
- RunEvents(); |
- |
- // Cancel the prerender. |
- EXPECT_TRUE(prerender_tracker()->TryCancel( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED)); |
- |
- EXPECT_FALSE(prerender_tracker()->TryUse(kDefaultChildId, kDefaultRouteId)); |
- EXPECT_TRUE(prerender_tracker()->TryCancel( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT)); |
- EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT)); |
- EXPECT_EQ(FINAL_STATUS_CANCELLED, |
- GetCurrentStatus(kDefaultChildId, kDefaultRouteId)); |
- |
- // This calls DestroyPrerenderForChildRouteIdPair(). |
- RunEvents(); |
- EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled( |
- kDefaultChildId, kDefaultRouteId)); |
- |
- // These should all work until the prerendering RenderViewHost is destroyed. |
- EXPECT_TRUE(prerender_tracker()->TryCancel( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT)); |
- EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT)); |
- EXPECT_EQ(FINAL_STATUS_CANCELLED, |
- GetCurrentStatus(kDefaultChildId, kDefaultRouteId)); |
- |
test_contents()->Cancel(); |
- EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread( |
- kDefaultChildId, kDefaultRouteId)); |
- |
// This calls RemovePrerenderOnIOThreadTask(). |
RunEvents(); |
- |
- FinalStatus final_status; |
- EXPECT_FALSE(prerender_tracker()->GetFinalStatus( |
- kDefaultChildId, kDefaultRouteId, &final_status)); |
EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread( |
- kDefaultChildId, kDefaultRouteId)); |
+ kDefaultChildId, kDefaultRouteId)); |
} |
-// Check that a prerendered page cancelled on the IO thread by |
-// TryCancelOnIOThread() is handled correctly. |
-TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelledOnIO) { |
- test_contents()->Start(); |
- EXPECT_EQ(FINAL_STATUS_MAX, |
- GetCurrentStatus(kDefaultChildId, kDefaultRouteId)); |
- |
- // This calls AddPrerenderOnIOThreadTask(). |
- RunEvents(); |
- |
- // Cancel the prerender. |
- EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT)); |
- |
- EXPECT_FALSE(prerender_tracker()->TryUse(kDefaultChildId, kDefaultRouteId)); |
- EXPECT_TRUE(prerender_tracker()->TryCancel(kDefaultChildId, kDefaultRouteId, |
- FINAL_STATUS_CANCELLED)); |
- EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED)); |
- EXPECT_EQ(FINAL_STATUS_TIMED_OUT, |
- GetCurrentStatus(kDefaultChildId, kDefaultRouteId)); |
- |
- // This calls DestroyPrerenderForChildRouteIdPair(). |
- RunEvents(); |
- EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled( |
- kDefaultChildId, kDefaultRouteId)); |
- |
- // These should all work until the prerendering RenderViewHost is destroyed. |
- EXPECT_TRUE(prerender_tracker()->TryCancel( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED)); |
- EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED)); |
- EXPECT_EQ(FINAL_STATUS_TIMED_OUT, |
- GetCurrentStatus(kDefaultChildId, kDefaultRouteId)); |
- |
- test_contents()->Cancel(); |
- EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread( |
- kDefaultChildId, kDefaultRouteId)); |
- |
- // This calls RemovePrerenderOnIOThreadTask(). |
- RunEvents(); |
- |
- FinalStatus final_status; |
- EXPECT_FALSE(prerender_tracker()->GetFinalStatus( |
- kDefaultChildId, kDefaultRouteId, &final_status)); |
- EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread( |
- kDefaultChildId, kDefaultRouteId)); |
-} |
- |
-// Check that a prerendered page cancelled before it reaches the IO thread is |
-// handled correctly. |
-TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelledFast) { |
- test_contents()->Start(); |
- |
- // Cancel the prerender. |
- EXPECT_TRUE(prerender_tracker()->TryCancel( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED)); |
- |
- EXPECT_FALSE(prerender_tracker()->TryUse(kDefaultChildId, kDefaultRouteId)); |
- EXPECT_TRUE(prerender_tracker()->TryCancel( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT)); |
- |
- // This calls AddPrerenderOnIOThreadTask() and |
- // DestroyPrerenderForChildRouteIdPair(). |
- RunEvents(); |
- EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled( |
- kDefaultChildId, kDefaultRouteId)); |
- |
- EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT)); |
- EXPECT_TRUE(prerender_tracker()->TryCancel( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_TIMED_OUT)); |
- EXPECT_EQ(FINAL_STATUS_CANCELLED, GetCurrentStatus( |
- kDefaultChildId, kDefaultRouteId)); |
- |
- test_contents()->Cancel(); |
- |
- // This calls RemovePrerenderOnIOThreadTask(). |
- RunEvents(); |
- |
- FinalStatus final_status; |
- EXPECT_FALSE(prerender_tracker()->GetFinalStatus( |
- kDefaultChildId, kDefaultRouteId, &final_status)); |
- EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread( |
- kDefaultChildId, kDefaultRouteId)); |
-} |
- |
-// Check that handling two pages at once works. |
-TEST_F(PrerenderTrackerTest, PrerenderTrackerMultiple) { |
- test_contents()->Start(); |
- |
- // This calls AddPrerenderOnIOThreadTask(). |
- RunEvents(); |
- EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread( |
- kDefaultChildId, kDefaultRouteId)); |
- EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread( |
- kDefaultChildId + 1, kDefaultRouteId + 1)); |
- EXPECT_FALSE(prerender_tracker()->TryUse( |
- kDefaultChildId + 1, kDefaultRouteId + 1)); |
- EXPECT_FALSE(prerender_tracker()->TryCancel( |
- kDefaultChildId + 1, kDefaultRouteId + 1, FINAL_STATUS_CANCELLED)); |
- |
- // Start second prerender. |
- TestPrerenderContents second_test_contents(prerender_manager(), |
- kDefaultChildId + 1, |
- kDefaultRouteId + 1); |
- |
- second_test_contents.Start(); |
- // This calls AddPrerenderOnIOThreadTask(). |
- RunEvents(); |
- |
- // Use (kDefaultChildId, kDefaultRouteId). |
- EXPECT_TRUE(prerender_tracker()->TryUse(kDefaultChildId, kDefaultRouteId)); |
- EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus( |
- kDefaultChildId, kDefaultRouteId)); |
- EXPECT_EQ(FINAL_STATUS_MAX, |
- GetCurrentStatus(kDefaultChildId + 1, kDefaultRouteId + 1)); |
- |
- // Cancel (kDefaultChildId + 1, kDefaultRouteId + 1). |
- EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
- kDefaultChildId + 1, kDefaultRouteId + 1, FINAL_STATUS_CANCELLED)); |
- |
- EXPECT_FALSE(prerender_tracker()->TryCancel( |
- kDefaultChildId, kDefaultRouteId, FINAL_STATUS_CANCELLED)); |
- EXPECT_EQ(FINAL_STATUS_USED, |
- GetCurrentStatus(kDefaultChildId, kDefaultRouteId)); |
- |
- EXPECT_FALSE(prerender_tracker()->TryUse( |
- kDefaultChildId + 1, kDefaultRouteId + 1)); |
- EXPECT_TRUE(prerender_tracker()->TryCancel( |
- kDefaultChildId + 1, kDefaultRouteId + 1, FINAL_STATUS_CANCELLED)); |
- EXPECT_EQ(FINAL_STATUS_CANCELLED, |
- GetCurrentStatus(kDefaultChildId + 1, kDefaultRouteId + 1)); |
- |
- // This calls DestroyPrerenderForChildRouteIdPair(). |
- RunEvents(); |
- EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(kDefaultChildId, |
- kDefaultRouteId)); |
- EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(kDefaultChildId + 1, |
- kDefaultRouteId + 1)); |
- |
- test_contents()->Cancel(); |
- second_test_contents.Cancel(); |
- |
- // This calls RemovePrerenderOnIOThreadTask(). |
- RunEvents(); |
- |
- FinalStatus final_status; |
- EXPECT_FALSE(prerender_tracker()->GetFinalStatus( |
- kDefaultChildId, kDefaultRouteId, &final_status)); |
- EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread( |
- kDefaultChildId, kDefaultRouteId)); |
- |
- EXPECT_FALSE(prerender_tracker()->GetFinalStatus( |
- kDefaultChildId + 1, kDefaultRouteId + 1, &final_status)); |
- EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread( |
- kDefaultChildId + 1, kDefaultRouteId + 1)); |
-} |
- |
// Checks that deferred redirects are throttled and resumed correctly. |
TEST_F(PrerenderTrackerTest, PrerenderThrottledRedirectResume) { |
const base::FilePath::CharType kRedirectPath[] = |