Index: ios/web/navigation/navigation_manager_impl_unittest.mm |
diff --git a/ios/web/navigation/navigation_manager_impl_unittest.mm b/ios/web/navigation/navigation_manager_impl_unittest.mm |
index b777003c5ee6800c2f48b796683fbddd31749cb1..41f045df55fd4961cb76250115ced5ad945f6aee 100644 |
--- a/ios/web/navigation/navigation_manager_impl_unittest.mm |
+++ b/ios/web/navigation/navigation_manager_impl_unittest.mm |
@@ -515,6 +515,281 @@ TestNavigationManagerDelegate navigation_manager_delegate() { |
EXPECT_EQ(0, navigation_manager()->GetIndexForOffset(-1)); |
} |
+// Tests that when given a pending item, adding a new pending item should |
+// replace the existing pending item if their URLs are different. |
+TEST_F(NavigationManagerTest, ReplacePendingItemIfDiffernetURL) { |
+ GURL existing_url = GURL("http://www.existing.com"); |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_EQ(existing_url, navigation_manager()->GetPendingItem()->GetURL()); |
+ |
+ GURL new_url = GURL("http://www.new.com"); |
+ navigation_manager()->AddPendingItem( |
+ new_url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_EQ(new_url, navigation_manager()->GetPendingItem()->GetURL()); |
+} |
+ |
+// Tests that when given a pending item, adding a new pending item with the same |
+// URL should replace the existing pending item if new pending item is a form |
+// submission while existing pending item is not. |
+TEST_F(NavigationManagerTest, ReplaceSameUrlPendingItemIfFormSubmission) { |
+ GURL existing_url = GURL("http://www.existing.com"); |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetPendingItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_TYPED)); |
+ |
+ // Should not replace if new transition is not a form submission. |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_LINK, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetPendingItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_TYPED)); |
+ |
+ // Should replace if new transition is a form submission. |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_FORM_SUBMIT, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetPendingItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_FORM_SUBMIT)); |
+} |
+ |
+// Tests that when given a pending item, adding a new pending item with the same |
+// URL should not replace the existing pending item if the user agent override |
+// option is INHERIT. |
+TEST_F(NavigationManagerTest, NotReplaceSameUrlPendingItemIfOverrideInherit) { |
+ GURL existing_url = GURL("http://www.existing.com"); |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetPendingItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_TYPED)); |
+ |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_LINK, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetPendingItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_TYPED)); |
+} |
+ |
+// Tests that when given a pending item, adding a new pending item with the same |
+// URL should replace the existing pending item if the user agent override |
+// option is DESKTOP. |
+TEST_F(NavigationManagerTest, ReplaceSameUrlPendingItemIfOverrideDesktop) { |
+ GURL existing_url = GURL("http://www.existing.com"); |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetPendingItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_TYPED)); |
+ |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_LINK, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::DESKTOP); |
+ |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetPendingItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_LINK)); |
+} |
+ |
+// Tests that when given a pending item, adding a new pending item with the same |
+// URL should replace the existing pending item if the user agent override |
+// option is MOILE. |
+TEST_F(NavigationManagerTest, ReplaceSameUrlPendingItemIfOverrideMobile) { |
+ GURL existing_url = GURL("http://www.existing.com"); |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetPendingItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_TYPED)); |
+ |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_LINK, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::MOBILE); |
+ |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetPendingItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_LINK)); |
+} |
+ |
+// Tests that when the last committed item exists, adding a pending item should |
+// succeed if the pending item's URL is different from the last committed item. |
+TEST_F(NavigationManagerTest, AddPendingItemIfDiffernetURL) { |
+ GURL existing_url = GURL("http://www.existing.com"); |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ [session_controller() commitPendingItem]; |
+ ASSERT_TRUE(navigation_manager()->GetLastCommittedItem()); |
+ EXPECT_EQ(existing_url, |
+ navigation_manager()->GetLastCommittedItem()->GetURL()); |
+ |
+ GURL new_url = GURL("http://www.new.com"); |
+ navigation_manager()->AddPendingItem( |
+ new_url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_EQ(new_url, navigation_manager()->GetPendingItem()->GetURL()); |
+} |
+ |
+// Tests that when the last committed item exists, adding a pending item with |
+// the same URL should succeed if the pending item is a form submission while |
+// the last committed item is not. |
+TEST_F(NavigationManagerTest, AddSameUrlPendingItemIfFormSubmission) { |
+ GURL existing_url = GURL("http://www.existing.com"); |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ [session_controller() commitPendingItem]; |
+ ASSERT_TRUE(navigation_manager()->GetLastCommittedItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetLastCommittedItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_TYPED)); |
+ EXPECT_FALSE(navigation_manager()->GetPendingItem()); |
+ |
+ // Should not add if new transition is not a form submission. |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_LINK, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ EXPECT_FALSE(navigation_manager()->GetPendingItem()); |
+ |
+ // Should add if new transition is a form submission. |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_FORM_SUBMIT, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetPendingItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_FORM_SUBMIT)); |
+ |
+ // Should not add if both the last committed item and the pending item are |
+ // form submissions. |
+ navigation_manager()->DiscardNonCommittedItems(); |
+ EXPECT_FALSE(navigation_manager()->GetPendingItem()); |
+ ASSERT_TRUE(navigation_manager()->GetLastCommittedItem()); |
+ navigation_manager()->GetLastCommittedItem()->SetTransitionType( |
+ ui::PAGE_TRANSITION_FORM_SUBMIT); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetLastCommittedItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_FORM_SUBMIT)); |
+ |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_FORM_SUBMIT, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ EXPECT_FALSE(navigation_manager()->GetPendingItem()); |
+} |
+ |
+// Tests that when the last committed item exists, adding a pending item with |
+// the same URL should fail if the user agent override option is INHERIT. |
+TEST_F(NavigationManagerTest, NotAddSameUrlPendingItemIfOverrideInherit) { |
+ GURL existing_url = GURL("http://www.existing.com"); |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ [session_controller() commitPendingItem]; |
+ ASSERT_TRUE(navigation_manager()->GetLastCommittedItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetLastCommittedItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_TYPED)); |
+ |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_LINK, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ |
+ EXPECT_FALSE(navigation_manager()->GetPendingItem()); |
+} |
+ |
+// Tests that when the last committed item exists, adding a pending item with |
+// the same URL should succeed if the user agent override option is DESKTOP. |
+TEST_F(NavigationManagerTest, AddSameUrlPendingItemIfOverrideDesktop) { |
+ GURL existing_url = GURL("http://www.existing.com"); |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ [session_controller() commitPendingItem]; |
+ ASSERT_TRUE(navigation_manager()->GetLastCommittedItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetLastCommittedItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_TYPED)); |
+ |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_LINK, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::DESKTOP); |
+ |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetPendingItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_LINK)); |
+} |
+ |
+// Tests that when the last committed item exists, adding a pending item with |
+// the same URL should succeed if the user agent override option is MOBILE. |
+TEST_F(NavigationManagerTest, AddSameUrlPendingItemIfOverrideMobile) { |
+ GURL existing_url = GURL("http://www.existing.com"); |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::INHERIT); |
+ [session_controller() commitPendingItem]; |
+ ASSERT_TRUE(navigation_manager()->GetLastCommittedItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetLastCommittedItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_TYPED)); |
+ |
+ navigation_manager()->AddPendingItem( |
+ existing_url, Referrer(), ui::PAGE_TRANSITION_LINK, |
+ web::NavigationInitiationType::USER_INITIATED, |
+ web::NavigationManager::UserAgentOverrideOption::MOBILE); |
+ |
+ ASSERT_TRUE(navigation_manager()->GetPendingItem()); |
+ EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
+ navigation_manager()->GetPendingItem()->GetTransitionType(), |
+ ui::PAGE_TRANSITION_LINK)); |
+} |
+ |
// Tests that desktop user agent can be enforced to use for next pending item |
// when UserAgentOverrideOption is DESKTOP. |
TEST_F(NavigationManagerTest, OverrideUserAgentWithDesktop) { |