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

Unified Diff: content/browser/frame_host/navigation_controller_impl_unittest.cc

Issue 1872313003: PlzNavigate: don't discard pending entry in DidFailProvisionalLoad (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase + removed the content_unittests filter Created 4 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 | « no previous file | content/browser/frame_host/navigator_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/frame_host/navigation_controller_impl_unittest.cc
diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc
index eab278b7c0c58baae37273a5599e5d336981fd82..33f57c83d658cd11aa1caf4f935807ff55e32127 100644
--- a/content/browser/frame_host/navigation_controller_impl_unittest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
@@ -45,6 +45,7 @@
#include "content/public/test/mock_render_process_host.h"
#include "content/public/test/test_notification_tracker.h"
#include "content/public/test/test_utils.h"
+#include "content/test/browser_side_navigation_test_utils.h"
#include "content/test/test_render_frame_host.h"
#include "content/test/test_render_view_host.h"
#include "content/test/test_web_contents.h"
@@ -316,6 +317,17 @@ class LoadCommittedDetailsObserver : public WebContentsObserver {
LoadCommittedDetails details_;
};
+// PlzNavigate
+// A NavigationControllerTest run with --enable-browser-side-navigation.
+class NavigationControllerTestWithBrowserSideNavigation
+ : public NavigationControllerTest {
+ public:
+ void SetUp() override {
+ EnableBrowserSideNavigation();
+ NavigationControllerTest::SetUp();
+ }
+};
+
// -----------------------------------------------------------------------------
TEST_F(NavigationControllerTest, Defaults) {
@@ -416,6 +428,14 @@ TEST_F(NavigationControllerTest, GoToOffset) {
// is being aborted. This caused the last committed entry to be displayed in
// the omnibox, which is the entry before A was created.
TEST_F(NavigationControllerTest, DontDiscardWrongPendingEntry) {
+ if (IsBrowserSideNavigationEnabled()) {
+ // PlzNavigate: this exact order of events cannot happen in PlzNavigate. A
+ // similar issue with the wrong pending entry being discarded is tested in
+ // the PlzNavigate version of the test below.
+ SUCCEED() << "Test is not applicable with PlzNavigate.";
+ return;
+ }
+
NavigationControllerImpl& controller = controller_impl();
GURL initial_url("http://www.google.com");
GURL url_1("http://foo.com");
@@ -448,6 +468,52 @@ TEST_F(NavigationControllerTest, DontDiscardWrongPendingEntry) {
EXPECT_EQ(url_2, controller.GetVisibleEntry()->GetURL());
}
+// PlzNavigate: tests a case similar to
+// NavigationControllerTest.DontDiscardWrongPendingEntry.
+// Tests hat receiving a DidFailProvisionalLoad from the renderer that is
+// trying to commit an error page won't reset the pending entry of a navigation
+// that just started.
+TEST_F(NavigationControllerTestWithBrowserSideNavigation,
+ DontDiscardWrongPendingEntry) {
+ NavigationControllerImpl& controller = controller_impl();
+ GURL initial_url("http://www.google.com");
+ GURL url_1("http://google.com/foo");
+ GURL url_2("http://foo2.com");
+
+ // Navigate inititally. This is the url that could erroneously be the visible
+ // entry when url_1 fails.
+ NavigateAndCommit(initial_url);
+
+ // Set the pending entry as url_1 and receive the DidStartProvisionalLoad
+ // message, creating the NavigationHandle.
+ controller.LoadURL(url_1, Referrer(), ui::PAGE_TRANSITION_TYPED,
+ std::string());
+ EXPECT_EQ(url_1, controller.GetVisibleEntry()->GetURL());
+ main_test_rfh()->SimulateNavigationStart(url_1);
+ EXPECT_EQ(url_1, controller.GetVisibleEntry()->GetURL());
+
+ // The navigation fails and needs to show an error page. This resets the
+ // pending entry.
+ main_test_rfh()->SimulateNavigationError(url_1, net::ERR_TIMED_OUT);
+ EXPECT_EQ(initial_url, controller.GetVisibleEntry()->GetURL());
+
+ // A navigation to url_2 starts, creating a pending navigation entry.
+ controller.LoadURL(url_2, Referrer(), ui::PAGE_TRANSITION_TYPED,
+ std::string());
+ EXPECT_EQ(url_2, controller.GetVisibleEntry()->GetURL());
+
+ // The DidFailProvsionalLoad IPC is received from the current RFH that is
+ // committing an error page. This should not reset the pending entry for the
+ // new ongoing navigation.
+ FrameHostMsg_DidFailProvisionalLoadWithError_Params error;
+ error.error_code = net::ERR_TIMED_OUT;
+ error.url = url_1;
+ main_test_rfh()->OnMessageReceived(
+ FrameHostMsg_DidFailProvisionalLoadWithError(
+ main_test_rfh()->GetRoutingID(), error));
+ EXPECT_EQ(url_2, controller.GetVisibleEntry()->GetURL());
+}
+
TEST_F(NavigationControllerTest, LoadURL) {
NavigationControllerImpl& controller = controller_impl();
TestNotificationTracker notifications;
« no previous file with comments | « no previous file | content/browser/frame_host/navigator_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698