| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 1740 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1751 | 1751 |
| 1752 EXPECT_EQ(controller.GetEntryCount(), 2); | 1752 EXPECT_EQ(controller.GetEntryCount(), 2); |
| 1753 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1); | 1753 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1); |
| 1754 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); | 1754 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); |
| 1755 EXPECT_TRUE(controller.GetLastCommittedEntry()); | 1755 EXPECT_TRUE(controller.GetLastCommittedEntry()); |
| 1756 EXPECT_FALSE(controller.GetPendingEntry()); | 1756 EXPECT_FALSE(controller.GetPendingEntry()); |
| 1757 EXPECT_TRUE(controller.CanGoBack()); | 1757 EXPECT_TRUE(controller.CanGoBack()); |
| 1758 EXPECT_FALSE(controller.CanGoForward()); | 1758 EXPECT_FALSE(controller.CanGoForward()); |
| 1759 } | 1759 } |
| 1760 | 1760 |
| 1761 // Two consequent navigation for the same URL entered in should be considered | 1761 // Two consecutive navigations for the same URL entered in should be considered |
| 1762 // as SAME_PAGE navigation even when we are redirected to some other page. | 1762 // as SAME_PAGE navigation even when we are redirected to some other page. |
| 1763 TEST_F(NavigationControllerTest, Redirect) { | 1763 TEST_F(NavigationControllerTest, Redirect) { |
| 1764 NavigationControllerImpl& controller = controller_impl(); | 1764 NavigationControllerImpl& controller = controller_impl(); |
| 1765 TestNotificationTracker notifications; | 1765 TestNotificationTracker notifications; |
| 1766 RegisterForAllNavNotifications(¬ifications, &controller); | 1766 RegisterForAllNavNotifications(¬ifications, &controller); |
| 1767 | 1767 |
| 1768 const GURL url1("http://foo1"); | 1768 const GURL url1("http://foo1"); |
| 1769 const GURL url2("http://foo2"); // Redirection target | 1769 const GURL url2("http://foo2"); // Redirection target |
| 1770 | 1770 |
| 1771 // First request | 1771 // First request. |
| 1772 controller.LoadURL( | 1772 controller.LoadURL( |
| 1773 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); | 1773 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
| 1774 | 1774 |
| 1775 EXPECT_EQ(0U, notifications.size()); | 1775 EXPECT_EQ(0U, notifications.size()); |
| 1776 main_test_rfh()->SendNavigate(0, url2); | |
| 1777 EXPECT_EQ(1U, navigation_entry_committed_counter_); | |
| 1778 navigation_entry_committed_counter_ = 0; | |
| 1779 | |
| 1780 // Second request | |
| 1781 controller.LoadURL( | |
| 1782 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); | |
| 1783 | |
| 1784 EXPECT_TRUE(controller.GetPendingEntry()); | |
| 1785 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); | |
| 1786 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL()); | |
| 1787 | 1776 |
| 1788 FrameHostMsg_DidCommitProvisionalLoad_Params params; | 1777 FrameHostMsg_DidCommitProvisionalLoad_Params params; |
| 1789 params.page_id = 0; | 1778 params.page_id = 0; |
| 1790 params.url = url2; | 1779 params.url = url2; |
| 1791 params.transition = ui::PAGE_TRANSITION_SERVER_REDIRECT; | 1780 params.transition = ui::PAGE_TRANSITION_SERVER_REDIRECT; |
| 1792 params.redirects.push_back(GURL("http://foo1")); | 1781 params.redirects.push_back(GURL("http://foo1")); |
| 1793 params.redirects.push_back(GURL("http://foo2")); | 1782 params.redirects.push_back(GURL("http://foo2")); |
| 1794 params.should_update_history = false; | 1783 params.should_update_history = false; |
| 1795 params.gesture = NavigationGestureAuto; | 1784 params.gesture = NavigationGestureAuto; |
| 1796 params.is_post = false; | 1785 params.is_post = false; |
| 1797 params.page_state = PageState::CreateFromURL(url2); | 1786 params.page_state = PageState::CreateFromURL(url2); |
| 1798 | 1787 |
| 1799 LoadCommittedDetails details; | 1788 LoadCommittedDetails details; |
| 1800 | 1789 |
| 1790 EXPECT_TRUE(controller.RendererDidNavigate(main_test_rfh(), params, |
| 1791 &details)); |
| 1792 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
| 1793 navigation_entry_committed_counter_ = 0; |
| 1794 |
| 1795 // Second request. |
| 1796 controller.LoadURL( |
| 1797 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
| 1798 |
| 1799 EXPECT_TRUE(controller.GetPendingEntry()); |
| 1800 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); |
| 1801 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL()); |
| 1801 EXPECT_EQ(0U, notifications.size()); | 1802 EXPECT_EQ(0U, notifications.size()); |
| 1802 EXPECT_TRUE(controller.RendererDidNavigate(main_test_rfh(), params, | 1803 EXPECT_TRUE(controller.RendererDidNavigate(main_test_rfh(), params, |
| 1803 &details)); | 1804 &details)); |
| 1804 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 1805 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
| 1805 navigation_entry_committed_counter_ = 0; | 1806 navigation_entry_committed_counter_ = 0; |
| 1806 | 1807 |
| 1807 EXPECT_TRUE(details.type == NAVIGATION_TYPE_SAME_PAGE); | 1808 EXPECT_TRUE(details.type == NAVIGATION_TYPE_SAME_PAGE); |
| 1808 EXPECT_EQ(controller.GetEntryCount(), 1); | 1809 EXPECT_EQ(controller.GetEntryCount(), 1); |
| 1809 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); | 1810 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); |
| 1810 EXPECT_TRUE(controller.GetLastCommittedEntry()); | 1811 EXPECT_TRUE(controller.GetLastCommittedEntry()); |
| 1811 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); | 1812 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); |
| 1812 EXPECT_FALSE(controller.GetPendingEntry()); | 1813 EXPECT_FALSE(controller.GetPendingEntry()); |
| 1813 EXPECT_EQ(url2, controller.GetVisibleEntry()->GetURL()); | 1814 EXPECT_EQ(url2, controller.GetVisibleEntry()->GetURL()); |
| 1814 | 1815 |
| 1815 EXPECT_FALSE(controller.CanGoBack()); | 1816 EXPECT_FALSE(controller.CanGoBack()); |
| 1816 EXPECT_FALSE(controller.CanGoForward()); | 1817 EXPECT_FALSE(controller.CanGoForward()); |
| 1817 } | 1818 } |
| 1818 | 1819 |
| 1819 // Similar to Redirect above, but the first URL is requested by POST, | 1820 // Similar to Redirect above, but the first URL is requested by POST, |
| 1820 // the second URL is requested by GET. NavigationEntry::has_post_data_ | 1821 // the second URL is requested by GET. NavigationEntry::has_post_data_ |
| 1821 // must be cleared. http://crbug.com/21245 | 1822 // must be cleared. http://crbug.com/21245 |
| 1822 TEST_F(NavigationControllerTest, PostThenRedirect) { | 1823 TEST_F(NavigationControllerTest, PostThenRedirect) { |
| 1823 NavigationControllerImpl& controller = controller_impl(); | 1824 NavigationControllerImpl& controller = controller_impl(); |
| 1824 TestNotificationTracker notifications; | 1825 TestNotificationTracker notifications; |
| 1825 RegisterForAllNavNotifications(¬ifications, &controller); | 1826 RegisterForAllNavNotifications(¬ifications, &controller); |
| 1826 | 1827 |
| 1827 const GURL url1("http://foo1"); | 1828 const GURL url1("http://foo1"); |
| 1828 const GURL url2("http://foo2"); // Redirection target | 1829 const GURL url2("http://foo2"); // Redirection target |
| 1829 | 1830 |
| 1830 // First request as POST | 1831 // First request as POST. |
| 1831 controller.LoadURL( | 1832 controller.LoadURL( |
| 1832 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); | 1833 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
| 1833 controller.GetVisibleEntry()->SetHasPostData(true); | 1834 controller.GetVisibleEntry()->SetHasPostData(true); |
| 1834 | 1835 |
| 1835 EXPECT_EQ(0U, notifications.size()); | 1836 EXPECT_EQ(0U, notifications.size()); |
| 1836 main_test_rfh()->SendNavigate(0, url2); | |
| 1837 EXPECT_EQ(1U, navigation_entry_committed_counter_); | |
| 1838 navigation_entry_committed_counter_ = 0; | |
| 1839 | |
| 1840 // Second request | |
| 1841 controller.LoadURL( | |
| 1842 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); | |
| 1843 | |
| 1844 EXPECT_TRUE(controller.GetPendingEntry()); | |
| 1845 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); | |
| 1846 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL()); | |
| 1847 | 1837 |
| 1848 FrameHostMsg_DidCommitProvisionalLoad_Params params; | 1838 FrameHostMsg_DidCommitProvisionalLoad_Params params; |
| 1849 params.page_id = 0; | 1839 params.page_id = 0; |
| 1850 params.url = url2; | 1840 params.url = url2; |
| 1851 params.transition = ui::PAGE_TRANSITION_SERVER_REDIRECT; | 1841 params.transition = ui::PAGE_TRANSITION_SERVER_REDIRECT; |
| 1852 params.redirects.push_back(GURL("http://foo1")); | 1842 params.redirects.push_back(GURL("http://foo1")); |
| 1853 params.redirects.push_back(GURL("http://foo2")); | 1843 params.redirects.push_back(GURL("http://foo2")); |
| 1854 params.should_update_history = false; | 1844 params.should_update_history = false; |
| 1855 params.gesture = NavigationGestureAuto; | 1845 params.gesture = NavigationGestureAuto; |
| 1856 params.is_post = false; | 1846 params.is_post = true; |
| 1857 params.page_state = PageState::CreateFromURL(url2); | 1847 params.page_state = PageState::CreateFromURL(url2); |
| 1858 | 1848 |
| 1859 LoadCommittedDetails details; | 1849 LoadCommittedDetails details; |
| 1860 | 1850 |
| 1851 EXPECT_TRUE(controller.RendererDidNavigate(main_test_rfh(), params, |
| 1852 &details)); |
| 1853 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
| 1854 navigation_entry_committed_counter_ = 0; |
| 1855 |
| 1856 // Second request. |
| 1857 controller.LoadURL( |
| 1858 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
| 1859 |
| 1860 EXPECT_TRUE(controller.GetPendingEntry()); |
| 1861 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); |
| 1862 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL()); |
| 1863 |
| 1864 params.is_post = false; |
| 1865 |
| 1861 EXPECT_EQ(0U, notifications.size()); | 1866 EXPECT_EQ(0U, notifications.size()); |
| 1862 EXPECT_TRUE(controller.RendererDidNavigate(main_test_rfh(), params, | 1867 EXPECT_TRUE(controller.RendererDidNavigate(main_test_rfh(), params, |
| 1863 &details)); | 1868 &details)); |
| 1864 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 1869 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
| 1865 navigation_entry_committed_counter_ = 0; | 1870 navigation_entry_committed_counter_ = 0; |
| 1866 | 1871 |
| 1867 EXPECT_TRUE(details.type == NAVIGATION_TYPE_SAME_PAGE); | 1872 EXPECT_TRUE(details.type == NAVIGATION_TYPE_SAME_PAGE); |
| 1868 EXPECT_EQ(controller.GetEntryCount(), 1); | 1873 EXPECT_EQ(controller.GetEntryCount(), 1); |
| 1869 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); | 1874 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); |
| 1870 EXPECT_TRUE(controller.GetLastCommittedEntry()); | 1875 EXPECT_TRUE(controller.GetLastCommittedEntry()); |
| (...skipping 2722 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4593 { | 4598 { |
| 4594 LoadCommittedDetails details; | 4599 LoadCommittedDetails details; |
| 4595 controller_impl().RendererDidNavigate(main_test_rfh(), params, &details); | 4600 controller_impl().RendererDidNavigate(main_test_rfh(), params, &details); |
| 4596 EXPECT_EQ(PAGE_TYPE_ERROR, | 4601 EXPECT_EQ(PAGE_TYPE_ERROR, |
| 4597 controller_impl().GetLastCommittedEntry()->GetPageType()); | 4602 controller_impl().GetLastCommittedEntry()->GetPageType()); |
| 4598 EXPECT_EQ(NAVIGATION_TYPE_IN_PAGE, details.type); | 4603 EXPECT_EQ(NAVIGATION_TYPE_IN_PAGE, details.type); |
| 4599 } | 4604 } |
| 4600 } | 4605 } |
| 4601 | 4606 |
| 4602 } // namespace content | 4607 } // namespace content |
| OLD | NEW |