diff options
Diffstat (limited to 'chrome/browser/tab_contents/navigation_controller_unittest.cc')
-rw-r--r-- | chrome/browser/tab_contents/navigation_controller_unittest.cc | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/chrome/browser/tab_contents/navigation_controller_unittest.cc b/chrome/browser/tab_contents/navigation_controller_unittest.cc index 38c539a..fb0761f 100644 --- a/chrome/browser/tab_contents/navigation_controller_unittest.cc +++ b/chrome/browser/tab_contents/navigation_controller_unittest.cc @@ -714,6 +714,59 @@ TEST_F(NavigationControllerTest, Forward_GeneratesNewPage) { EXPECT_FALSE(controller().CanGoForward()); } +// Two consequent navigation for the same URL entered in should be considered +// as SAME_PAGE navigation even when we are redirected to some other page. +TEST_F(NavigationControllerTest, Redirect) { + TestNotificationTracker notifications; + RegisterForAllNavNotifications(¬ifications, &controller()); + + const GURL url1("http://foo1"); + const GURL url2("http://foo2"); // Redirection target + + // First request + controller().LoadURL(url1, GURL(), PageTransition::TYPED); + + EXPECT_EQ(0U, notifications.size()); + rvh()->SendNavigate(0, url2); + EXPECT_TRUE(notifications.Check1AndReset( + NotificationType::NAV_ENTRY_COMMITTED)); + + // Second request + controller().LoadURL(url1, GURL(), PageTransition::TYPED); + + EXPECT_TRUE(controller().pending_entry()); + EXPECT_EQ(controller().pending_entry_index(), -1); + EXPECT_EQ(url1, controller().GetActiveEntry()->url()); + + ViewHostMsg_FrameNavigate_Params params; + params.page_id = 0; + params.url = url2; + params.transition = PageTransition::SERVER_REDIRECT; + params.redirects.push_back(GURL("http://foo1")); + params.redirects.push_back(GURL("http://foo2")); + params.should_update_history = false; + params.gesture = NavigationGestureAuto; + params.is_post = false; + + NavigationController::LoadCommittedDetails details; + + EXPECT_EQ(0U, notifications.size()); + EXPECT_TRUE(controller().RendererDidNavigate(params, &details)); + EXPECT_TRUE(notifications.Check1AndReset( + NotificationType::NAV_ENTRY_COMMITTED)); + + EXPECT_TRUE(details.type == NavigationType::SAME_PAGE); + EXPECT_EQ(controller().entry_count(), 1); + EXPECT_EQ(controller().last_committed_entry_index(), 0); + EXPECT_TRUE(controller().GetLastCommittedEntry()); + EXPECT_EQ(controller().pending_entry_index(), -1); + EXPECT_FALSE(controller().pending_entry()); + EXPECT_EQ(url2, controller().GetActiveEntry()->url()); + + EXPECT_FALSE(controller().CanGoBack()); + EXPECT_FALSE(controller().CanGoForward()); +} + // Tests navigation via link click within a subframe. A new navigation entry // should be created. TEST_F(NavigationControllerTest, NewSubframe) { |