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

Unified Diff: ios/web/navigation/crw_session_controller_unittest.mm

Issue 2838003002: Fix missing back navigation item when pending item is displayed. (Closed)
Patch Set: Fix edge case (no committed item) and added unit test to cover. Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/web/navigation/crw_session_controller.mm ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/web/navigation/crw_session_controller_unittest.mm
diff --git a/ios/web/navigation/crw_session_controller_unittest.mm b/ios/web/navigation/crw_session_controller_unittest.mm
index b23a26b5f028a90b09e4f5c02ba2d44d5adf758d..1411b1171c6c4a35d2d857b1acc806b7e869dfcd 100644
--- a/ios/web/navigation/crw_session_controller_unittest.mm
+++ b/ios/web/navigation/crw_session_controller_unittest.mm
@@ -994,10 +994,10 @@ TEST_F(CRWSessionControllerTest, TestBackwardForwardItems) {
[session_controller_ commitPendingItem];
EXPECT_EQ(3, session_controller_.get().lastCommittedItemIndex);
- web::NavigationItemList backItems = [session_controller_ backwardItems];
- EXPECT_EQ(2U, backItems.size());
+ web::NavigationItemList back_items = [session_controller_ backwardItems];
+ EXPECT_EQ(2U, back_items.size());
EXPECT_TRUE([session_controller_ forwardItems].empty());
- EXPECT_EQ("http://www.example.com/redirect", backItems[0]->GetURL().spec());
+ EXPECT_EQ("http://www.example.com/redirect", back_items[0]->GetURL().spec());
[session_controller_ goToItemAtIndex:1 discardNonCommittedItems:NO];
EXPECT_EQ(1U, [session_controller_ backwardItems].size());
@@ -1236,4 +1236,77 @@ TEST_F(CRWSessionControllerTest, BackwardItemsForAllRedirects) {
EXPECT_EQ(0U, [session_controller_ backwardItems].size());
}
+// Tests that |-pendingItem| is not considered part of session history so that
+// |-backwardItems| returns the second last committed item even if there is a
+// pendign item.
+TEST_F(CRWSessionControllerTest, NewPendingItemIsHiddenFromHistory) {
+ [session_controller_
+ addPendingItem:GURL("http://www.example.com/0")
+ referrer:MakeReferrer("http://www.example.com/a")
+ transition:ui::PAGE_TRANSITION_LINK
+ initiationType:web::NavigationInitiationType::USER_INITIATED
+ userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
+ [session_controller_ commitPendingItem];
+ [session_controller_
+ addPendingItem:GURL("http://www.example.com/1")
+ referrer:MakeReferrer("http://www.example.com/b")
+ transition:ui::PAGE_TRANSITION_LINK
+ initiationType:web::NavigationInitiationType::USER_INITIATED
+ userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
+ [session_controller_ commitPendingItem];
+ [session_controller_
+ addPendingItem:GURL("http://www.example.com/2")
+ referrer:MakeReferrer("http://www.example.com/c")
+ transition:ui::PAGE_TRANSITION_LINK
+ initiationType:web::NavigationInitiationType::USER_INITIATED
+ userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
+
+ EXPECT_EQ(1, session_controller_.get().lastCommittedItemIndex);
+ EXPECT_TRUE([session_controller_ pendingItem]);
+ EXPECT_EQ(-1, [session_controller_ pendingItemIndex]);
+ EXPECT_EQ(GURL("http://www.example.com/2"), [session_controller_ currentURL]);
+
+ web::NavigationItemList back_items = [session_controller_ backwardItems];
+ ASSERT_EQ(1U, back_items.size());
+ EXPECT_EQ("http://www.example.com/0", back_items[0]->GetURL().spec());
+}
+
+// Tests that |-backwardItems| returns all committed items if there is a
+// transient item. This can happen if an intersitial was loaded for SSL error.
+// See crbug.com/691311.
+TEST_F(CRWSessionControllerTest,
+ BackwardItemsShouldContainAllCommittedIfCurrentIsTransient) {
+ [session_controller_
+ addPendingItem:GURL("http://www.example.com/0")
+ referrer:MakeReferrer("http://www.example.com/a")
+ transition:ui::PAGE_TRANSITION_LINK
+ initiationType:web::NavigationInitiationType::USER_INITIATED
+ userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
+ [session_controller_ commitPendingItem];
+ [session_controller_
+ addTransientItemWithURL:GURL("http://www.example.com/1")];
+
+ EXPECT_EQ(0, session_controller_.get().lastCommittedItemIndex);
+ EXPECT_TRUE([session_controller_ transientItem]);
+ EXPECT_EQ(GURL("http://www.example.com/1"), [session_controller_ currentURL]);
+
+ web::NavigationItemList back_items = [session_controller_ backwardItems];
+ ASSERT_EQ(1U, back_items.size());
+ EXPECT_EQ("http://www.example.com/0", back_items[0]->GetURL().spec());
+}
+
+// Tests that |-backwardItems| works as expected when the transient item is the
+// only item in history.
+TEST_F(CRWSessionControllerTest, BackwardItemsShouldBeEmptyIfFirstIsTransient) {
+ [session_controller_
+ addTransientItemWithURL:GURL("http://www.example.com/1")];
+
+ EXPECT_EQ(-1, session_controller_.get().lastCommittedItemIndex);
+ EXPECT_TRUE([session_controller_ transientItem]);
+ EXPECT_EQ(GURL("http://www.example.com/1"), [session_controller_ currentURL]);
+
+ web::NavigationItemList back_items = [session_controller_ backwardItems];
+ EXPECT_TRUE(back_items.empty());
+}
+
} // anonymous namespace
« no previous file with comments | « ios/web/navigation/crw_session_controller.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698