Index: content/browser/frame_host/navigation_controller_impl_unittest.cc |
diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc |
index 4be1b1a8d392ac16a7ec41d1c5ef52ac9c496fb1..7594f289eb855d4077336e0177bc02028505b180 100644 |
--- a/content/browser/frame_host/navigation_controller_impl_unittest.cc |
+++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc |
@@ -298,11 +298,12 @@ TEST_F(NavigationControllerTest, Defaults) { |
NavigationControllerImpl& controller = controller_impl(); |
EXPECT_FALSE(controller.GetPendingEntry()); |
- EXPECT_FALSE(controller.GetVisibleEntry()); |
- EXPECT_FALSE(controller.GetLastCommittedEntry()); |
+ EXPECT_TRUE(controller.IsInitialNavigation()); |
+ EXPECT_TRUE(controller.GetVisibleEntry()); |
+ EXPECT_TRUE(controller.GetLastCommittedEntry()); |
+ EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); |
+ EXPECT_EQ(controller.GetEntryCount(), 1); |
EXPECT_EQ(controller.GetPendingEntryIndex(), -1); |
- EXPECT_EQ(controller.GetLastCommittedEntryIndex(), -1); |
- EXPECT_EQ(controller.GetEntryCount(), 0); |
EXPECT_FALSE(controller.CanGoBack()); |
EXPECT_FALSE(controller.CanGoForward()); |
} |
@@ -388,6 +389,11 @@ TEST_F(NavigationControllerTest, LoadURL) { |
const GURL url1("http://foo1"); |
const GURL url2("http://foo2"); |
+ // We start with an entry for the initial blank page. |
+ EXPECT_EQ(controller.GetEntryCount(), 1); |
+ EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); |
+ EXPECT_TRUE(controller.GetLastCommittedEntry()); |
+ |
controller.LoadURL( |
url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
int entry_id = controller.GetPendingEntry()->GetUniqueID(); |
@@ -396,10 +402,7 @@ TEST_F(NavigationControllerTest, LoadURL) { |
EXPECT_EQ(0U, notifications.size()); |
// The load should now be pending. |
- EXPECT_EQ(controller.GetEntryCount(), 0); |
- EXPECT_EQ(controller.GetLastCommittedEntryIndex(), -1); |
EXPECT_EQ(controller.GetPendingEntryIndex(), -1); |
- EXPECT_FALSE(controller.GetLastCommittedEntry()); |
ASSERT_TRUE(controller.GetPendingEntry()); |
EXPECT_EQ(controller.GetPendingEntry(), controller.GetVisibleEntry()); |
EXPECT_FALSE(controller.CanGoBack()); |
@@ -418,7 +421,7 @@ TEST_F(NavigationControllerTest, LoadURL) { |
EXPECT_EQ(1U, navigation_entry_committed_counter_); |
navigation_entry_committed_counter_ = 0; |
- // The load should now be committed. |
+ // The load should now be committed, replacing the initial entry. |
EXPECT_EQ(controller.GetEntryCount(), 1); |
EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); |
EXPECT_EQ(controller.GetPendingEntryIndex(), -1); |
@@ -1008,7 +1011,8 @@ TEST_F(NavigationControllerTest, LoadURL_IgnorePreemptsPending) { |
EXPECT_EQ(0U, notifications.size()); |
EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
EXPECT_TRUE(controller.GetPendingEntry()); |
- EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex()); |
+ EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); |
+ EXPECT_TRUE(controller.IsInitialNavigation()); |
EXPECT_EQ(1, delegate->navigation_state_change_count()); |
// Before that commits, a document.write and location.reload can cause the |
@@ -1021,7 +1025,8 @@ TEST_F(NavigationControllerTest, LoadURL_IgnorePreemptsPending) { |
// change, so that we do not keep displaying kNewURL. |
EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
EXPECT_FALSE(controller.GetPendingEntry()); |
- EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex()); |
+ EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); |
+ EXPECT_TRUE(controller.IsInitialNavigation()); |
if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kEnableBrowserSideNavigation)) |
EXPECT_EQ(4, delegate->navigation_state_change_count()); |
@@ -1052,7 +1057,8 @@ TEST_F(NavigationControllerTest, LoadURL_AbortDoesntCancelPending) { |
EXPECT_EQ(0U, notifications.size()); |
EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
EXPECT_TRUE(controller.GetPendingEntry()); |
- EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex()); |
+ EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); |
+ EXPECT_TRUE(controller.IsInitialNavigation()); |
EXPECT_EQ(1, delegate->navigation_state_change_count()); |
// It may abort before committing, if it's a download or due to a stop or |
@@ -1070,7 +1076,8 @@ TEST_F(NavigationControllerTest, LoadURL_AbortDoesntCancelPending) { |
// change, so that we keep displaying kNewURL (until the user clears it). |
EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
EXPECT_TRUE(controller.GetPendingEntry()); |
- EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex()); |
+ EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); |
+ EXPECT_TRUE(controller.IsInitialNavigation()); |
EXPECT_EQ(1, delegate->navigation_state_change_count()); |
NavigationEntry* pending_entry = controller.GetPendingEntry(); |
@@ -1079,7 +1086,8 @@ TEST_F(NavigationControllerTest, LoadURL_AbortDoesntCancelPending) { |
EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
EXPECT_TRUE(controller.GetPendingEntry()); |
EXPECT_EQ(pending_entry, controller.GetPendingEntry()); |
- EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex()); |
+ EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); |
+ EXPECT_TRUE(controller.IsInitialNavigation()); |
contents()->SetDelegate(NULL); |
} |
@@ -2646,9 +2654,9 @@ TEST_F(NavigationControllerTest, ClientRedirectAfterInPageNavigation) { |
} |
} |
-TEST_F(NavigationControllerTest, PushStateWithoutPreviousEntry) |
+TEST_F(NavigationControllerTest, PushStateWithoutCommittedEntry) |
{ |
- ASSERT_FALSE(controller_impl().GetLastCommittedEntry()); |
+ ASSERT_TRUE(controller_impl().IsInitialNavigation()); |
FrameHostMsg_DidCommitProvisionalLoad_Params params; |
GURL url("http://foo"); |
params.page_id = 1; |
@@ -3396,7 +3404,10 @@ TEST_F(NavigationControllerTest, ShowRendererURLInNewTabUntilModified) { |
// we must revert to showing about:blank to avoid a URL spoof. |
main_test_rfh()->OnMessageReceived(FrameHostMsg_DidAccessInitialDocument(0)); |
EXPECT_TRUE(contents()->HasAccessedInitialDocument()); |
- EXPECT_FALSE(controller.GetVisibleEntry()); |
+ EXPECT_TRUE(controller.IsInitialNavigation()); |
+ EXPECT_EQ(controller.GetLastCommittedEntry(), controller.GetVisibleEntry()); |
+ EXPECT_NE(controller.GetPendingEntry(), controller.GetVisibleEntry()); |
+ EXPECT_EQ(GURL(url::kAboutBlankURL), controller.GetVisibleEntry()->GetURL()); |
EXPECT_EQ(url, controller.GetPendingEntry()->GetURL()); |
notifications.Reset(); |
@@ -3446,7 +3457,10 @@ TEST_F(NavigationControllerTest, ShowBrowserURLAfterFailUntilModified) { |
// we must revert to showing about:blank to avoid a URL spoof. |
main_test_rfh()->OnMessageReceived(FrameHostMsg_DidAccessInitialDocument(0)); |
EXPECT_TRUE(contents()->HasAccessedInitialDocument()); |
- EXPECT_FALSE(controller.GetVisibleEntry()); |
+ EXPECT_TRUE(controller.IsInitialNavigation()); |
+ EXPECT_EQ(controller.GetLastCommittedEntry(), controller.GetVisibleEntry()); |
+ EXPECT_NE(controller.GetPendingEntry(), controller.GetVisibleEntry()); |
+ EXPECT_EQ(GURL(url::kAboutBlankURL), controller.GetVisibleEntry()->GetURL()); |
EXPECT_FALSE(controller.GetPendingEntry()); |
notifications.Reset(); |
@@ -3494,7 +3508,10 @@ TEST_F(NavigationControllerTest, ShowRendererURLAfterFailUntilModified) { |
// we must revert to showing about:blank to avoid a URL spoof. |
main_test_rfh()->OnMessageReceived(FrameHostMsg_DidAccessInitialDocument(0)); |
EXPECT_TRUE(contents()->HasAccessedInitialDocument()); |
- EXPECT_FALSE(controller.GetVisibleEntry()); |
+ EXPECT_TRUE(controller.IsInitialNavigation()); |
+ EXPECT_EQ(controller.GetLastCommittedEntry(), controller.GetVisibleEntry()); |
+ EXPECT_NE(controller.GetPendingEntry(), controller.GetVisibleEntry()); |
+ EXPECT_EQ(GURL(url::kAboutBlankURL), controller.GetVisibleEntry()->GetURL()); |
EXPECT_EQ(url, controller.GetPendingEntry()->GetURL()); |
notifications.Reset(); |
@@ -3764,9 +3781,11 @@ TEST_F(NavigationControllerTest, LazyReload) { |
// Test requesting and triggering a lazy reload without any committed entry nor |
// pending entry. |
+// TODO(creis): Does this test make sense anymore? |
TEST_F(NavigationControllerTest, LazyReloadWithoutCommittedEntry) { |
NavigationControllerImpl& controller = controller_impl(); |
- ASSERT_EQ(-1, controller.GetLastCommittedEntryIndex()); |
+ ASSERT_EQ(0, controller.GetLastCommittedEntryIndex()); |
+ ASSERT_TRUE(controller.IsInitialNavigation()); |
EXPECT_FALSE(controller.NeedsReload()); |
controller.SetNeedsReload(); |
EXPECT_TRUE(controller.NeedsReload()); |
@@ -4561,6 +4580,7 @@ TEST_F(NavigationControllerTest, IsInitialNavigation) { |
// Initial state. |
EXPECT_TRUE(controller.IsInitialNavigation()); |
+ EXPECT_TRUE(controller.IsInitialBlankNavigation()); |
// After commit, it stays false. |
const GURL url1("http://foo1"); |
@@ -4568,11 +4588,20 @@ TEST_F(NavigationControllerTest, IsInitialNavigation) { |
EXPECT_EQ(1U, navigation_entry_committed_counter_); |
navigation_entry_committed_counter_ = 0; |
EXPECT_FALSE(controller.IsInitialNavigation()); |
+ EXPECT_FALSE(controller.IsInitialBlankNavigation()); |
// After starting a new navigation, it stays false. |
const GURL url2("http://foo2"); |
controller.LoadURL( |
url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
+ EXPECT_FALSE(controller.IsInitialNavigation()); |
+ EXPECT_FALSE(controller.IsInitialBlankNavigation()); |
+ |
+ // For cloned tabs, IsInitialNavigationShould be true but |
+ // IsInitialBlankNavigation should be false. |
+ scoped_ptr<WebContents> clone(controller.GetWebContents()->Clone()); |
+ EXPECT_TRUE(clone->GetController().IsInitialNavigation()); |
+ EXPECT_FALSE(clone->GetController().IsInitialBlankNavigation()); |
} |
// Check that the favicon is not reused across a client redirect. |