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

Unified Diff: content/browser/site_per_process_browsertest.cc

Issue 2847003003: Fix SitePerProcessBrowserTest.ProcessTransferAfterError to not requiring modifying the mock HostRes… (Closed)
Patch Set: remove unnecessary include 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
Index: content/browser/site_per_process_browsertest.cc
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc
index fdf7ab570a71aca6ab23acee05238327fdda4a6a..d8caf50f325b232bfaaf66b1f2dfcf25f8361031 100644
--- a/content/browser/site_per_process_browsertest.cc
+++ b/content/browser/site_per_process_browsertest.cc
@@ -38,6 +38,7 @@
#include "content/browser/frame_host/render_frame_proxy_host.h"
#include "content/browser/frame_host/render_widget_host_view_child_frame.h"
#include "content/browser/gpu/compositor_util.h"
+#include "content/browser/loader/navigation_url_loader_network_service.h"
#include "content/browser/loader/resource_dispatcher_host_impl.h"
#include "content/browser/renderer_host/input/input_router_impl.h"
#include "content/browser/renderer_host/input/synthetic_tap_gesture.h"
@@ -71,6 +72,7 @@
#include "content/test/content_browser_test_utils_internal.h"
#include "ipc/ipc.mojom.h"
#include "ipc/ipc_security_test_util.h"
+#include "mojo/public/cpp/bindings/strong_binding.h"
#include "net/dns/mock_host_resolver.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/test/embedded_test_server/http_request.h"
@@ -2395,6 +2397,40 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NavigateRemoteAfterError) {
}
}
+namespace {
+class FailingURLLoaderImpl : public mojom::URLLoader {
+ public:
+ explicit FailingURLLoaderImpl(mojom::URLLoaderClientPtr client) {
+ ResourceRequestCompletionStatus status;
+ status.error_code = net::ERR_NOT_IMPLEMENTED;
+ client->OnComplete(status);
+ }
+
+ void FollowRedirect() override {}
+ void SetPriority(net::RequestPriority priority,
+ int32_t intra_priority_value) override {}
+};
+
+class FailingLoadFactory : public mojom::URLLoaderFactory {
+ public:
+ FailingLoadFactory() {}
+ ~FailingLoadFactory() override {}
+
+ void CreateLoaderAndStart(mojom::URLLoaderAssociatedRequest loader,
+ int32_t routing_id,
+ int32_t request_id,
+ uint32_t options,
+ const ResourceRequest& request,
+ mojom::URLLoaderClientPtr client) override {
+ new FailingURLLoaderImpl(std::move(client));
+ }
+ void SyncLoad(int32_t routing_id,
+ int32_t request_id,
+ const ResourceRequest& request,
+ SyncLoadCallback callback) override {}
+};
+}
+
// Ensure that a cross-site page ends up in the correct process when it
// successfully loads after earlier encountering a network error for it.
// See https://crbug.com/560511.
@@ -2413,7 +2449,18 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ProcessTransferAfterError) {
// Disable host resolution in the test server and try to navigate the subframe
// cross-site, which will lead to a committed net error.
GURL url_b = embedded_test_server()->GetURL("b.com", "/title3.html");
- host_resolver()->ClearRules();
+ bool network_service = base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableNetworkService);
+ mojom::URLLoaderFactoryPtr failing_factory;
+ mojo::MakeStrongBinding(base::MakeUnique<FailingLoadFactory>(),
+ mojo::MakeRequest(&failing_factory));
+ if (network_service) {
+ NavigationURLLoaderNetworkService::OverrideURLLoaderFactoryForTesting(
+ std::move(failing_factory));
+ } else {
+ host_resolver()->ClearRules();
+ }
+
TestNavigationObserver observer(shell()->web_contents());
NavigateIframeToURL(shell()->web_contents(), "child-0", url_b);
EXPECT_FALSE(observer.last_navigation_succeeded());
@@ -2446,7 +2493,9 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ProcessTransferAfterError) {
EXPECT_EQ("null", child->current_origin().Serialize());
// Try again after re-enabling host resolution.
- host_resolver()->AddRule("*", "127.0.0.1");
+ if (!network_service)
+ host_resolver()->AddRule("*", "127.0.0.1");
Charlie Reis 2017/04/28 18:08:14 Shouldn't there be an else branch here? How would
jam 2017/04/28 18:09:53 The URLLoaderFactory set above is only used for on
Charlie Reis 2017/04/28 18:14:52 Oh, ok. That seems a bit non-obvious, but glad it
jam 2017/04/28 19:25:24 This was documented in the test method; but point
+
NavigateIframeToURL(shell()->web_contents(), "child-0", url_b);
EXPECT_TRUE(observer.last_navigation_succeeded());
EXPECT_EQ(url_b, observer.last_navigation_url());
@@ -9654,7 +9703,6 @@ class RequestDelayingSitePerProcessBrowserTest
// Must be called after any calls to SetDelayedRequestsForPath.
void SetUpEmbeddedTestServer() {
- host_resolver()->AddRule("*", "127.0.0.1");
SetupCrossSiteRedirector(test_server_.get());
test_server_->RegisterRequestHandler(base::Bind(
&RequestDelayingSitePerProcessBrowserTest::HandleMockResource,
« no previous file with comments | « content/browser/loader/navigation_url_loader_network_service.cc ('k') | content/public/test/browser_test_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698