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

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

Issue 2766453002: Implement Reload for ORIGINAL_REQUEST_URL in NavigationManagerImpl. (Closed)
Patch Set: Rebase Created 3 years, 9 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
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 7bac7552ab46256554b5a441339fd7f0aba2b974..a62143372ff6367ffafada04898f0bc784ea95b5 100644
--- a/ios/web/navigation/navigation_manager_impl_unittest.mm
+++ b/ios/web/navigation/navigation_manager_impl_unittest.mm
@@ -18,13 +18,20 @@
namespace {
// Stub class for NavigationManagerDelegate.
class TestNavigationManagerDelegate : public NavigationManagerDelegate {
+ public:
+ bool reload_called() { return reload_called_; }
+
+ private:
+ // NavigationManagerDelegate overrides.
void GoToIndex(int index) override {}
void LoadURLWithParams(const NavigationManager::WebLoadParams&) override {}
- void Reload() override {}
+ void Reload() override { reload_called_ = true; }
void OnNavigationItemsPruned(size_t pruned_item_count) override {}
void OnNavigationItemChanged() override{};
void OnNavigationItemCommitted(const LoadCommittedDetails&) override {}
WebState* GetWebState() override { return nullptr; }
+
+ bool reload_called_ = false;
};
} // namespace
@@ -40,6 +47,9 @@ void OnNavigationItemCommitted(const LoadCommittedDetails&) override {}
}
CRWSessionController* session_controller() { return controller_.get(); }
NavigationManagerImpl* navigation_manager() { return manager_.get(); }
+ TestNavigationManagerDelegate navigation_manager_delegate() {
+ return delegate_;
+ }
private:
TestBrowserState browser_state_;
@@ -598,20 +608,231 @@ void OnNavigationItemCommitted(const LoadCommittedDetails&) override {}
EXPECT_EQ(item2->GetUserAgentType(), item3->GetUserAgentType());
}
-// Tests that calling |Reload| on NavigationManager leaves the Url of the
-// visible item unchanged.
-TEST_F(NavigationManagerTest, ReloadWithNormalReloadType) {
+// Tests that calling |Reload| with web::ReloadType::NORMAL is no-op when there
+// are no transient, pending and committed items.
+TEST_F(NavigationManagerTest, ReloadEmptyWithNormalType) {
+ ASSERT_FALSE(navigation_manager()->GetTransientItem());
+ ASSERT_FALSE(navigation_manager()->GetPendingItem());
+ ASSERT_FALSE(navigation_manager()->GetLastCommittedItem());
+
+ navigation_manager()->Reload(web::ReloadType::NORMAL,
+ false /* check_for_repost */);
+ EXPECT_FALSE(navigation_manager_delegate().reload_called());
+
+ ASSERT_FALSE(navigation_manager()->GetTransientItem());
+ ASSERT_FALSE(navigation_manager()->GetPendingItem());
+ ASSERT_FALSE(navigation_manager()->GetLastCommittedItem());
+}
+
+// Tests that calling |Reload| with web::ReloadType::NORMAL leaves the url of
+// the renderer initiated pending item unchanged when there is one.
+TEST_F(NavigationManagerTest, ReloadRendererPendingItemWithNormalType) {
+ GURL url_before_reload = GURL("http://www.url.com");
navigation_manager()->AddPendingItem(
- GURL("http://www.url.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+ url_before_reload, Referrer(), ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::RENDERER_INITIATED);
+
+ navigation_manager()->Reload(web::ReloadType::NORMAL,
+ false /* check_for_repost */);
+ EXPECT_TRUE(navigation_manager_delegate().reload_called());
+
+ ASSERT_TRUE(navigation_manager()->GetPendingItem());
+ EXPECT_EQ(url_before_reload,
+ navigation_manager()->GetPendingItem()->GetURL());
+}
+
+// Tests that calling |Reload| with web::ReloadType::NORMAL leaves the url of
+// the user initiated pending item unchanged when there is one.
+TEST_F(NavigationManagerTest, ReloadUserPendingItemWithNormalType) {
+ GURL url_before_reload = GURL("http://www.url.com");
+ navigation_manager()->AddPendingItem(
+ url_before_reload, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED);
- ASSERT_TRUE(navigation_manager()->GetVisibleItem());
- GURL url_before_reload = navigation_manager()->GetVisibleItem()->GetURL();
navigation_manager()->Reload(web::ReloadType::NORMAL,
false /* check_for_repost */);
+ EXPECT_TRUE(navigation_manager_delegate().reload_called());
+
+ ASSERT_TRUE(navigation_manager()->GetPendingItem());
+ EXPECT_EQ(url_before_reload,
+ navigation_manager()->GetPendingItem()->GetURL());
+}
+
+// Tests that calling |Reload| with web::ReloadType::NORMAL leaves the url of
+// the last committed item unchanged when there is no pending item.
+TEST_F(NavigationManagerTest, ReloadLastCommittedItemWithNormalType) {
+ navigation_manager()->AddPendingItem(
+ GURL("http://www.url.com/0"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::USER_INITIATED);
+ [session_controller() commitPendingItem];
+
+ GURL url_before_reload = GURL("http://www.url.com/1");
+ navigation_manager()->AddPendingItem(
+ url_before_reload, Referrer(), ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::USER_INITIATED);
+ [session_controller() commitPendingItem];
+
+ navigation_manager()->Reload(web::ReloadType::NORMAL,
+ false /* check_for_repost */);
+ EXPECT_TRUE(navigation_manager_delegate().reload_called());
+
+ ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
+ EXPECT_EQ(url_before_reload,
+ navigation_manager()->GetLastCommittedItem()->GetURL());
+}
+
+// Tests that calling |Reload| with web::ReloadType::NORMAL leaves the url of
+// the last committed item unchanged when there is no pending item, but there
+// forward items after last committed item.
+TEST_F(NavigationManagerTest,
+ ReloadLastCommittedItemWithNormalTypeWithForwardItems) {
+ navigation_manager()->AddPendingItem(
+ GURL("http://www.url.com/0"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::USER_INITIATED);
+ [session_controller() commitPendingItem];
+
+ GURL url_before_reload = GURL("http://www.url.com/1");
+ navigation_manager()->AddPendingItem(
+ url_before_reload, Referrer(), ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::USER_INITIATED);
+ [session_controller() commitPendingItem];
+
+ navigation_manager()->AddPendingItem(
+ GURL("http://www.url.com/2"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::USER_INITIATED);
+ [session_controller() commitPendingItem];
+
+ [session_controller() goToItemAtIndex:1];
+ EXPECT_EQ(1, navigation_manager()->GetLastCommittedItemIndex());
+
+ navigation_manager()->Reload(web::ReloadType::NORMAL,
+ false /* check_for_repost */);
+ EXPECT_TRUE(navigation_manager_delegate().reload_called());
+ ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
EXPECT_EQ(url_before_reload,
- navigation_manager()->GetVisibleItem()->GetURL());
+ navigation_manager()->GetLastCommittedItem()->GetURL());
+}
+
+// Tests that calling |Reload| with web::ReloadType::ORIGINAL_REQUEST_URL is
+// no-op when there are no transient, pending and committed items.
+TEST_F(NavigationManagerTest, ReloadEmptyWithOriginalType) {
+ ASSERT_FALSE(navigation_manager()->GetTransientItem());
+ ASSERT_FALSE(navigation_manager()->GetPendingItem());
+ ASSERT_FALSE(navigation_manager()->GetLastCommittedItem());
+
+ navigation_manager()->Reload(web::ReloadType::ORIGINAL_REQUEST_URL,
+ false /* check_for_repost */);
+ EXPECT_FALSE(navigation_manager_delegate().reload_called());
+
+ ASSERT_FALSE(navigation_manager()->GetTransientItem());
+ ASSERT_FALSE(navigation_manager()->GetPendingItem());
+ ASSERT_FALSE(navigation_manager()->GetLastCommittedItem());
+}
+
+// Tests that calling |Reload| with web::ReloadType::ORIGINAL_REQUEST_URL
+// changes the renderer initiated pending item's url to its original request url
+// when there is one.
+TEST_F(NavigationManagerTest, ReloadRendererPendingItemWithOriginalType) {
+ navigation_manager()->AddPendingItem(
+ GURL("http://www.url.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::RENDERER_INITIATED);
+ ASSERT_TRUE(navigation_manager()->GetPendingItem());
+ GURL expected_original_url = GURL("http://www.url.com/original");
+ navigation_manager()->GetPendingItem()->SetOriginalRequestURL(
+ expected_original_url);
+
+ navigation_manager()->Reload(web::ReloadType::ORIGINAL_REQUEST_URL,
+ false /* check_for_repost */);
+ EXPECT_TRUE(navigation_manager_delegate().reload_called());
+
+ ASSERT_TRUE(navigation_manager()->GetPendingItem());
+ EXPECT_EQ(expected_original_url,
+ navigation_manager()->GetPendingItem()->GetURL());
+}
+
+// Tests that calling |Reload| with web::ReloadType::ORIGINAL_REQUEST_URL
+// changes the user initiated pending item's url to its original request url
+// when there is one.
+TEST_F(NavigationManagerTest, ReloadUserPendingItemWithOriginalType) {
+ navigation_manager()->AddPendingItem(
+ GURL("http://www.url.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::USER_INITIATED);
+ ASSERT_TRUE(navigation_manager()->GetPendingItem());
+ GURL expected_original_url = GURL("http://www.url.com/original");
+ navigation_manager()->GetPendingItem()->SetOriginalRequestURL(
+ expected_original_url);
+
+ navigation_manager()->Reload(web::ReloadType::ORIGINAL_REQUEST_URL,
+ false /* check_for_repost */);
+ EXPECT_TRUE(navigation_manager_delegate().reload_called());
+
+ ASSERT_TRUE(navigation_manager()->GetPendingItem());
+ EXPECT_EQ(expected_original_url,
+ navigation_manager()->GetPendingItem()->GetURL());
+}
+
+// Tests that calling |Reload| with web::ReloadType::ORIGINAL_REQUEST_URL
+// changes the last committed item's url to its original request url when there
+// is no pending item.
+TEST_F(NavigationManagerTest, ReloadLastCommittedItemWithOriginalType) {
+ navigation_manager()->AddPendingItem(
+ GURL("http://www.url.com/0"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::USER_INITIATED);
+ [session_controller() commitPendingItem];
+
+ navigation_manager()->AddPendingItem(
+ GURL("http://www.url.com/1"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::USER_INITIATED);
+ GURL expected_original_url = GURL("http://www.url.com/1/original");
+ ASSERT_TRUE(navigation_manager()->GetPendingItem());
+ navigation_manager()->GetPendingItem()->SetOriginalRequestURL(
+ expected_original_url);
+ [session_controller() commitPendingItem];
+
+ navigation_manager()->Reload(web::ReloadType::ORIGINAL_REQUEST_URL,
+ false /* check_for_repost */);
+ EXPECT_TRUE(navigation_manager_delegate().reload_called());
+
+ ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
+ EXPECT_EQ(expected_original_url,
+ navigation_manager()->GetLastCommittedItem()->GetURL());
+}
+
+// Tests that calling |Reload| with web::ReloadType::ORIGINAL_REQUEST_URL
+// changes the last committed item's url to its original request url when there
+// is no pending item, but there are forward items after last committed item.
+TEST_F(NavigationManagerTest,
+ ReloadLastCommittedItemWithOriginalTypeWithForwardItems) {
+ navigation_manager()->AddPendingItem(
+ GURL("http://www.url.com/0"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::USER_INITIATED);
+ [session_controller() commitPendingItem];
+
+ navigation_manager()->AddPendingItem(
+ GURL("http://www.url.com/1"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::USER_INITIATED);
+ GURL expected_original_url = GURL("http://www.url.com/1/original");
+ ASSERT_TRUE(navigation_manager()->GetPendingItem());
+ navigation_manager()->GetPendingItem()->SetOriginalRequestURL(
+ expected_original_url);
+ [session_controller() commitPendingItem];
+
+ navigation_manager()->AddPendingItem(
+ GURL("http://www.url.com/2"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::USER_INITIATED);
+ [session_controller() commitPendingItem];
+
+ [session_controller() goToItemAtIndex:1];
+ EXPECT_EQ(1, navigation_manager()->GetLastCommittedItemIndex());
+
+ navigation_manager()->Reload(web::ReloadType::ORIGINAL_REQUEST_URL,
+ false /* check_for_repost */);
+ EXPECT_TRUE(navigation_manager_delegate().reload_called());
+
+ ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
+ EXPECT_EQ(expected_original_url,
+ navigation_manager()->GetLastCommittedItem()->GetURL());
}
} // namespace web

Powered by Google App Engine
This is Rietveld 408576698