Index: chrome/browser/tab_contents/navigation_controller_unittest.cc |
=================================================================== |
--- chrome/browser/tab_contents/navigation_controller_unittest.cc (revision 41846) |
+++ chrome/browser/tab_contents/navigation_controller_unittest.cc (working copy) |
@@ -1043,15 +1043,14 @@ |
TestNotificationTracker notifications; |
RegisterForAllNavNotifications(¬ifications, &controller()); |
- // Main page. Note that we need "://" so this URL is treated as "standard" |
- // which are the only ones that can have a ref. |
- const GURL url1("http:////foo"); |
+ // Main page. |
+ const GURL url1("http://foo"); |
rvh()->SendNavigate(0, url1); |
EXPECT_TRUE(notifications.Check1AndReset( |
NotificationType::NAV_ENTRY_COMMITTED)); |
// First navigation. |
- const GURL url2("http:////foo#a"); |
+ const GURL url2("http://foo#a"); |
ViewHostMsg_FrameNavigate_Params params = {0}; |
params.page_id = 1; |
params.url = url2; |
@@ -1066,6 +1065,7 @@ |
EXPECT_TRUE(notifications.Check1AndReset( |
NotificationType::NAV_ENTRY_COMMITTED)); |
EXPECT_TRUE(details.is_in_page); |
+ EXPECT_FALSE(details.did_replace_entry); |
EXPECT_EQ(2, controller().entry_count()); |
// Go back one. |
@@ -1109,7 +1109,7 @@ |
controller().GetActiveEntry()->url()); |
// Finally, navigate to an unrelated URL to make sure in_page is not sticky. |
- const GURL url3("http:////bar"); |
+ const GURL url3("http://bar"); |
params.page_id = 2; |
params.url = url3; |
notifications.Reset(); |
@@ -1119,6 +1119,37 @@ |
EXPECT_FALSE(details.is_in_page); |
} |
+TEST_F(NavigationControllerTest, InPage_Replace) { |
+ TestNotificationTracker notifications; |
+ RegisterForAllNavNotifications(¬ifications, &controller()); |
+ |
+ // Main page. |
+ const GURL url1("http://foo"); |
+ rvh()->SendNavigate(0, url1); |
+ EXPECT_TRUE(notifications.Check1AndReset( |
+ NotificationType::NAV_ENTRY_COMMITTED)); |
+ |
+ // First navigation. |
+ const GURL url2("http://foo#a"); |
+ ViewHostMsg_FrameNavigate_Params params = {0}; |
+ params.page_id = 0; // Same page_id |
+ params.url = url2; |
+ params.transition = PageTransition::LINK; |
+ params.should_update_history = false; |
+ params.gesture = NavigationGestureUser; |
+ params.is_post = false; |
+ |
+ // This should NOT generate a new entry. |
+ NavigationController::LoadCommittedDetails details; |
+ EXPECT_TRUE(controller().RendererDidNavigate(params, 0, &details)); |
+ EXPECT_TRUE(notifications.Check2AndReset( |
+ NotificationType::NAV_LIST_PRUNED, |
+ NotificationType::NAV_ENTRY_COMMITTED)); |
+ EXPECT_TRUE(details.is_in_page); |
+ EXPECT_TRUE(details.did_replace_entry); |
+ EXPECT_EQ(1, controller().entry_count()); |
+} |
+ |
// NotificationObserver implementation used in verifying we've received the |
// NotificationType::NAV_LIST_PRUNED method. |
class PrunedListener : public NotificationObserver { |