Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(760)

Side by Side Diff: content/browser/frame_host/navigation_controller_impl_unittest.cc

Issue 2225343002: Navigation: move RestoreType and ReloadType into a separate file (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: trybots ran with PS8, but one more safe change is added here Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "content/browser/frame_host/navigation_controller_impl.h" 5 #include "content/browser/frame_host/navigation_controller_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 } 204 }
205 205
206 void SetUp() override { 206 void SetUp() override {
207 RenderViewHostImplTestHarness::SetUp(); 207 RenderViewHostImplTestHarness::SetUp();
208 WebContents* web_contents = RenderViewHostImplTestHarness::web_contents(); 208 WebContents* web_contents = RenderViewHostImplTestHarness::web_contents();
209 ASSERT_TRUE(web_contents); // The WebContents should be created by now. 209 ASSERT_TRUE(web_contents); // The WebContents should be created by now.
210 WebContentsObserver::Observe(web_contents); 210 WebContentsObserver::Observe(web_contents);
211 } 211 }
212 212
213 // WebContentsObserver: 213 // WebContentsObserver:
214 void DidStartNavigationToPendingEntry( 214 void DidStartNavigationToPendingEntry(const GURL& url,
215 const GURL& url, 215 ReloadType reload_type) override {
216 NavigationController::ReloadType reload_type) override {
217 navigated_url_ = url; 216 navigated_url_ = url;
218 } 217 }
219 218
220 void NavigationEntryCommitted( 219 void NavigationEntryCommitted(
221 const LoadCommittedDetails& load_details) override { 220 const LoadCommittedDetails& load_details) override {
222 navigation_entry_committed_counter_++; 221 navigation_entry_committed_counter_++;
223 } 222 }
224 223
225 const GURL& navigated_url() const { 224 const GURL& navigated_url() const {
226 return navigated_url_; 225 return navigated_url_;
(...skipping 2770 matching lines...) Expand 10 before | Expand all | Expand 10 after
2997 browser_context()); 2996 browser_context());
2998 entry->SetPageID(0); 2997 entry->SetPageID(0);
2999 entry->SetTitle(base::ASCIIToUTF16("Title")); 2998 entry->SetTitle(base::ASCIIToUTF16("Title"));
3000 entry->SetPageState(PageState::CreateFromEncodedData("state")); 2999 entry->SetPageState(PageState::CreateFromEncodedData("state"));
3001 const base::Time timestamp = base::Time::Now(); 3000 const base::Time timestamp = base::Time::Now();
3002 entry->SetTimestamp(timestamp); 3001 entry->SetTimestamp(timestamp);
3003 entries.push_back(std::move(entry)); 3002 entries.push_back(std::move(entry));
3004 std::unique_ptr<WebContentsImpl> our_contents(static_cast<WebContentsImpl*>( 3003 std::unique_ptr<WebContentsImpl> our_contents(static_cast<WebContentsImpl*>(
3005 WebContents::Create(WebContents::CreateParams(browser_context())))); 3004 WebContents::Create(WebContents::CreateParams(browser_context()))));
3006 NavigationControllerImpl& our_controller = our_contents->GetController(); 3005 NavigationControllerImpl& our_controller = our_contents->GetController();
3007 our_controller.Restore( 3006 our_controller.Restore(0, RestoreType::LAST_SESSION_EXITED_CLEANLY, &entries);
3008 0,
3009 NavigationController::RESTORE_LAST_SESSION_EXITED_CLEANLY,
3010 &entries);
3011 ASSERT_EQ(0u, entries.size()); 3007 ASSERT_EQ(0u, entries.size());
3012 3008
3013 // Before navigating to the restored entry, it should have a restore_type 3009 // Before navigating to the restored entry, it should have a restore_type
3014 // and no SiteInstance. 3010 // and no SiteInstance.
3015 ASSERT_EQ(1, our_controller.GetEntryCount()); 3011 ASSERT_EQ(1, our_controller.GetEntryCount());
3016 EXPECT_EQ(NavigationEntryImpl::RESTORE_LAST_SESSION_EXITED_CLEANLY, 3012 EXPECT_EQ(RestoreType::LAST_SESSION_EXITED_CLEANLY,
3017 our_controller.GetEntryAtIndex(0)->restore_type()); 3013 our_controller.GetEntryAtIndex(0)->restore_type());
3018 EXPECT_FALSE(our_controller.GetEntryAtIndex(0)->site_instance()); 3014 EXPECT_FALSE(our_controller.GetEntryAtIndex(0)->site_instance());
3019 3015
3020 // After navigating, we should have one entry, and it should be "pending". 3016 // After navigating, we should have one entry, and it should be "pending".
3021 our_controller.GoToIndex(0); 3017 our_controller.GoToIndex(0);
3022 EXPECT_EQ(1, our_controller.GetEntryCount()); 3018 EXPECT_EQ(1, our_controller.GetEntryCount());
3023 EXPECT_EQ(our_controller.GetEntryAtIndex(0), 3019 EXPECT_EQ(our_controller.GetEntryAtIndex(0),
3024 our_controller.GetPendingEntry()); 3020 our_controller.GetPendingEntry());
3025 EXPECT_EQ(0, our_controller.GetEntryAtIndex(0)->GetPageID()); 3021 EXPECT_EQ(0, our_controller.GetEntryAtIndex(0)->GetPageID());
3026 3022
(...skipping 18 matching lines...) Expand all
3045 3041
3046 // There should be no longer any pending entry and one committed one. This 3042 // There should be no longer any pending entry and one committed one. This
3047 // means that we were able to locate the entry, assign its site instance, and 3043 // means that we were able to locate the entry, assign its site instance, and
3048 // commit it properly. 3044 // commit it properly.
3049 EXPECT_EQ(1, our_controller.GetEntryCount()); 3045 EXPECT_EQ(1, our_controller.GetEntryCount());
3050 EXPECT_EQ(0, our_controller.GetLastCommittedEntryIndex()); 3046 EXPECT_EQ(0, our_controller.GetLastCommittedEntryIndex());
3051 EXPECT_FALSE(our_controller.GetPendingEntry()); 3047 EXPECT_FALSE(our_controller.GetPendingEntry());
3052 EXPECT_EQ( 3048 EXPECT_EQ(
3053 url, 3049 url,
3054 our_controller.GetLastCommittedEntry()->site_instance()->GetSiteURL()); 3050 our_controller.GetLastCommittedEntry()->site_instance()->GetSiteURL());
3055 EXPECT_EQ(NavigationEntryImpl::RESTORE_NONE, 3051 EXPECT_EQ(RestoreType::NONE,
3056 our_controller.GetEntryAtIndex(0)->restore_type()); 3052 our_controller.GetEntryAtIndex(0)->restore_type());
3057 3053
3058 // Timestamp should have been updated. 3054 // Timestamp should have been updated.
3059 EXPECT_GE(our_controller.GetEntryAtIndex(0)->GetTimestamp(), timestamp); 3055 EXPECT_GE(our_controller.GetEntryAtIndex(0)->GetTimestamp(), timestamp);
3060 } 3056 }
3061 3057
3062 // Tests that we can still navigate to a restored entry after a different 3058 // Tests that we can still navigate to a restored entry after a different
3063 // navigation fails and clears the pending entry. http://crbug.com/90085 3059 // navigation fails and clears the pending entry. http://crbug.com/90085
3064 TEST_F(NavigationControllerTest, RestoreNavigateAfterFailure) { 3060 TEST_F(NavigationControllerTest, RestoreNavigateAfterFailure) {
3065 // Create a NavigationController with a restored set of tabs. 3061 // Create a NavigationController with a restored set of tabs.
3066 GURL url("http://foo"); 3062 GURL url("http://foo");
3067 std::vector<std::unique_ptr<NavigationEntry>> entries; 3063 std::vector<std::unique_ptr<NavigationEntry>> entries;
3068 std::unique_ptr<NavigationEntry> new_entry = 3064 std::unique_ptr<NavigationEntry> new_entry =
3069 NavigationControllerImpl::CreateNavigationEntry( 3065 NavigationControllerImpl::CreateNavigationEntry(
3070 url, Referrer(), ui::PAGE_TRANSITION_RELOAD, false, std::string(), 3066 url, Referrer(), ui::PAGE_TRANSITION_RELOAD, false, std::string(),
3071 browser_context()); 3067 browser_context());
3072 new_entry->SetPageID(0); 3068 new_entry->SetPageID(0);
3073 new_entry->SetTitle(base::ASCIIToUTF16("Title")); 3069 new_entry->SetTitle(base::ASCIIToUTF16("Title"));
3074 new_entry->SetPageState(PageState::CreateFromEncodedData("state")); 3070 new_entry->SetPageState(PageState::CreateFromEncodedData("state"));
3075 entries.push_back(std::move(new_entry)); 3071 entries.push_back(std::move(new_entry));
3076 std::unique_ptr<WebContentsImpl> our_contents(static_cast<WebContentsImpl*>( 3072 std::unique_ptr<WebContentsImpl> our_contents(static_cast<WebContentsImpl*>(
3077 WebContents::Create(WebContents::CreateParams(browser_context())))); 3073 WebContents::Create(WebContents::CreateParams(browser_context()))));
3078 NavigationControllerImpl& our_controller = our_contents->GetController(); 3074 NavigationControllerImpl& our_controller = our_contents->GetController();
3079 our_controller.Restore( 3075 our_controller.Restore(0, RestoreType::LAST_SESSION_EXITED_CLEANLY, &entries);
3080 0, NavigationController::RESTORE_LAST_SESSION_EXITED_CLEANLY, &entries);
3081 ASSERT_EQ(0u, entries.size()); 3076 ASSERT_EQ(0u, entries.size());
3082 3077
3083 // Ensure the RenderFrame is initialized before simulating events coming from 3078 // Ensure the RenderFrame is initialized before simulating events coming from
3084 // it. 3079 // it.
3085 main_test_rfh()->InitializeRenderFrameIfNeeded(); 3080 main_test_rfh()->InitializeRenderFrameIfNeeded();
3086 3081
3087 // Before navigating to the restored entry, it should have a restore_type 3082 // Before navigating to the restored entry, it should have a restore_type
3088 // and no SiteInstance. 3083 // and no SiteInstance.
3089 NavigationEntry* entry = our_controller.GetEntryAtIndex(0); 3084 NavigationEntry* entry = our_controller.GetEntryAtIndex(0);
3090 EXPECT_EQ(NavigationEntryImpl::RESTORE_LAST_SESSION_EXITED_CLEANLY, 3085 EXPECT_EQ(RestoreType::LAST_SESSION_EXITED_CLEANLY,
3091 our_controller.GetEntryAtIndex(0)->restore_type()); 3086 our_controller.GetEntryAtIndex(0)->restore_type());
3092 EXPECT_FALSE(our_controller.GetEntryAtIndex(0)->site_instance()); 3087 EXPECT_FALSE(our_controller.GetEntryAtIndex(0)->site_instance());
3093 3088
3094 // After navigating, we should have one entry, and it should be "pending". 3089 // After navigating, we should have one entry, and it should be "pending".
3095 our_controller.GoToIndex(0); 3090 our_controller.GoToIndex(0);
3096 EXPECT_EQ(1, our_controller.GetEntryCount()); 3091 EXPECT_EQ(1, our_controller.GetEntryCount());
3097 EXPECT_EQ(our_controller.GetEntryAtIndex(0), 3092 EXPECT_EQ(our_controller.GetEntryAtIndex(0),
3098 our_controller.GetPendingEntry()); 3093 our_controller.GetPendingEntry());
3099 EXPECT_EQ(0, our_controller.GetEntryAtIndex(0)->GetPageID()); 3094 EXPECT_EQ(0, our_controller.GetEntryAtIndex(0)->GetPageID());
3100 3095
(...skipping 25 matching lines...) Expand all
3126 main_rfh->PrepareForCommit(); 3121 main_rfh->PrepareForCommit();
3127 main_rfh->SendNavigateWithParams(&params); 3122 main_rfh->SendNavigateWithParams(&params);
3128 3123
3129 // There should be no pending entry and one committed one. 3124 // There should be no pending entry and one committed one.
3130 EXPECT_EQ(1, our_controller.GetEntryCount()); 3125 EXPECT_EQ(1, our_controller.GetEntryCount());
3131 EXPECT_EQ(0, our_controller.GetLastCommittedEntryIndex()); 3126 EXPECT_EQ(0, our_controller.GetLastCommittedEntryIndex());
3132 EXPECT_FALSE(our_controller.GetPendingEntry()); 3127 EXPECT_FALSE(our_controller.GetPendingEntry());
3133 EXPECT_EQ( 3128 EXPECT_EQ(
3134 url, 3129 url,
3135 our_controller.GetLastCommittedEntry()->site_instance()->GetSiteURL()); 3130 our_controller.GetLastCommittedEntry()->site_instance()->GetSiteURL());
3136 EXPECT_EQ(NavigationEntryImpl::RESTORE_NONE, 3131 EXPECT_EQ(RestoreType::NONE,
3137 our_controller.GetEntryAtIndex(0)->restore_type()); 3132 our_controller.GetEntryAtIndex(0)->restore_type());
3138 } 3133 }
3139 3134
3140 // Make sure that the page type and stuff is correct after an interstitial. 3135 // Make sure that the page type and stuff is correct after an interstitial.
3141 TEST_F(NavigationControllerTest, Interstitial) { 3136 TEST_F(NavigationControllerTest, Interstitial) {
3142 NavigationControllerImpl& controller = controller_impl(); 3137 NavigationControllerImpl& controller = controller_impl();
3143 // First navigate somewhere normal. 3138 // First navigate somewhere normal.
3144 const GURL url1("http://foo"); 3139 const GURL url1("http://foo");
3145 controller.LoadURL( 3140 controller.LoadURL(
3146 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); 3141 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
(...skipping 1502 matching lines...) Expand 10 before | Expand all | Expand 10 after
4649 std::string(), browser_context()); 4644 std::string(), browser_context());
4650 entry->SetPageID(static_cast<int>(i)); 4645 entry->SetPageID(static_cast<int>(i));
4651 entries.push_back(std::move(entry)); 4646 entries.push_back(std::move(entry));
4652 } 4647 }
4653 4648
4654 // Create a WebContents with restored entries. 4649 // Create a WebContents with restored entries.
4655 std::unique_ptr<TestWebContents> source_contents( 4650 std::unique_ptr<TestWebContents> source_contents(
4656 static_cast<TestWebContents*>(CreateTestWebContents())); 4651 static_cast<TestWebContents*>(CreateTestWebContents()));
4657 NavigationControllerImpl& source_controller = 4652 NavigationControllerImpl& source_controller =
4658 source_contents->GetController(); 4653 source_contents->GetController();
4659 source_controller.Restore( 4654 source_controller.Restore(entries.size() - 1,
4660 entries.size() - 1, 4655 RestoreType::LAST_SESSION_EXITED_CLEANLY, &entries);
4661 NavigationController::RESTORE_LAST_SESSION_EXITED_CLEANLY,
4662 &entries);
4663 ASSERT_EQ(0u, entries.size()); 4656 ASSERT_EQ(0u, entries.size());
4664 source_controller.LoadIfNecessary(); 4657 source_controller.LoadIfNecessary();
4665 source_contents->CommitPendingNavigation(); 4658 source_contents->CommitPendingNavigation();
4666 4659
4667 // Load a page, then copy state from |source_contents|. 4660 // Load a page, then copy state from |source_contents|.
4668 NavigateAndCommit(kInitialUrl); 4661 NavigateAndCommit(kInitialUrl);
4669 contents()->ExpectSetHistoryOffsetAndLength(2, 3); 4662 contents()->ExpectSetHistoryOffsetAndLength(2, 3);
4670 controller_impl().CopyStateFromAndPrune(&source_controller, false); 4663 controller_impl().CopyStateFromAndPrune(&source_controller, false);
4671 ASSERT_EQ(3, controller_impl().GetEntryCount()); 4664 ASSERT_EQ(3, controller_impl().GetEntryCount());
4672 4665
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after
5318 // means that occasionally a navigation conflict will end up with one entry 5311 // means that occasionally a navigation conflict will end up with one entry
5319 // bubbling to the end of the entry list, but that's the least-bad option. 5312 // bubbling to the end of the entry list, but that's the least-bad option.
5320 EXPECT_EQ(3, controller.GetEntryCount()); 5313 EXPECT_EQ(3, controller.GetEntryCount());
5321 EXPECT_EQ(2, controller.GetCurrentEntryIndex()); 5314 EXPECT_EQ(2, controller.GetCurrentEntryIndex());
5322 EXPECT_EQ(url_a, controller.GetEntryAtIndex(0)->GetURL()); 5315 EXPECT_EQ(url_a, controller.GetEntryAtIndex(0)->GetURL());
5323 EXPECT_EQ(url_c, controller.GetEntryAtIndex(1)->GetURL()); 5316 EXPECT_EQ(url_c, controller.GetEntryAtIndex(1)->GetURL());
5324 EXPECT_EQ(url_b, controller.GetEntryAtIndex(2)->GetURL()); 5317 EXPECT_EQ(url_b, controller.GetEntryAtIndex(2)->GetURL());
5325 } 5318 }
5326 5319
5327 } // namespace content 5320 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698