Prepare for per-context resolvers with new creation methods

Rewrote the standard HostResolver::Create...Resolver() methods. There
are now two general methods, one that takes a shared HostResolverManager
pointer, and one that creates a "standalone" resolver, matching current
behavior. Took the opportunity to combine the behaviors of CreateDefault
and CreateSystem since C++11 default args are a cleaner way to set
default options (at least for static methods like these).

Added TODOs to all the non-test and non-standalone tools that will need
to be converted to calling the creation with shared manager, but such
conversions are left to subsequent CLs.

TBR=seantopping@chromium.org,eugenebut@chromium.org,dimich@chromium.org,mmenke@chromium.org

Bug: 934402
Change-Id: I126b61db55b61ebd75b7b6f526b31ef0f0a02404
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1531391
Commit-Queue: Eric Orth <ericorth@chromium.org>
Reviewed-by: Paul Jensen <pauljensen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#643385}
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index 38dc13a3..0ec3630 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -153,8 +153,10 @@
   std::string host_mapping_rules =
       command_line.GetSwitchValueASCII(network::switches::kHostResolverRules);
 
-  return net::HostResolver::CreateSystemResolver(net::HostResolver::Options(),
-                                                 net_log, host_mapping_rules);
+  // TODO(crbug.com/934402): Use a shared HostResolverManager instead of a
+  // global HostResolver.
+  return net::HostResolver::CreateStandaloneResolver(
+      net_log, net::HostResolver::Options(), host_mapping_rules);
 }
 
 }  // namespace
diff --git a/chromecast/browser/url_request_context_factory.cc b/chromecast/browser/url_request_context_factory.cc
index be5491a..bd76b7e 100644
--- a/chromecast/browser/url_request_context_factory.cc
+++ b/chromecast/browser/url_request_context_factory.cc
@@ -233,7 +233,9 @@
   if (system_dependencies_initialized_)
     return;
 
-  host_resolver_ = net::HostResolver::CreateDefaultResolver(NULL);
+  // TODO(crbug.com/934402): Use a shared HostResolverManager instead of a
+  // global HostResolver.
+  host_resolver_ = net::HostResolver::CreateStandaloneResolver(nullptr);
   cert_verifier_ = net::CertVerifier::CreateDefault();
   ssl_config_service_.reset(new net::SSLConfigServiceDefaults);
   transport_security_state_.reset(new net::TransportSecurityState());
diff --git a/components/cronet/ios/cronet_environment.mm b/components/cronet/ios/cronet_environment.mm
index ea68391..d3a97e4 100644
--- a/components/cronet/ios/cronet_environment.mm
+++ b/components/cronet/ios/cronet_environment.mm
@@ -359,9 +359,11 @@
   effective_experimental_options_ =
       std::move(config->effective_experimental_options);
 
+  // TODO(crbug.com/934402): Use a shared HostResolverManager instead of a
+  // global HostResolver.
   std::unique_ptr<net::MappedHostResolver> mapped_host_resolver(
       new net::MappedHostResolver(
-          net::HostResolver::CreateDefaultResolver(nullptr)));
+          net::HostResolver::CreateStandaloneResolver(nullptr)));
 
   if (!config->storage_path.empty()) {
     cronet_prefs_manager_ = std::make_unique<CronetPrefsManager>(
diff --git a/components/cronet/stale_host_resolver_unittest.cc b/components/cronet/stale_host_resolver_unittest.cc
index 74db118a..8287e14 100644
--- a/components/cronet/stale_host_resolver_unittest.cc
+++ b/components/cronet/stale_host_resolver_unittest.cc
@@ -176,7 +176,7 @@
   CreateMockInnerResolverWithDnsClient(
       std::unique_ptr<net::DnsClient> dns_client) {
     std::unique_ptr<net::ContextHostResolver> inner_resolver(
-        net::HostResolver::CreateDefaultResolverImpl(nullptr));
+        net::HostResolver::CreateStandaloneContextResolver(nullptr));
 
     net::ProcTaskParams proc_params(mock_proc_.get(), 1u);
     inner_resolver->SetProcParamsForTesting(proc_params);
diff --git a/components/cronet/url_request_context_config.cc b/components/cronet/url_request_context_config.cc
index ccbfd7f..aebd97a 100644
--- a/components/cronet/url_request_context_config.cc
+++ b/components/cronet/url_request_context_config.cc
@@ -672,13 +672,15 @@
       disable_ipv6_on_wifi) {
     CHECK(net_log) << "All DNS-related experiments require NetLog.";
     std::unique_ptr<net::HostResolver> host_resolver;
+    // TODO(crbug.com/934402): Consider using a shared HostResolverManager for
+    // Cronet HostResolvers.
     if (stale_dns_enable) {
       DCHECK(!disable_ipv6_on_wifi);
       host_resolver.reset(new StaleHostResolver(
-          net::HostResolver::CreateDefaultResolverImpl(net_log),
+          net::HostResolver::CreateStandaloneContextResolver(net_log),
           stale_dns_options));
     } else {
-      host_resolver = net::HostResolver::CreateDefaultResolver(net_log);
+      host_resolver = net::HostResolver::CreateStandaloneResolver(net_log);
     }
     if (disable_ipv6_on_wifi)
       host_resolver->SetNoIPv6OnWifi(true);
diff --git a/google_apis/gcm/tools/mcs_probe.cc b/google_apis/gcm/tools/mcs_probe.cc
index d28951a..99794e4 100644
--- a/google_apis/gcm/tools/mcs_probe.cc
+++ b/google_apis/gcm/tools/mcs_probe.cc
@@ -212,7 +212,6 @@
   std::unique_ptr<net::URLRequestContext> url_request_context_;
   net::NetLog net_log_;
   std::unique_ptr<net::FileNetLogObserver> logger_;
-  std::unique_ptr<net::HostResolver> host_resolver_;
   MCSProbeAuthPreferences http_auth_preferences_;
   std::unique_ptr<net::HttpAuthHandlerFactory> http_auth_handler_factory_;
 
@@ -339,13 +338,13 @@
     logger_->StartObserving(&net_log_, capture_mode);
   }
 
-  host_resolver_ = net::HostResolver::CreateDefaultResolver(&net_log_);
   http_auth_handler_factory_ = net::HttpAuthHandlerRegistryFactory::Create(
       &http_auth_preferences_, std::vector<std::string>{net::kBasicAuthScheme});
 
   net::URLRequestContextBuilder builder;
   builder.set_net_log(&net_log_);
-  builder.set_shared_host_resolver(host_resolver_.get());
+  builder.set_host_resolver(
+      net::HostResolver::CreateStandaloneResolver(&net_log_));
   builder.set_shared_http_auth_handler_factory(
       http_auth_handler_factory_.get());
   builder.set_proxy_resolution_service(
diff --git a/ios/components/io_thread/ios_io_thread.mm b/ios/components/io_thread/ios_io_thread.mm
index 2e85b7d..6214e2a 100644
--- a/ios/components/io_thread/ios_io_thread.mm
+++ b/ios/components/io_thread/ios_io_thread.mm
@@ -99,9 +99,10 @@
     net::NetLog* net_log) {
   TRACE_EVENT0("startup", "IOSIOThread::CreateGlobalHostResolver");
 
+  // TODO(crbug.com/934402): Use a shared HostResolverManager instead of a
+  // single global HostResolver for iOS.
   std::unique_ptr<net::HostResolver> global_host_resolver =
-      net::HostResolver::CreateSystemResolver(net::HostResolver::Options(),
-                                              net_log);
+      net::HostResolver::CreateStandaloneResolver(net_log);
 
   return global_host_resolver;
 }
diff --git a/ios/web/shell/shell_url_request_context_getter.mm b/ios/web/shell/shell_url_request_context_getter.mm
index af9fc26..e0ab2d3 100644
--- a/ios/web/shell/shell_url_request_context_getter.mm
+++ b/ios/web/shell/shell_url_request_context_getter.mm
@@ -118,7 +118,7 @@
             new net::HttpServerPropertiesImpl()));
 
     std::unique_ptr<net::HostResolver> host_resolver(
-        net::HostResolver::CreateDefaultResolver(
+        net::HostResolver::CreateStandaloneResolver(
             url_request_context_->net_log()));
     storage_->set_http_auth_handler_factory(
         net::HttpAuthHandlerFactory::CreateDefault());
diff --git a/ios/web_view/internal/web_view_url_request_context_getter.mm b/ios/web_view/internal/web_view_url_request_context_getter.mm
index 98f3bd3..0e6cfb0c 100644
--- a/ios/web_view/internal/web_view_url_request_context_getter.mm
+++ b/ios/web_view/internal/web_view_url_request_context_getter.mm
@@ -122,7 +122,7 @@
             new net::HttpServerPropertiesImpl()));
 
     std::unique_ptr<net::HostResolver> host_resolver(
-        net::HostResolver::CreateDefaultResolver(
+        net::HostResolver::CreateStandaloneResolver(
             url_request_context_->net_log()));
     storage_->set_http_auth_handler_factory(
         net::HttpAuthHandlerFactory::CreateDefault());
diff --git a/net/dns/context_host_resolver.cc b/net/dns/context_host_resolver.cc
index 7802c13..7bf56d4 100644
--- a/net/dns/context_host_resolver.cc
+++ b/net/dns/context_host_resolver.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/logging.h"
 #include "base/strings/string_piece.h"
 #include "base/time/tick_clock.h"
 #include "net/dns/dns_client.h"
@@ -15,94 +16,104 @@
 
 namespace net {
 
-ContextHostResolver::ContextHostResolver(
-    std::unique_ptr<HostResolverManager> impl)
-    : impl_(std::move(impl)) {}
+ContextHostResolver::ContextHostResolver(HostResolverManager* manager)
+    : manager_(manager) {
+  DCHECK(manager_);
+}
 
-ContextHostResolver::~ContextHostResolver() = default;
+ContextHostResolver::ContextHostResolver(
+    std::unique_ptr<HostResolverManager> owned_manager)
+    : manager_(owned_manager.get()), owned_manager_(std::move(owned_manager)) {
+  DCHECK(manager_);
+}
+
+ContextHostResolver::~ContextHostResolver() {
+  if (owned_manager_)
+    DCHECK_EQ(owned_manager_.get(), manager_);
+}
 
 std::unique_ptr<HostResolver::ResolveHostRequest>
 ContextHostResolver::CreateRequest(
     const HostPortPair& host,
     const NetLogWithSource& source_net_log,
     const base::Optional<ResolveHostParameters>& optional_parameters) {
-  return impl_->CreateRequest(host, source_net_log, optional_parameters);
+  return manager_->CreateRequest(host, source_net_log, optional_parameters);
 }
 
 std::unique_ptr<HostResolver::MdnsListener>
 ContextHostResolver::CreateMdnsListener(const HostPortPair& host,
                                         DnsQueryType query_type) {
-  return impl_->CreateMdnsListener(host, query_type);
+  return manager_->CreateMdnsListener(host, query_type);
 }
 
 void ContextHostResolver::SetDnsClientEnabled(bool enabled) {
-  impl_->SetDnsClientEnabled(enabled);
+  manager_->SetDnsClientEnabled(enabled);
 }
 
 HostCache* ContextHostResolver::GetHostCache() {
-  return impl_->GetHostCache();
+  return manager_->GetHostCache();
 }
 
 bool ContextHostResolver::HasCached(base::StringPiece hostname,
                                     HostCache::Entry::Source* source_out,
                                     HostCache::EntryStaleness* stale_out,
                                     bool* secure_out) const {
-  return impl_->HasCached(hostname, source_out, stale_out, secure_out);
+  return manager_->HasCached(hostname, source_out, stale_out, secure_out);
 }
 
 std::unique_ptr<base::Value> ContextHostResolver::GetDnsConfigAsValue() const {
-  return impl_->GetDnsConfigAsValue();
+  return manager_->GetDnsConfigAsValue();
 }
 
 void ContextHostResolver::SetNoIPv6OnWifi(bool no_ipv6_on_wifi) {
-  impl_->SetNoIPv6OnWifi(no_ipv6_on_wifi);
+  manager_->SetNoIPv6OnWifi(no_ipv6_on_wifi);
 }
 
 bool ContextHostResolver::GetNoIPv6OnWifi() {
-  return impl_->GetNoIPv6OnWifi();
+  return manager_->GetNoIPv6OnWifi();
 }
 
 void ContextHostResolver::SetDnsConfigOverrides(
     const DnsConfigOverrides& overrides) {
-  impl_->SetDnsConfigOverrides(overrides);
+  manager_->SetDnsConfigOverrides(overrides);
 }
 
 void ContextHostResolver::SetRequestContext(
     URLRequestContext* request_context) {
-  impl_->SetRequestContext(request_context);
+  manager_->SetRequestContext(request_context);
 }
 
 const std::vector<DnsConfig::DnsOverHttpsServerConfig>*
 ContextHostResolver::GetDnsOverHttpsServersForTesting() const {
-  return impl_->GetDnsOverHttpsServersForTesting();
+  return manager_->GetDnsOverHttpsServersForTesting();
 }
 
 size_t ContextHostResolver::LastRestoredCacheSize() const {
-  return impl_->LastRestoredCacheSize();
+  return manager_->LastRestoredCacheSize();
 }
 
 size_t ContextHostResolver::CacheSize() const {
-  return impl_->CacheSize();
+  return manager_->CacheSize();
 }
 
 void ContextHostResolver::SetProcParamsForTesting(
     const ProcTaskParams& proc_params) {
-  impl_->set_proc_params_for_test(proc_params);
+  manager_->set_proc_params_for_test(proc_params);
 }
 
 void ContextHostResolver::SetDnsClientForTesting(
     std::unique_ptr<DnsClient> dns_client) {
-  impl_->SetDnsClient(std::move(dns_client));
+  manager_->SetDnsClient(std::move(dns_client));
 }
 
 void ContextHostResolver::SetBaseDnsConfigForTesting(
     const DnsConfig& base_config) {
-  impl_->SetBaseDnsConfigForTesting(base_config);
+  manager_->SetBaseDnsConfigForTesting(base_config);
 }
 
 void ContextHostResolver::SetTickClockForTesting(
     const base::TickClock* tick_clock) {
-  impl_->SetTickClockForTesting(tick_clock);
+  manager_->SetTickClockForTesting(tick_clock);
 }
 
 }  // namespace net
diff --git a/net/dns/context_host_resolver.h b/net/dns/context_host_resolver.h
index fddfaa2..8bc4535 100644
--- a/net/dns/context_host_resolver.h
+++ b/net/dns/context_host_resolver.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <vector>
 
+#include "base/macros.h"
 #include "net/base/net_export.h"
 #include "net/dns/host_resolver.h"
 
@@ -33,8 +34,11 @@
 class NET_EXPORT ContextHostResolver : public HostResolver {
  public:
   // Creates a ContextHostResolver that forwards all of its requests through
-  // |impl|.
-  explicit ContextHostResolver(std::unique_ptr<HostResolverManager> impl);
+  // |manager|.
+  explicit ContextHostResolver(HostResolverManager* manager);
+  // Same except the created resolver will own its own HostResolverManager.
+  explicit ContextHostResolver(
+      std::unique_ptr<HostResolverManager> owned_manager);
   ~ContextHostResolver() override;
 
   // HostResolver methods:
@@ -72,9 +76,10 @@
   void SetTickClockForTesting(const base::TickClock* tick_clock);
 
  private:
-  // TODO(crbug.com/934402): Make this a non-owned pointer to the singleton
-  // resolver.
-  std::unique_ptr<HostResolverManager> impl_;
+  HostResolverManager* const manager_;
+  std::unique_ptr<HostResolverManager> owned_manager_;
+
+  DISALLOW_COPY_AND_ASSIGN(ContextHostResolver);
 };
 
 }  // namespace net
diff --git a/net/dns/host_resolver.cc b/net/dns/host_resolver.cc
index 4b9a108..9db6e63 100644
--- a/net/dns/host_resolver.cc
+++ b/net/dns/host_resolver.cc
@@ -97,9 +97,17 @@
       enable_caching(true) {}
 
 std::unique_ptr<HostResolver> HostResolver::Factory::CreateResolver(
+    HostResolverManager* manager,
+    base::StringPiece host_mapping_rules) {
+  return HostResolver::CreateResolver(manager, host_mapping_rules);
+}
+
+std::unique_ptr<HostResolver> HostResolver::Factory::CreateStandaloneResolver(
+    NetLog* net_log,
     const Options& options,
-    NetLog* net_log) {
-  return CreateSystemResolver(options, net_log);
+    base::StringPiece host_mapping_rules) {
+  return HostResolver::CreateStandaloneResolver(net_log, options,
+                                                host_mapping_rules);
 }
 
 HostResolver::~HostResolver() = default;
@@ -143,12 +151,12 @@
 }
 
 // static
-std::unique_ptr<HostResolver> HostResolver::CreateSystemResolver(
-    const Options& options,
-    NetLog* net_log,
+std::unique_ptr<HostResolver> HostResolver::CreateResolver(
+    HostResolverManager* manager,
     base::StringPiece host_mapping_rules) {
-  std::unique_ptr<ContextHostResolver> resolver =
-      CreateSystemResolverImpl(options, net_log);
+  DCHECK(manager);
+
+  auto resolver = std::make_unique<ContextHostResolver>(manager);
 
   if (host_mapping_rules.empty())
     return resolver;
@@ -159,23 +167,29 @@
 }
 
 // static
-std::unique_ptr<ContextHostResolver> HostResolver::CreateSystemResolverImpl(
-    const Options& options,
-    NetLog* net_log) {
+std::unique_ptr<HostResolver> HostResolver::CreateStandaloneResolver(
+    NetLog* net_log,
+    base::Optional<Options> options,
+    base::StringPiece host_mapping_rules) {
+  auto resolver = std::make_unique<ContextHostResolver>(
+      std::make_unique<HostResolverManager>(
+          std::move(options).value_or(Options()), net_log));
+
+  if (host_mapping_rules.empty())
+    return resolver;
+  auto remapped_resolver =
+      std::make_unique<MappedHostResolver>(std::move(resolver));
+  remapped_resolver->SetRulesFromString(host_mapping_rules);
+  return remapped_resolver;
+}
+
+// static
+std::unique_ptr<ContextHostResolver>
+HostResolver::CreateStandaloneContextResolver(NetLog* net_log,
+                                              base::Optional<Options> options) {
   return std::make_unique<ContextHostResolver>(
-      std::make_unique<HostResolverManager>(options, net_log));
-}
-
-// static
-std::unique_ptr<HostResolver> HostResolver::CreateDefaultResolver(
-    NetLog* net_log) {
-  return CreateSystemResolver(Options(), net_log);
-}
-
-// static
-std::unique_ptr<ContextHostResolver> HostResolver::CreateDefaultResolverImpl(
-    NetLog* net_log) {
-  return CreateSystemResolverImpl(Options(), net_log);
+      std::make_unique<HostResolverManager>(
+          std::move(options).value_or(Options()), net_log));
 }
 
 // static
diff --git a/net/dns/host_resolver.h b/net/dns/host_resolver.h
index f7927fdf..609d815 100644
--- a/net/dns/host_resolver.h
+++ b/net/dns/host_resolver.h
@@ -12,6 +12,7 @@
 #include <string>
 #include <vector>
 
+#include "base/macros.h"
 #include "base/optional.h"
 #include "base/strings/string_piece.h"
 #include "net/base/address_family.h"
@@ -34,6 +35,7 @@
 class ContextHostResolver;
 class DnsClient;
 struct DnsConfigOverrides;
+class HostResolverManager;
 class NetLog;
 class NetLogWithSource;
 class URLRequestContext;
@@ -133,9 +135,16 @@
    public:
     virtual ~Factory() = default;
 
-    // See HostResolver::CreateSystemResolver.
-    virtual std::unique_ptr<HostResolver> CreateResolver(const Options& options,
-                                                         NetLog* net_log);
+    // See HostResolver::CreateResolver.
+    virtual std::unique_ptr<HostResolver> CreateResolver(
+        HostResolverManager* manager,
+        base::StringPiece host_mapping_rules);
+
+    // See HostResolver::CreateStandaloneResolver.
+    virtual std::unique_ptr<HostResolver> CreateStandaloneResolver(
+        NetLog* net_log,
+        const Options& options,
+        base::StringPiece host_mapping_rules);
   };
 
   // Parameter-grouping struct for additional optional parameters for
@@ -293,28 +302,29 @@
   virtual const std::vector<DnsConfig::DnsOverHttpsServerConfig>*
   GetDnsOverHttpsServersForTesting() const;
 
-  // Creates a HostResolver implementation that queries the underlying system.
-  // (Except if a unit-test has changed the global HostResolverProc using
-  // ScopedHostResolverProc to intercept requests to the system).
+  // Creates a new HostResolver. |manager| must outlive the returned resolver.
   //
   // If |mapping_rules| is non-empty, the mapping rules will be applied to
   // requests.  See MappedHostResolver for details.
-  static std::unique_ptr<HostResolver> CreateSystemResolver(
-      const Options& options,
+  static std::unique_ptr<HostResolver> CreateResolver(
+      HostResolverManager* manager,
+      base::StringPiece host_mapping_rules = "");
+
+  // Creates a HostResolver independent of any global HostResolverManager. Only
+  // for tests and standalone tools not part of the browser.
+  //
+  // If |mapping_rules| is non-empty, the mapping rules will be applied to
+  // requests.  See MappedHostResolver for details.
+  static std::unique_ptr<HostResolver> CreateStandaloneResolver(
       NetLog* net_log,
+      base::Optional<Options> options = base::nullopt,
       base::StringPiece host_mapping_rules = "");
   // Same, but explicitly returns the implementing ContextHostResolver. Only
-  // used by tests.
-  static std::unique_ptr<ContextHostResolver> CreateSystemResolverImpl(
-      const Options& options,
-      NetLog* net_log);
-
-  // As above, but uses default parameters.
-  static std::unique_ptr<HostResolver> CreateDefaultResolver(NetLog* net_log);
-  // Same, but explicitly returns the implementing ContextHostResolver. Only
-  // used by tests and by StaleHostResolver in Cronet.
-  static std::unique_ptr<ContextHostResolver> CreateDefaultResolverImpl(
-      NetLog* net_log);
+  // used by tests and by StaleHostResolver in Cronet. No mapping rules can be
+  // applied because doing so requires wrapping the ContextHostResolver.
+  static std::unique_ptr<ContextHostResolver> CreateStandaloneContextResolver(
+      NetLog* net_log,
+      base::Optional<Options> options = base::nullopt);
 
   // Helpers for interacting with HostCache and ProcResolver.
   static AddressFamily DnsQueryTypeToAddressFamily(DnsQueryType query_type);
diff --git a/net/nqe/network_quality_estimator_util_unittest.cc b/net/nqe/network_quality_estimator_util_unittest.cc
index 83aeb01..2e5453e 100644
--- a/net/nqe/network_quality_estimator_util_unittest.cc
+++ b/net/nqe/network_quality_estimator_util_unittest.cc
@@ -122,7 +122,8 @@
   // Use actual HostResolver since MockCachingHostResolver does not determine
   // the correct answer for localhosts.
   std::unique_ptr<ContextHostResolver> resolver =
-      HostResolver::CreateDefaultResolverImpl(net_log_ptr->bound().net_log());
+      HostResolver::CreateStandaloneContextResolver(
+          net_log_ptr->bound().net_log());
 
   scoped_refptr<net::RuleBasedHostResolverProc> rules(
       new net::RuleBasedHostResolverProc(nullptr));
diff --git a/net/socket/socks_client_socket_unittest.cc b/net/socket/socks_client_socket_unittest.cc
index 13838e8..099e9b6 100644
--- a/net/socket/socks_client_socket_unittest.cc
+++ b/net/socket/socks_client_socket_unittest.cc
@@ -421,7 +421,7 @@
   const char kHostName[] = "::1";
 
   std::unique_ptr<HostResolver> host_resolver(
-      HostResolver::CreateSystemResolver(HostResolver::Options(), nullptr));
+      HostResolver::CreateStandaloneResolver(nullptr));
 
   user_sock_ = BuildMockSocket(base::span<MockRead>(), base::span<MockWrite>(),
                                host_resolver.get(), kHostName, 80, nullptr);
diff --git a/net/test/spawned_test_server/base_test_server.cc b/net/test/spawned_test_server/base_test_server.cc
index 1236b8b..4636590 100644
--- a/net/test/spawned_test_server/base_test_server.cc
+++ b/net/test/spawned_test_server/base_test_server.cc
@@ -354,7 +354,7 @@
   DCHECK(address_list);
 
   std::unique_ptr<HostResolver> resolver(
-      HostResolver::CreateDefaultResolver(nullptr));
+      HostResolver::CreateStandaloneResolver(nullptr));
 
   // Limit the lookup to IPv4 (DnsQueryType::A). When started with the default
   // address of kLocalhost, testserver.py only supports IPv4.
diff --git a/net/tools/quic/synchronous_host_resolver.cc b/net/tools/quic/synchronous_host_resolver.cc
index 8bd0b9f..43e5847 100644
--- a/net/tools/quic/synchronous_host_resolver.cc
+++ b/net/tools/quic/synchronous_host_resolver.cc
@@ -64,7 +64,7 @@
   options.max_concurrent_resolves = 6;
   options.max_retry_attempts = 3u;
   std::unique_ptr<net::HostResolver> resolver =
-      net::HostResolver::CreateSystemResolver(options, &net_log);
+      net::HostResolver::CreateStandaloneResolver(&net_log, options);
 
   HostPortPair host_port_pair(host_, 80);
   std::unique_ptr<net::HostResolver::ResolveHostRequest> request =
diff --git a/net/url_request/http_with_dns_over_https_unittest.cc b/net/url_request/http_with_dns_over_https_unittest.cc
index e0149eb..6e47d6b 100644
--- a/net/url_request/http_with_dns_over_https_unittest.cc
+++ b/net/url_request/http_with_dns_over_https_unittest.cc
@@ -8,6 +8,7 @@
 #include "net/dns/dns_client.h"
 #include "net/dns/dns_config.h"
 #include "net/dns/dns_transaction.h"
+#include "net/dns/host_resolver.h"
 #include "net/dns/host_resolver_proc.h"
 #include "net/http/http_stream_factory_test_util.h"
 #include "net/log/net_log.h"
@@ -48,7 +49,7 @@
 class HttpWithDnsOverHttpsTest : public TestWithScopedTaskEnvironment {
  public:
   HttpWithDnsOverHttpsTest()
-      : resolver_(HostResolver::CreateDefaultResolverImpl(nullptr)),
+      : resolver_(HostResolver::CreateStandaloneContextResolver(nullptr)),
         request_context_(true),
         doh_server_(EmbeddedTestServer::Type::TYPE_HTTPS),
         test_server_(EmbeddedTestServer::Type::TYPE_HTTPS),
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc
index eff048b..daa34f92 100644
--- a/net/url_request/url_request_context_builder.cc
+++ b/net/url_request/url_request_context_builder.cc
@@ -424,11 +424,15 @@
     DCHECK(host_mapping_rules_.empty());
     storage->set_host_resolver(std::move(host_resolver_));
   } else if (shared_host_resolver_) {
+    // TODO(crbug.com/934402): Use a shared HostResolverManager instead of a
+    // global HostResolver.
     DCHECK(host_mapping_rules_.empty());
     context->set_host_resolver(shared_host_resolver_);
   } else {
-    storage->set_host_resolver(HostResolver::CreateSystemResolver(
-        HostResolver::Options(), context->net_log(), host_mapping_rules_));
+    // TODO(crbug.com/934402): Make setting a resolver or manager required, so
+    // the builder should never have to create a standalone resolver.
+    storage->set_host_resolver(HostResolver::CreateStandaloneResolver(
+        context->net_log(), HostResolver::Options(), host_mapping_rules_));
   }
 
   if (ssl_config_service_) {
diff --git a/net/url_request/url_request_context_builder.h b/net/url_request/url_request_context_builder.h
index daf2595..3dc5883 100644
--- a/net/url_request/url_request_context_builder.h
+++ b/net/url_request/url_request_context_builder.h
@@ -237,7 +237,8 @@
   // set their own NetLog::Observers instead.
   void set_net_log(NetLog* net_log) { net_log_ = net_log; }
 
-  // By default host_resolver is constructed with CreateDefaultResolver.
+  // By default host_resolver is constructed with
+  // HostResolver::CreateStandaloneResolver().
   void set_host_resolver(std::unique_ptr<HostResolver> host_resolver);
   // If set to non-empty, the mapping rules will be applied to requests to the
   // created host resolver. See MappedHostResolver for details. Should not be
diff --git a/services/network/host_resolver_unittest.cc b/services/network/host_resolver_unittest.cc
index 4b920d05..4743d5b 100644
--- a/services/network/host_resolver_unittest.cc
+++ b/services/network/host_resolver_unittest.cc
@@ -249,7 +249,7 @@
 TEST_F(HostResolverTest, DnsQueryType) {
   net::NetLog net_log;
   std::unique_ptr<net::HostResolver> inner_resolver =
-      net::HostResolver::CreateDefaultResolver(&net_log);
+      net::HostResolver::CreateStandaloneResolver(&net_log);
 
   HostResolver resolver(inner_resolver.get(), &net_log);
 
@@ -686,7 +686,7 @@
 TEST_F(HostResolverTest, NoOptionalParameters) {
   net::NetLog net_log;
   std::unique_ptr<net::HostResolver> inner_resolver =
-      net::HostResolver::CreateDefaultResolver(&net_log);
+      net::HostResolver::CreateStandaloneResolver(&net_log);
 
   HostResolver resolver(inner_resolver.get(), &net_log);
 
@@ -711,7 +711,7 @@
 TEST_F(HostResolverTest, NoControlHandle) {
   net::NetLog net_log;
   std::unique_ptr<net::HostResolver> inner_resolver =
-      net::HostResolver::CreateDefaultResolver(&net_log);
+      net::HostResolver::CreateStandaloneResolver(&net_log);
 
   HostResolver resolver(inner_resolver.get(), &net_log);
 
@@ -739,7 +739,7 @@
 TEST_F(HostResolverTest, CloseControlHandle) {
   net::NetLog net_log;
   std::unique_ptr<net::HostResolver> inner_resolver =
-      net::HostResolver::CreateDefaultResolver(&net_log);
+      net::HostResolver::CreateStandaloneResolver(&net_log);
 
   HostResolver resolver(inner_resolver.get(), &net_log);
 
@@ -808,7 +808,7 @@
 TEST_F(HostResolverTest, Cancellation_SubsequentRequest) {
   net::NetLog net_log;
   std::unique_ptr<net::HostResolver> inner_resolver =
-      net::HostResolver::CreateDefaultResolver(&net_log);
+      net::HostResolver::CreateStandaloneResolver(&net_log);
 
   HostResolver resolver(inner_resolver.get(), &net_log);
 
@@ -927,7 +927,7 @@
 TEST_F(HostResolverTest, CloseClient_SubsequentRequest) {
   net::NetLog net_log;
   std::unique_ptr<net::HostResolver> inner_resolver =
-      net::HostResolver::CreateDefaultResolver(&net_log);
+      net::HostResolver::CreateStandaloneResolver(&net_log);
 
   HostResolver resolver(inner_resolver.get(), &net_log);
 
@@ -972,7 +972,7 @@
 
   net::NetLog net_log;
   std::unique_ptr<net::HostResolver> inner_resolver =
-      net::HostResolver::CreateDefaultResolver(&net_log);
+      net::HostResolver::CreateStandaloneResolver(&net_log);
 
   HostResolver resolver(mojo::MakeRequest(&resolver_ptr),
                         std::move(shutdown_callback), inner_resolver.get(),
@@ -1058,7 +1058,7 @@
 
   net::NetLog net_log;
   std::unique_ptr<net::HostResolver> inner_resolver =
-      net::HostResolver::CreateDefaultResolver(&net_log);
+      net::HostResolver::CreateStandaloneResolver(&net_log);
 
   HostResolver resolver(mojo::MakeRequest(&resolver_ptr),
                         std::move(shutdown_callback), inner_resolver.get(),
@@ -1101,7 +1101,7 @@
 TEST_F(HostResolverTest, IsSpeculative) {
   net::NetLog net_log;
   std::unique_ptr<net::HostResolver> inner_resolver =
-      net::HostResolver::CreateDefaultResolver(&net_log);
+      net::HostResolver::CreateStandaloneResolver(&net_log);
 
   HostResolver resolver(inner_resolver.get(), &net_log);
 
@@ -1146,7 +1146,7 @@
 
   net::NetLog net_log;
   std::unique_ptr<net::ContextHostResolver> inner_resolver =
-      net::HostResolver::CreateDefaultResolverImpl(&net_log);
+      net::HostResolver::CreateStandaloneContextResolver(&net_log);
   inner_resolver->SetDnsClientForTesting(std::move(dns_client));
   inner_resolver->SetBaseDnsConfigForTesting(CreateValidDnsConfig());
 
@@ -1184,7 +1184,7 @@
 
   net::NetLog net_log;
   std::unique_ptr<net::ContextHostResolver> inner_resolver =
-      net::HostResolver::CreateDefaultResolverImpl(&net_log);
+      net::HostResolver::CreateStandaloneContextResolver(&net_log);
   inner_resolver->SetDnsClientForTesting(std::move(dns_client));
   inner_resolver->SetBaseDnsConfigForTesting(CreateValidDnsConfig());
 
diff --git a/services/network/network_context.cc b/services/network/network_context.cc
index 50b61aa..b882aa8 100644
--- a/services/network/network_context.cc
+++ b/services/network/network_context.cc
@@ -1354,8 +1354,9 @@
     net::HostResolver::Options options;
     options.enable_caching = false;
 
-    private_internal_resolver = host_resolver_factory_->CreateResolver(
-        options, url_request_context_->net_log());
+    private_internal_resolver =
+        host_resolver_factory_->CreateStandaloneResolver(
+            url_request_context_->net_log(), options, "");
     internal_resolver = private_internal_resolver.get();
 
     internal_resolver->SetDnsClientEnabled(true);
diff --git a/services/network/network_context_unittest.cc b/services/network/network_context_unittest.cc
index 3965fb0..b5a9bd81 100644
--- a/services/network/network_context_unittest.cc
+++ b/services/network/network_context_unittest.cc
@@ -63,6 +63,7 @@
 #include "net/disk_cache/disk_cache.h"
 #include "net/dns/context_host_resolver.h"
 #include "net/dns/dns_test_util.h"
+#include "net/dns/host_resolver_manager.h"
 #include "net/dns/host_resolver_source.h"
 #include "net/dns/mock_host_resolver.h"
 #include "net/dns/public/dns_query_type.h"
@@ -2910,10 +2911,19 @@
   }
 
   std::unique_ptr<net::HostResolver> CreateResolver(
+      net::HostResolverManager* manager,
+      base::StringPiece host_mapping_rules) override {
+    NOTIMPLEMENTED();
+    return nullptr;
+  }
+
+  std::unique_ptr<net::HostResolver> CreateStandaloneResolver(
+      net::NetLog* net_log,
       const net::HostResolver::Options& options,
-      net::NetLog* net_log) override {
+      base::StringPiece host_mapping_rules) override {
+    DCHECK(host_mapping_rules.empty());
     std::unique_ptr<net::ContextHostResolver> resolver =
-        net::HostResolver::CreateSystemResolverImpl(options, net_log);
+        net::HostResolver::CreateStandaloneContextResolver(net_log, options);
     resolvers_.push_back(resolver.get());
     return resolver;
   }
diff --git a/services/network/network_service.cc b/services/network/network_service.cc
index ef47b1fa..800b89d 100644
--- a/services/network/network_service.cc
+++ b/services/network/network_service.cc
@@ -114,8 +114,10 @@
   std::string host_mapping_rules =
       command_line.GetSwitchValueASCII(switches::kHostResolverRules);
 
-  return net::HostResolver::CreateSystemResolver(net::HostResolver::Options(),
-                                                 net_log, host_mapping_rules);
+  // TODO(crbug.com/934402): Use a shared HostResolverManager instead of a
+  // global HostResolver.
+  return net::HostResolver::CreateStandaloneResolver(
+      net_log, net::HostResolver::Options(), host_mapping_rules);
 }
 
 // This is duplicated in content/browser/loader/resource_dispatcher_host_impl.cc