| Index: content/browser/frame_host/navigation_handle_impl_browsertest.cc
|
| diff --git a/content/browser/frame_host/navigation_handle_impl_browsertest.cc b/content/browser/frame_host/navigation_handle_impl_browsertest.cc
|
| index ff2536a207a47bed23c39e24d0ae4b0a5b0799b9..d92c5dd314bf7dce0f5ddb160e2839ccfd6432f0 100644
|
| --- a/content/browser/frame_host/navigation_handle_impl_browsertest.cc
|
| +++ b/content/browser/frame_host/navigation_handle_impl_browsertest.cc
|
| @@ -8,6 +8,7 @@
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/browser/web_contents_observer.h"
|
| #include "content/public/common/browser_side_navigation_policy.h"
|
| +#include "content/public/common/content_switches.h"
|
| #include "content/public/common/request_context_type.h"
|
| #include "content/public/test/browser_test_utils.h"
|
| #include "content/public/test/content_browser_test.h"
|
| @@ -17,6 +18,7 @@
|
| #include "content/shell/browser/shell.h"
|
| #include "content/test/content_browser_test_utils_internal.h"
|
| #include "net/dns/mock_host_resolver.h"
|
| +#include "net/test/url_request/url_request_failed_job.h"
|
| #include "ui/base/page_transition_types.h"
|
| #include "url/url_constants.h"
|
|
|
| @@ -1118,4 +1120,86 @@ IN_PROC_BROWSER_TEST_F(NavigationHandleImplBrowserTest, BlockedOnRedirect) {
|
| EXPECT_EQ(finished_navigation, logger.finished_navigation_urls());
|
| }
|
|
|
| +// This class allows running tests with PlzNavigate enabled, regardless of
|
| +// default test configuration.
|
| +class PlzNavigateNavigationHandleImplBrowserTest : public ContentBrowserTest {
|
| + public:
|
| + PlzNavigateNavigationHandleImplBrowserTest() {}
|
| +
|
| + void SetUpCommandLine(base::CommandLine* command_line) override {
|
| + command_line->AppendSwitch(switches::kEnableBrowserSideNavigation);
|
| + }
|
| +};
|
| +
|
| +// Test to verify that error pages caused by NavigationThrottle blocking a
|
| +// request from being made are properly committed in the original process
|
| +// that requested the navigation.
|
| +IN_PROC_BROWSER_TEST_F(PlzNavigateNavigationHandleImplBrowserTest,
|
| + ErrorPageBlockedNavigation) {
|
| + host_resolver()->AddRule("*", "127.0.0.1");
|
| + SetupCrossSiteRedirector(embedded_test_server());
|
| + ASSERT_TRUE(embedded_test_server()->Start());
|
| +
|
| + GURL start_url(embedded_test_server()->GetURL("foo.com", "/title1.html"));
|
| + GURL blocked_url(embedded_test_server()->GetURL("bar.com", "/title2.html"));
|
| +
|
| + {
|
| + NavigationHandleObserver observer(shell()->web_contents(), start_url);
|
| + EXPECT_TRUE(NavigateToURL(shell(), start_url));
|
| + EXPECT_TRUE(observer.has_committed());
|
| + EXPECT_FALSE(observer.is_error());
|
| + }
|
| +
|
| + scoped_refptr<SiteInstance> site_instance =
|
| + shell()->web_contents()->GetMainFrame()->GetSiteInstance();
|
| +
|
| + TestNavigationThrottleInstaller installer(
|
| + shell()->web_contents(), NavigationThrottle::BLOCK_REQUEST,
|
| + NavigationThrottle::PROCEED, NavigationThrottle::PROCEED);
|
| +
|
| + {
|
| + NavigationHandleObserver observer(shell()->web_contents(), blocked_url);
|
| + EXPECT_FALSE(NavigateToURL(shell(), blocked_url));
|
| + EXPECT_TRUE(observer.has_committed());
|
| + EXPECT_TRUE(observer.is_error());
|
| + EXPECT_EQ(site_instance,
|
| + shell()->web_contents()->GetMainFrame()->GetSiteInstance());
|
| + }
|
| +}
|
| +
|
| +// Test to verify that error pages caused by network error or other
|
| +// recoverable error are properly committed in the process for the
|
| +// destination URL.
|
| +IN_PROC_BROWSER_TEST_F(PlzNavigateNavigationHandleImplBrowserTest,
|
| + ErrorPageNetworkError) {
|
| + host_resolver()->AddRule("*", "127.0.0.1");
|
| + SetupCrossSiteRedirector(embedded_test_server());
|
| + ASSERT_TRUE(embedded_test_server()->Start());
|
| +
|
| + GURL start_url(embedded_test_server()->GetURL("foo.com", "/title1.html"));
|
| + GURL error_url(
|
| + net::URLRequestFailedJob::GetMockHttpUrl(net::ERR_CONNECTION_RESET));
|
| + EXPECT_NE(start_url.host(), error_url.host());
|
| + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
|
| + base::Bind(&net::URLRequestFailedJob::AddUrlHandler));
|
| +
|
| + {
|
| + NavigationHandleObserver observer(shell()->web_contents(), start_url);
|
| + EXPECT_TRUE(NavigateToURL(shell(), start_url));
|
| + EXPECT_TRUE(observer.has_committed());
|
| + EXPECT_FALSE(observer.is_error());
|
| + }
|
| +
|
| + scoped_refptr<SiteInstance> site_instance =
|
| + shell()->web_contents()->GetMainFrame()->GetSiteInstance();
|
| + {
|
| + NavigationHandleObserver observer(shell()->web_contents(), error_url);
|
| + EXPECT_FALSE(NavigateToURL(shell(), error_url));
|
| + EXPECT_TRUE(observer.has_committed());
|
| + EXPECT_TRUE(observer.is_error());
|
| + EXPECT_NE(site_instance,
|
| + shell()->web_contents()->GetMainFrame()->GetSiteInstance());
|
| + }
|
| +}
|
| +
|
| } // namespace content
|
|
|