OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 2741 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2752 EXPECT_EQ(1, controller.GetEntryAtIndex(1)->GetPageID()); | 2752 EXPECT_EQ(1, controller.GetEntryAtIndex(1)->GetPageID()); |
2753 EXPECT_EQ(1, contents()->GetMaxPageIDForSiteInstance(instance1)); | 2753 EXPECT_EQ(1, contents()->GetMaxPageIDForSiteInstance(instance1)); |
2754 | 2754 |
2755 scoped_ptr<TestWebContents> other_contents( | 2755 scoped_ptr<TestWebContents> other_contents( |
2756 static_cast<TestWebContents*>(CreateTestWebContents())); | 2756 static_cast<TestWebContents*>(CreateTestWebContents())); |
2757 NavigationControllerImpl& other_controller = other_contents->GetController(); | 2757 NavigationControllerImpl& other_controller = other_contents->GetController(); |
2758 other_contents->NavigateAndCommit(url3); | 2758 other_contents->NavigateAndCommit(url3); |
2759 other_contents->ExpectSetHistoryLengthAndPrune( | 2759 other_contents->ExpectSetHistoryLengthAndPrune( |
2760 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(0)), 2, | 2760 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(0)), 2, |
2761 other_controller.GetEntryAtIndex(0)->GetPageID()); | 2761 other_controller.GetEntryAtIndex(0)->GetPageID()); |
2762 other_controller.CopyStateFromAndPrune(&controller); | 2762 EXPECT_TRUE(other_controller.CopyStateFromAndPrune(&controller)); |
2763 | 2763 |
2764 // other_controller should now contain the 3 urls: url1, url2 and url3. | 2764 // other_controller should now contain the 3 urls: url1, url2 and url3. |
2765 | 2765 |
2766 ASSERT_EQ(3, other_controller.GetEntryCount()); | 2766 ASSERT_EQ(3, other_controller.GetEntryCount()); |
2767 | 2767 |
2768 ASSERT_EQ(2, other_controller.GetCurrentEntryIndex()); | 2768 ASSERT_EQ(2, other_controller.GetCurrentEntryIndex()); |
2769 | 2769 |
2770 EXPECT_EQ(url1, other_controller.GetEntryAtIndex(0)->GetURL()); | 2770 EXPECT_EQ(url1, other_controller.GetEntryAtIndex(0)->GetURL()); |
2771 EXPECT_EQ(url2, other_controller.GetEntryAtIndex(1)->GetURL()); | 2771 EXPECT_EQ(url2, other_controller.GetEntryAtIndex(1)->GetURL()); |
2772 EXPECT_EQ(url3, other_controller.GetEntryAtIndex(2)->GetURL()); | 2772 EXPECT_EQ(url3, other_controller.GetEntryAtIndex(2)->GetURL()); |
2773 EXPECT_EQ(0, other_controller.GetEntryAtIndex(0)->GetPageID()); | 2773 EXPECT_EQ(0, other_controller.GetEntryAtIndex(0)->GetPageID()); |
2774 EXPECT_EQ(1, other_controller.GetEntryAtIndex(1)->GetPageID()); | 2774 EXPECT_EQ(1, other_controller.GetEntryAtIndex(1)->GetPageID()); |
2775 EXPECT_EQ(0, other_controller.GetEntryAtIndex(2)->GetPageID()); | 2775 EXPECT_EQ(0, other_controller.GetEntryAtIndex(2)->GetPageID()); |
2776 | 2776 |
2777 // A new SiteInstance should be used for the new tab. | 2777 // A new SiteInstance should be used for the new tab. |
2778 SiteInstance* instance3 = | 2778 SiteInstance* instance3 = |
2779 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(2)); | 2779 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(2)); |
2780 EXPECT_NE(instance3, instance1); | 2780 EXPECT_NE(instance3, instance1); |
2781 | 2781 |
2782 // The max page ID map should be copied over and updated with the max page ID | 2782 // The max page ID map should be copied over and updated with the max page ID |
2783 // from the current tab. | 2783 // from the current tab. |
2784 EXPECT_EQ(1, other_contents->GetMaxPageIDForSiteInstance(instance1)); | 2784 EXPECT_EQ(1, other_contents->GetMaxPageIDForSiteInstance(instance1)); |
2785 EXPECT_EQ(0, other_contents->GetMaxPageIDForSiteInstance(instance3)); | 2785 EXPECT_EQ(0, other_contents->GetMaxPageIDForSiteInstance(instance3)); |
2786 } | 2786 } |
2787 | 2787 |
2788 // Test CopyStateFromAndPrune with 2 urls, the first selected and nothing in | 2788 // Test CopyStateFromAndPrune with 2 urls, the first selected and 1 entry in |
2789 // the target. | 2789 // the target. |
2790 TEST_F(NavigationControllerTest, CopyStateFromAndPrune2) { | 2790 TEST_F(NavigationControllerTest, CopyStateFromAndPrune2) { |
2791 NavigationControllerImpl& controller = controller_impl(); | 2791 NavigationControllerImpl& controller = controller_impl(); |
2792 const GURL url1("http://foo1"); | 2792 const GURL url1("http://foo1"); |
2793 const GURL url2("http://foo2"); | 2793 const GURL url2("http://foo2"); |
2794 const GURL url3("http://foo3"); | 2794 const GURL url3("http://foo3"); |
2795 | 2795 |
2796 NavigateAndCommit(url1); | 2796 NavigateAndCommit(url1); |
2797 NavigateAndCommit(url2); | 2797 NavigateAndCommit(url2); |
2798 controller.GoBack(); | 2798 controller.GoBack(); |
| 2799 contents()->CommitPendingNavigation(); |
2799 | 2800 |
2800 scoped_ptr<TestWebContents> other_contents( | 2801 scoped_ptr<TestWebContents> other_contents( |
2801 static_cast<TestWebContents*>(CreateTestWebContents())); | 2802 static_cast<TestWebContents*>(CreateTestWebContents())); |
2802 NavigationControllerImpl& other_controller = other_contents->GetController(); | 2803 NavigationControllerImpl& other_controller = other_contents->GetController(); |
2803 other_contents->ExpectSetHistoryLengthAndPrune(NULL, 1, -1); | 2804 other_contents->NavigateAndCommit(url3); |
2804 other_controller.CopyStateFromAndPrune(&controller); | 2805 other_contents->ExpectSetHistoryLengthAndPrune( |
| 2806 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(0)), 1, |
| 2807 other_controller.GetEntryAtIndex(0)->GetPageID()); |
| 2808 EXPECT_TRUE(other_controller.CopyStateFromAndPrune(&controller)); |
2805 | 2809 |
2806 // other_controller should now contain the 1 url: url1. | 2810 // other_controller should now contain: url1, url3 |
2807 | 2811 |
2808 ASSERT_EQ(1, other_controller.GetEntryCount()); | 2812 ASSERT_EQ(2, other_controller.GetEntryCount()); |
2809 | 2813 ASSERT_EQ(1, other_controller.GetCurrentEntryIndex()); |
2810 ASSERT_EQ(0, other_controller.GetCurrentEntryIndex()); | |
2811 | 2814 |
2812 EXPECT_EQ(url1, other_controller.GetEntryAtIndex(0)->GetURL()); | 2815 EXPECT_EQ(url1, other_controller.GetEntryAtIndex(0)->GetURL()); |
2813 EXPECT_EQ(0, other_controller.GetEntryAtIndex(0)->GetPageID()); | 2816 EXPECT_EQ(url3, other_controller.GetEntryAtIndex(1)->GetURL()); |
| 2817 EXPECT_EQ(0, other_controller.GetEntryAtIndex(1)->GetPageID()); |
2814 | 2818 |
2815 // The max page ID map should be copied over and updated with the max page ID | 2819 // The max page ID map should be copied over and updated with the max page ID |
2816 // from the current tab. | 2820 // from the current tab. |
2817 SiteInstance* instance1 = | 2821 SiteInstance* instance1 = |
2818 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(0)); | 2822 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(1)); |
2819 EXPECT_EQ(0, other_contents->GetMaxPageIDForSiteInstance(instance1)); | 2823 EXPECT_EQ(0, other_contents->GetMaxPageIDForSiteInstance(instance1)); |
2820 } | 2824 } |
2821 | 2825 |
2822 // Test CopyStateFromAndPrune with 2 urls, the first selected and nothing in | 2826 // Test CopyStateFromAndPrune with 2 urls, the last selected and 2 entries in |
2823 // the target. | 2827 // the target. |
2824 TEST_F(NavigationControllerTest, CopyStateFromAndPrune3) { | 2828 TEST_F(NavigationControllerTest, CopyStateFromAndPrune3) { |
2825 NavigationControllerImpl& controller = controller_impl(); | 2829 NavigationControllerImpl& controller = controller_impl(); |
2826 const GURL url1("http://foo1"); | 2830 const GURL url1("http://foo1"); |
2827 const GURL url2("http://foo2"); | 2831 const GURL url2("http://foo2"); |
2828 const GURL url3("http://foo3"); | 2832 const GURL url3("http://foo3"); |
| 2833 const GURL url4("http://foo4"); |
| 2834 |
| 2835 NavigateAndCommit(url1); |
| 2836 NavigateAndCommit(url2); |
| 2837 |
| 2838 scoped_ptr<TestWebContents> other_contents( |
| 2839 static_cast<TestWebContents*>(CreateTestWebContents())); |
| 2840 NavigationControllerImpl& other_controller = other_contents->GetController(); |
| 2841 other_contents->NavigateAndCommit(url3); |
| 2842 other_contents->NavigateAndCommit(url4); |
| 2843 other_contents->ExpectSetHistoryLengthAndPrune( |
| 2844 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(1)), 2, |
| 2845 other_controller.GetEntryAtIndex(0)->GetPageID()); |
| 2846 EXPECT_TRUE(other_controller.CopyStateFromAndPrune(&controller)); |
| 2847 |
| 2848 // other_controller should now contain: url1, url2, url4 |
| 2849 |
| 2850 ASSERT_EQ(3, other_controller.GetEntryCount()); |
| 2851 ASSERT_EQ(2, other_controller.GetCurrentEntryIndex()); |
| 2852 |
| 2853 EXPECT_EQ(url1, other_controller.GetEntryAtIndex(0)->GetURL()); |
| 2854 EXPECT_EQ(url2, other_controller.GetEntryAtIndex(1)->GetURL()); |
| 2855 EXPECT_EQ(url4, other_controller.GetEntryAtIndex(2)->GetURL()); |
| 2856 |
| 2857 // The max page ID map should be copied over and updated with the max page ID |
| 2858 // from the current tab. |
| 2859 SiteInstance* instance1 = |
| 2860 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(2)); |
| 2861 EXPECT_EQ(0, other_contents->GetMaxPageIDForSiteInstance(instance1)); |
| 2862 } |
| 2863 |
| 2864 // Test CopyStateFromAndPrune with 2 urls, the first selected and 1 entry plus |
| 2865 // a pending entry in the target. |
| 2866 TEST_F(NavigationControllerTest, CopyStateFromAndPruneTargetPending) { |
| 2867 NavigationControllerImpl& controller = controller_impl(); |
| 2868 const GURL url1("http://foo1"); |
| 2869 const GURL url2("http://foo2"); |
| 2870 const GURL url3("http://foo3"); |
| 2871 const GURL url4("http://foo4"); |
2829 | 2872 |
2830 NavigateAndCommit(url1); | 2873 NavigateAndCommit(url1); |
2831 NavigateAndCommit(url2); | 2874 NavigateAndCommit(url2); |
2832 controller.GoBack(); | 2875 controller.GoBack(); |
| 2876 contents()->CommitPendingNavigation(); |
2833 | 2877 |
2834 scoped_ptr<TestWebContents> other_contents( | 2878 scoped_ptr<TestWebContents> other_contents( |
2835 static_cast<TestWebContents*>(CreateTestWebContents())); | 2879 static_cast<TestWebContents*>(CreateTestWebContents())); |
2836 NavigationControllerImpl& other_controller = other_contents->GetController(); | 2880 NavigationControllerImpl& other_controller = other_contents->GetController(); |
| 2881 other_contents->NavigateAndCommit(url3); |
2837 other_controller.LoadURL( | 2882 other_controller.LoadURL( |
2838 url3, Referrer(), PAGE_TRANSITION_TYPED, std::string()); | 2883 url4, Referrer(), PAGE_TRANSITION_TYPED, std::string()); |
2839 other_contents->ExpectSetHistoryLengthAndPrune(NULL, 1, -1); | 2884 other_contents->ExpectSetHistoryLengthAndPrune( |
2840 other_controller.CopyStateFromAndPrune(&controller); | 2885 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(0)), 1, |
| 2886 other_controller.GetEntryAtIndex(0)->GetPageID()); |
| 2887 EXPECT_TRUE(other_controller.CopyStateFromAndPrune(&controller)); |
2841 | 2888 |
2842 // other_controller should now contain 1 entry for url1, and a pending entry | 2889 // other_controller should now contain url1, url3, and a pending entry |
2843 // for url3. | 2890 // for url4. |
2844 | 2891 |
2845 ASSERT_EQ(1, other_controller.GetEntryCount()); | 2892 ASSERT_EQ(2, other_controller.GetEntryCount()); |
2846 | 2893 EXPECT_EQ(1, other_controller.GetCurrentEntryIndex()); |
2847 EXPECT_EQ(0, other_controller.GetCurrentEntryIndex()); | |
2848 | 2894 |
2849 EXPECT_EQ(url1, other_controller.GetEntryAtIndex(0)->GetURL()); | 2895 EXPECT_EQ(url1, other_controller.GetEntryAtIndex(0)->GetURL()); |
| 2896 EXPECT_EQ(url3, other_controller.GetEntryAtIndex(1)->GetURL()); |
2850 | 2897 |
2851 // And there should be a pending entry for url3. | 2898 // And there should be a pending entry for url4. |
2852 ASSERT_TRUE(other_controller.GetPendingEntry()); | 2899 ASSERT_TRUE(other_controller.GetPendingEntry()); |
2853 | 2900 EXPECT_EQ(url4, other_controller.GetPendingEntry()->GetURL()); |
2854 EXPECT_EQ(url3, other_controller.GetPendingEntry()->GetURL()); | |
2855 | 2901 |
2856 // The max page ID map should be copied over and updated with the max page ID | 2902 // The max page ID map should be copied over and updated with the max page ID |
2857 // from the current tab. | 2903 // from the current tab. |
2858 SiteInstance* instance1 = | 2904 SiteInstance* instance1 = |
2859 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(0)); | 2905 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(0)); |
2860 EXPECT_EQ(0, other_contents->GetMaxPageIDForSiteInstance(instance1)); | 2906 EXPECT_EQ(0, other_contents->GetMaxPageIDForSiteInstance(instance1)); |
2861 } | 2907 } |
2862 | 2908 |
| 2909 // Test CopyStateFromAndPrune with 2 urls, a back navigation pending in the |
| 2910 // source, and 1 entry in the target. The back pending entry should be ignored. |
| 2911 TEST_F(NavigationControllerTest, CopyStateFromAndPruneSourcePending) { |
| 2912 NavigationControllerImpl& controller = controller_impl(); |
| 2913 const GURL url1("http://foo1"); |
| 2914 const GURL url2("http://foo2"); |
| 2915 const GURL url3("http://foo3"); |
| 2916 |
| 2917 NavigateAndCommit(url1); |
| 2918 NavigateAndCommit(url2); |
| 2919 controller.GoBack(); |
| 2920 |
| 2921 scoped_ptr<TestWebContents> other_contents( |
| 2922 static_cast<TestWebContents*>(CreateTestWebContents())); |
| 2923 NavigationControllerImpl& other_controller = other_contents->GetController(); |
| 2924 other_contents->NavigateAndCommit(url3); |
| 2925 other_contents->ExpectSetHistoryLengthAndPrune( |
| 2926 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(0)), 2, |
| 2927 other_controller.GetEntryAtIndex(0)->GetPageID()); |
| 2928 EXPECT_TRUE(other_controller.CopyStateFromAndPrune(&controller)); |
| 2929 |
| 2930 // other_controller should now contain: url1, url2, url3 |
| 2931 |
| 2932 ASSERT_EQ(3, other_controller.GetEntryCount()); |
| 2933 ASSERT_EQ(2, other_controller.GetCurrentEntryIndex()); |
| 2934 |
| 2935 EXPECT_EQ(url1, other_controller.GetEntryAtIndex(0)->GetURL()); |
| 2936 EXPECT_EQ(url2, other_controller.GetEntryAtIndex(1)->GetURL()); |
| 2937 EXPECT_EQ(url3, other_controller.GetEntryAtIndex(2)->GetURL()); |
| 2938 EXPECT_EQ(0, other_controller.GetEntryAtIndex(2)->GetPageID()); |
| 2939 |
| 2940 // The max page ID map should be copied over and updated with the max page ID |
| 2941 // from the current tab. |
| 2942 SiteInstance* instance1 = |
| 2943 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(2)); |
| 2944 EXPECT_EQ(0, other_contents->GetMaxPageIDForSiteInstance(instance1)); |
| 2945 } |
| 2946 |
2863 // Tests CopyStateFromAndPrune with 3 urls in source, 1 in dest, | 2947 // Tests CopyStateFromAndPrune with 3 urls in source, 1 in dest, |
2864 // when the max entry count is 3. We should prune one entry. | 2948 // when the max entry count is 3. We should prune one entry. |
2865 TEST_F(NavigationControllerTest, CopyStateFromAndPruneMaxEntries) { | 2949 TEST_F(NavigationControllerTest, CopyStateFromAndPruneMaxEntries) { |
2866 NavigationControllerImpl& controller = controller_impl(); | 2950 NavigationControllerImpl& controller = controller_impl(); |
2867 size_t original_count = NavigationControllerImpl::max_entry_count(); | 2951 size_t original_count = NavigationControllerImpl::max_entry_count(); |
2868 const int kMaxEntryCount = 3; | 2952 const int kMaxEntryCount = 3; |
2869 | 2953 |
2870 NavigationControllerImpl::set_max_entry_count_for_testing(kMaxEntryCount); | 2954 NavigationControllerImpl::set_max_entry_count_for_testing(kMaxEntryCount); |
2871 | 2955 |
2872 const GURL url1("http://foo/1"); | 2956 const GURL url1("http://foo/1"); |
2873 const GURL url2("http://foo/2"); | 2957 const GURL url2("http://foo/2"); |
2874 const GURL url3("http://foo/3"); | 2958 const GURL url3("http://foo/3"); |
2875 const GURL url4("http://foo/4"); | 2959 const GURL url4("http://foo/4"); |
2876 | 2960 |
2877 // Create a PrunedListener to observe prune notifications. | 2961 // Create a PrunedListener to observe prune notifications. |
2878 PrunedListener listener(&controller); | 2962 PrunedListener listener(&controller); |
2879 | 2963 |
2880 NavigateAndCommit(url1); | 2964 NavigateAndCommit(url1); |
2881 NavigateAndCommit(url2); | 2965 NavigateAndCommit(url2); |
2882 NavigateAndCommit(url3); | 2966 NavigateAndCommit(url3); |
2883 | 2967 |
2884 scoped_ptr<TestWebContents> other_contents( | 2968 scoped_ptr<TestWebContents> other_contents( |
2885 static_cast<TestWebContents*>(CreateTestWebContents())); | 2969 static_cast<TestWebContents*>(CreateTestWebContents())); |
2886 NavigationControllerImpl& other_controller = other_contents->GetController(); | 2970 NavigationControllerImpl& other_controller = other_contents->GetController(); |
2887 other_contents->NavigateAndCommit(url4); | 2971 other_contents->NavigateAndCommit(url4); |
2888 other_contents->ExpectSetHistoryLengthAndPrune( | 2972 other_contents->ExpectSetHistoryLengthAndPrune( |
2889 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(0)), 2, | 2973 GetSiteInstanceFromEntry(other_controller.GetEntryAtIndex(0)), 2, |
2890 other_controller.GetEntryAtIndex(0)->GetPageID()); | 2974 other_controller.GetEntryAtIndex(0)->GetPageID()); |
2891 other_controller.CopyStateFromAndPrune(&controller); | 2975 EXPECT_TRUE(other_controller.CopyStateFromAndPrune(&controller)); |
2892 | 2976 |
2893 // We should have received a pruned notification. | 2977 // We should have received a pruned notification. |
2894 EXPECT_EQ(1, listener.notification_count_); | 2978 EXPECT_EQ(1, listener.notification_count_); |
2895 EXPECT_TRUE(listener.details_.from_front); | 2979 EXPECT_TRUE(listener.details_.from_front); |
2896 EXPECT_EQ(1, listener.details_.count); | 2980 EXPECT_EQ(1, listener.details_.count); |
2897 | 2981 |
2898 // other_controller should now contain only 3 urls: url2, url3 and url4. | 2982 // other_controller should now contain only 3 urls: url2, url3 and url4. |
2899 | 2983 |
2900 ASSERT_EQ(3, other_controller.GetEntryCount()); | 2984 ASSERT_EQ(3, other_controller.GetEntryCount()); |
2901 | 2985 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2953 EXPECT_EQ(url3, nav_params.a.url); | 3037 EXPECT_EQ(url3, nav_params.a.url); |
2954 process()->sink().ClearMessages(); | 3038 process()->sink().ClearMessages(); |
2955 | 3039 |
2956 // Make sure an extravagant history.go() doesn't break. | 3040 // Make sure an extravagant history.go() doesn't break. |
2957 contents()->OnGoToEntryAtOffset(120); // Out of bounds. | 3041 contents()->OnGoToEntryAtOffset(120); // Out of bounds. |
2958 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 3042 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
2959 message = process()->sink().GetFirstMessageMatching(ViewMsg_Navigate::ID); | 3043 message = process()->sink().GetFirstMessageMatching(ViewMsg_Navigate::ID); |
2960 EXPECT_TRUE(message == NULL); | 3044 EXPECT_TRUE(message == NULL); |
2961 } | 3045 } |
2962 | 3046 |
2963 // Test call to PruneAllButActive for the only entry. | 3047 // Test call to PruneAllButVisible for the only entry. |
2964 TEST_F(NavigationControllerTest, PruneAllButActiveForSingle) { | 3048 TEST_F(NavigationControllerTest, PruneAllButVisibleForSingle) { |
2965 NavigationControllerImpl& controller = controller_impl(); | 3049 NavigationControllerImpl& controller = controller_impl(); |
2966 const GURL url1("http://foo1"); | 3050 const GURL url1("http://foo1"); |
2967 NavigateAndCommit(url1); | 3051 NavigateAndCommit(url1); |
2968 | 3052 |
2969 contents()->ExpectSetHistoryLengthAndPrune( | 3053 contents()->ExpectSetHistoryLengthAndPrune( |
2970 GetSiteInstanceFromEntry(controller.GetEntryAtIndex(0)), 0, | 3054 GetSiteInstanceFromEntry(controller.GetEntryAtIndex(0)), 0, |
2971 controller.GetEntryAtIndex(0)->GetPageID()); | 3055 controller.GetEntryAtIndex(0)->GetPageID()); |
2972 | 3056 |
2973 controller.PruneAllButActive(); | 3057 EXPECT_TRUE(controller.PruneAllButVisible()); |
2974 | 3058 |
2975 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 3059 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
2976 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url1); | 3060 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url1); |
2977 } | 3061 } |
2978 | 3062 |
2979 // Test call to PruneAllButActive for last entry. | 3063 // Test call to PruneAllButVisible for first entry. |
2980 TEST_F(NavigationControllerTest, PruneAllButActiveForLast) { | 3064 TEST_F(NavigationControllerTest, PruneAllButVisibleForFirst) { |
2981 NavigationControllerImpl& controller = controller_impl(); | 3065 NavigationControllerImpl& controller = controller_impl(); |
2982 const GURL url1("http://foo/1"); | 3066 const GURL url1("http://foo/1"); |
2983 const GURL url2("http://foo/2"); | 3067 const GURL url2("http://foo/2"); |
2984 const GURL url3("http://foo/3"); | 3068 const GURL url3("http://foo/3"); |
2985 | 3069 |
2986 NavigateAndCommit(url1); | 3070 NavigateAndCommit(url1); |
2987 NavigateAndCommit(url2); | 3071 NavigateAndCommit(url2); |
2988 NavigateAndCommit(url3); | 3072 NavigateAndCommit(url3); |
2989 controller.GoBack(); | 3073 controller.GoBack(); |
2990 controller.GoBack(); | 3074 controller.GoBack(); |
2991 contents()->CommitPendingNavigation(); | 3075 contents()->CommitPendingNavigation(); |
2992 | 3076 |
2993 contents()->ExpectSetHistoryLengthAndPrune( | 3077 contents()->ExpectSetHistoryLengthAndPrune( |
2994 GetSiteInstanceFromEntry(controller.GetEntryAtIndex(0)), 0, | 3078 GetSiteInstanceFromEntry(controller.GetEntryAtIndex(0)), 0, |
2995 controller.GetEntryAtIndex(0)->GetPageID()); | 3079 controller.GetEntryAtIndex(0)->GetPageID()); |
2996 | 3080 |
2997 controller.PruneAllButActive(); | 3081 EXPECT_TRUE(controller.PruneAllButVisible()); |
2998 | 3082 |
2999 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 3083 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
3000 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url1); | 3084 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url1); |
3001 } | 3085 } |
3002 | 3086 |
3003 // Test call to PruneAllButActive for intermediate entry. | 3087 // Test call to PruneAllButVisible for intermediate entry. |
3004 TEST_F(NavigationControllerTest, PruneAllButActiveForIntermediate) { | 3088 TEST_F(NavigationControllerTest, PruneAllButVisibleForIntermediate) { |
3005 NavigationControllerImpl& controller = controller_impl(); | 3089 NavigationControllerImpl& controller = controller_impl(); |
3006 const GURL url1("http://foo/1"); | 3090 const GURL url1("http://foo/1"); |
3007 const GURL url2("http://foo/2"); | 3091 const GURL url2("http://foo/2"); |
3008 const GURL url3("http://foo/3"); | 3092 const GURL url3("http://foo/3"); |
3009 | 3093 |
3010 NavigateAndCommit(url1); | 3094 NavigateAndCommit(url1); |
3011 NavigateAndCommit(url2); | 3095 NavigateAndCommit(url2); |
3012 NavigateAndCommit(url3); | 3096 NavigateAndCommit(url3); |
3013 controller.GoBack(); | 3097 controller.GoBack(); |
3014 contents()->CommitPendingNavigation(); | 3098 contents()->CommitPendingNavigation(); |
3015 | 3099 |
3016 contents()->ExpectSetHistoryLengthAndPrune( | 3100 contents()->ExpectSetHistoryLengthAndPrune( |
3017 GetSiteInstanceFromEntry(controller.GetEntryAtIndex(1)), 0, | 3101 GetSiteInstanceFromEntry(controller.GetEntryAtIndex(1)), 0, |
3018 controller.GetEntryAtIndex(1)->GetPageID()); | 3102 controller.GetEntryAtIndex(1)->GetPageID()); |
3019 | 3103 |
3020 controller.PruneAllButActive(); | 3104 EXPECT_TRUE(controller.PruneAllButVisible()); |
3021 | 3105 |
3022 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 3106 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
3023 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url2); | 3107 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url2); |
3024 } | 3108 } |
3025 | 3109 |
3026 // Test call to PruneAllButActive for a pending entry. | 3110 // Test call to PruneAllButVisible for a pending entry that is not yet in the |
3027 TEST_F(NavigationControllerTest, PruneAllButActiveForPending) { | 3111 // list of entries. |
| 3112 TEST_F(NavigationControllerTest, PruneAllButVisibleForPendingNotInList) { |
3028 NavigationControllerImpl& controller = controller_impl(); | 3113 NavigationControllerImpl& controller = controller_impl(); |
3029 const GURL url1("http://foo/1"); | 3114 const GURL url1("http://foo/1"); |
3030 const GURL url2("http://foo/2"); | 3115 const GURL url2("http://foo/2"); |
3031 const GURL url3("http://foo/3"); | |
3032 | |
3033 NavigateAndCommit(url1); | |
3034 NavigateAndCommit(url2); | |
3035 NavigateAndCommit(url3); | |
3036 controller.GoBack(); | |
3037 | |
3038 contents()->ExpectSetHistoryLengthAndPrune( | |
3039 GetSiteInstanceFromEntry(controller.GetEntryAtIndex(1)), 0, | |
3040 controller.GetEntryAtIndex(1)->GetPageID()); | |
3041 | |
3042 controller.PruneAllButActive(); | |
3043 | |
3044 EXPECT_EQ(0, controller.GetPendingEntryIndex()); | |
3045 } | |
3046 | |
3047 // Test call to PruneAllButActive for a pending entry that is not yet in the | |
3048 // list of entries. | |
3049 TEST_F(NavigationControllerTest, PruneAllButActiveForPendingNotInList) { | |
3050 NavigationControllerImpl& controller = controller_impl(); | |
3051 const GURL url1("http://foo/1"); | |
3052 const GURL url2("http://foo/2"); | |
3053 const GURL url3("http://foo/3"); | 3116 const GURL url3("http://foo/3"); |
3054 | 3117 |
3055 NavigateAndCommit(url1); | 3118 NavigateAndCommit(url1); |
3056 NavigateAndCommit(url2); | 3119 NavigateAndCommit(url2); |
3057 | 3120 |
3058 // Create a pending entry that is not in the entry list. | 3121 // Create a pending entry that is not in the entry list. |
3059 controller.LoadURL( | 3122 controller.LoadURL( |
3060 url3, Referrer(), PAGE_TRANSITION_TYPED, std::string()); | 3123 url3, Referrer(), PAGE_TRANSITION_TYPED, std::string()); |
3061 EXPECT_TRUE(controller.GetPendingEntry()); | 3124 EXPECT_TRUE(controller.GetPendingEntry()); |
3062 EXPECT_EQ(2, controller.GetEntryCount()); | 3125 EXPECT_EQ(2, controller.GetEntryCount()); |
3063 | 3126 |
3064 contents()->ExpectSetHistoryLengthAndPrune( | 3127 contents()->ExpectSetHistoryLengthAndPrune( |
3065 NULL, 0, controller.GetPendingEntry()->GetPageID()); | 3128 NULL, 0, controller.GetPendingEntry()->GetPageID()); |
3066 controller.PruneAllButActive(); | 3129 EXPECT_TRUE(controller.PruneAllButVisible()); |
3067 | 3130 |
3068 // We should only have the pending entry at this point, and it should still | 3131 // We should only have the last committed and pending entries at this point, |
3069 // not be in the entry list. | 3132 // and the pending entry should still not be in the entry list. |
| 3133 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); |
| 3134 EXPECT_EQ(url2, controller.GetEntryAtIndex(0)->GetURL()); |
3070 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 3135 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
3071 EXPECT_TRUE(controller.GetPendingEntry()); | 3136 EXPECT_TRUE(controller.GetPendingEntry()); |
3072 EXPECT_EQ(0, controller.GetEntryCount()); | 3137 EXPECT_EQ(1, controller.GetEntryCount()); |
3073 | 3138 |
3074 // Try to commit the pending entry. | 3139 // Try to commit the pending entry. |
3075 test_rvh()->SendNavigate(2, url3); | 3140 test_rvh()->SendNavigate(2, url3); |
3076 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 3141 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
3077 EXPECT_FALSE(controller.GetPendingEntry()); | 3142 EXPECT_FALSE(controller.GetPendingEntry()); |
3078 EXPECT_EQ(1, controller.GetEntryCount()); | 3143 EXPECT_EQ(2, controller.GetEntryCount()); |
3079 EXPECT_EQ(url3, controller.GetEntryAtIndex(0)->GetURL()); | 3144 EXPECT_EQ(url3, controller.GetEntryAtIndex(1)->GetURL()); |
3080 } | |
3081 | |
3082 // Test call to PruneAllButActive for transient entry. | |
3083 TEST_F(NavigationControllerTest, PruneAllButActiveForTransient) { | |
3084 NavigationControllerImpl& controller = controller_impl(); | |
3085 const GURL url0("http://foo/0"); | |
3086 const GURL url1("http://foo/1"); | |
3087 const GURL transient_url("http://foo/transient"); | |
3088 | |
3089 controller.LoadURL( | |
3090 url0, Referrer(), PAGE_TRANSITION_TYPED, std::string()); | |
3091 test_rvh()->SendNavigate(0, url0); | |
3092 controller.LoadURL( | |
3093 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); | |
3094 test_rvh()->SendNavigate(1, url1); | |
3095 | |
3096 // Adding a transient with no pending entry. | |
3097 NavigationEntryImpl* transient_entry = new NavigationEntryImpl; | |
3098 transient_entry->SetURL(transient_url); | |
3099 controller.SetTransientEntry(transient_entry); | |
3100 | |
3101 contents()->ExpectSetHistoryLengthAndPrune( | |
3102 GetSiteInstanceFromEntry(controller.GetTransientEntry()), 0, | |
3103 controller.GetTransientEntry()->GetPageID()); | |
3104 | |
3105 controller.PruneAllButActive(); | |
3106 | |
3107 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | |
3108 EXPECT_EQ(controller.GetTransientEntry()->GetURL(), transient_url); | |
3109 } | 3145 } |
3110 | 3146 |
3111 // Test to ensure that when we do a history navigation back to the current | 3147 // Test to ensure that when we do a history navigation back to the current |
3112 // committed page (e.g., going forward to a slow-loading page, then pressing | 3148 // committed page (e.g., going forward to a slow-loading page, then pressing |
3113 // the back button), we just stop the navigation to prevent the throbber from | 3149 // the back button), we just stop the navigation to prevent the throbber from |
3114 // running continuously. Otherwise, the RenderViewHost forces the throbber to | 3150 // running continuously. Otherwise, the RenderViewHost forces the throbber to |
3115 // start, but WebKit essentially ignores the navigation and never sends a | 3151 // start, but WebKit essentially ignores the navigation and never sends a |
3116 // message to stop the throbber. | 3152 // message to stop the throbber. |
3117 TEST_F(NavigationControllerTest, StopOnHistoryNavigationToCurrentPage) { | 3153 TEST_F(NavigationControllerTest, StopOnHistoryNavigationToCurrentPage) { |
3118 NavigationControllerImpl& controller = controller_impl(); | 3154 NavigationControllerImpl& controller = controller_impl(); |
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3546 PAGE_TRANSITION_LINK); | 3582 PAGE_TRANSITION_LINK); |
3547 session_helper_.AssertNavigationEquals(nav, | 3583 session_helper_.AssertNavigationEquals(nav, |
3548 windows_[0]->tabs[0]->navigations[0]); | 3584 windows_[0]->tabs[0]->navigations[0]); |
3549 nav.set_url(url2); | 3585 nav.set_url(url2); |
3550 session_helper_.AssertNavigationEquals(nav, | 3586 session_helper_.AssertNavigationEquals(nav, |
3551 windows_[0]->tabs[0]->navigations[1]); | 3587 windows_[0]->tabs[0]->navigations[1]); |
3552 } | 3588 } |
3553 */ | 3589 */ |
3554 | 3590 |
3555 } // namespace content | 3591 } // namespace content |
OLD | NEW |