diff --git a/net/dns/host_resolver.h b/net/dns/host_resolver.h
index 8d7229c..bf866d77 100644
--- a/net/dns/host_resolver.h
+++ b/net/dns/host_resolver.h
@@ -56,6 +56,8 @@
 // See mock_host_resolver.h for test implementations.
 class NET_EXPORT HostResolver {
  public:
+  using Host = absl::variant<url::SchemeHostPort, HostPortPair>;
+
   // Handler for an individual host resolution request. Created by
   // HostResolver::CreateRequest().
   class ResolveHostRequest {
diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
index 582f8ff..d9b8f68 100644
--- a/net/dns/host_resolver_manager.cc
+++ b/net/dns/host_resolver_manager.cc
@@ -467,8 +467,7 @@
   return dict;
 }
 
-base::Value ToLogStringValue(
-    const absl::variant<url::SchemeHostPort, HostPortPair>& host) {
+base::Value ToLogStringValue(const HostResolver::Host& host) {
   if (absl::holds_alternative<url::SchemeHostPort>(host))
     return base::Value(absl::get<url::SchemeHostPort>(host).Serialize());
 
@@ -493,8 +492,7 @@
   return base::StringPiece();
 }
 
-base::StringPiece GetHostname(
-    const absl::variant<url::SchemeHostPort, HostPortPair>& host) {
+base::StringPiece GetHostname(const HostResolver::Host& host) {
   if (absl::holds_alternative<url::SchemeHostPort>(host)) {
     base::StringPiece hostname = absl::get<url::SchemeHostPort>(host).host();
     if (hostname.size() >= 2 && hostname.front() == '[' &&
@@ -521,7 +519,7 @@
   return absl::get<std::string>(host);
 }
 
-uint16_t GetPort(const absl::variant<url::SchemeHostPort, HostPortPair>& host) {
+uint16_t GetPort(const HostResolver::Host& host) {
   if (absl::holds_alternative<url::SchemeHostPort>(host)) {
     return absl::get<url::SchemeHostPort>(host).port();
   }
@@ -533,7 +531,7 @@
 // (or the query is explicitly for HTTPS). Otherwise DNS will not give different
 // results for the same hostname.
 absl::variant<url::SchemeHostPort, std::string> CreateHostForJobKey(
-    const absl::variant<url::SchemeHostPort, HostPortPair>& input,
+    const HostResolver::Host& input,
     DnsQueryType query_type) {
   if ((base::FeatureList::IsEnabled(features::kUseDnsHttpsSvcb) ||
        query_type == DnsQueryType::HTTPS) &&
@@ -605,7 +603,7 @@
       public base::LinkNode<HostResolverManager::RequestImpl> {
  public:
   RequestImpl(NetLogWithSource source_net_log,
-              absl::variant<url::SchemeHostPort, HostPortPair> request_host,
+              HostResolver::Host request_host,
               NetworkIsolationKey network_isolation_key,
               absl::optional<ResolveHostParameters> optional_parameters,
               base::WeakPtr<ResolveContext> resolve_context,
@@ -780,9 +778,7 @@
   // NetLog for the source, passed in HostResolver::Resolve.
   const NetLogWithSource& source_net_log() { return source_net_log_; }
 
-  const absl::variant<url::SchemeHostPort, HostPortPair>& request_host() const {
-    return request_host_;
-  }
+  const HostResolver::Host& request_host() const { return request_host_; }
 
   const NetworkIsolationKey& network_isolation_key() const {
     return network_isolation_key_;
@@ -890,7 +886,7 @@
 
   const NetLogWithSource source_net_log_;
 
-  const absl::variant<url::SchemeHostPort, HostPortPair> request_host_;
+  const HostResolver::Host request_host_;
   const NetworkIsolationKey network_isolation_key_;
   ResolveHostParameters parameters_;
   base::WeakPtr<ResolveContext> resolve_context_;
@@ -3215,7 +3211,7 @@
 
 std::unique_ptr<HostResolver::ResolveHostRequest>
 HostResolverManager::CreateRequest(
-    absl::variant<url::SchemeHostPort, HostPortPair> host,
+    HostResolver::Host host,
     NetworkIsolationKey network_isolation_key,
     NetLogWithSource net_log,
     absl::optional<ResolveHostParameters> optional_parameters,
diff --git a/net/dns/host_resolver_manager.h b/net/dns/host_resolver_manager.h
index fa8b5a7..9a20bf8 100644
--- a/net/dns/host_resolver_manager.h
+++ b/net/dns/host_resolver_manager.h
@@ -147,7 +147,7 @@
   // TODO(crbug.com/1022059): Use the HostCache out of the ResolveContext
   // instead of passing it separately.
   std::unique_ptr<HostResolver::ResolveHostRequest> CreateRequest(
-      absl::variant<url::SchemeHostPort, HostPortPair> host,
+      HostResolver::Host host,
       NetworkIsolationKey network_isolation_key,
       NetLogWithSource net_log,
       absl::optional<ResolveHostParameters> optional_parameters,
diff --git a/net/dns/mock_host_resolver.cc b/net/dns/mock_host_resolver.cc
index 75b7e7e..6ac17d0a 100644
--- a/net/dns/mock_host_resolver.cc
+++ b/net/dns/mock_host_resolver.cc
@@ -72,16 +72,14 @@
 // TTL for the successful resolutions. Failures are not cached.
 const unsigned kCacheEntryTTLSeconds = 60;
 
-base::StringPiece GetScheme(
-    const absl::variant<url::SchemeHostPort, HostPortPair>& endpoint) {
+base::StringPiece GetScheme(const HostResolver::Host& endpoint) {
   DCHECK(absl::holds_alternative<url::SchemeHostPort>(endpoint));
   return absl::get<url::SchemeHostPort>(endpoint).scheme();
 }
 
 // In HostPortPair format (no brackets around IPv6 literals) purely for
 // compatibility with IPAddress::AssignFromIPLiteral().
-base::StringPiece GetHostname(
-    const absl::variant<url::SchemeHostPort, HostPortPair>& endpoint) {
+base::StringPiece GetHostname(const HostResolver::Host& endpoint) {
   if (absl::holds_alternative<url::SchemeHostPort>(endpoint)) {
     base::StringPiece hostname =
         absl::get<url::SchemeHostPort>(endpoint).host();
@@ -96,8 +94,7 @@
   return absl::get<HostPortPair>(endpoint).host();
 }
 
-uint16_t GetPort(
-    const absl::variant<url::SchemeHostPort, HostPortPair>& endpoint) {
+uint16_t GetPort(const HostResolver::Host& endpoint) {
   if (absl::holds_alternative<url::SchemeHostPort>(endpoint))
     return absl::get<url::SchemeHostPort>(endpoint).port();
 
@@ -106,7 +103,7 @@
 }
 
 absl::variant<url::SchemeHostPort, std::string> GetCacheHost(
-    const absl::variant<url::SchemeHostPort, HostPortPair>& endpoint) {
+    const HostResolver::Host& endpoint) {
   if (absl::holds_alternative<url::SchemeHostPort>(endpoint))
     return absl::get<url::SchemeHostPort>(endpoint);
 
@@ -136,7 +133,7 @@
 class MockHostResolverBase::RequestImpl
     : public HostResolver::ResolveHostRequest {
  public:
-  RequestImpl(absl::variant<url::SchemeHostPort, HostPortPair> request_endpoint,
+  RequestImpl(Host request_endpoint,
               const NetworkIsolationKey& network_isolation_key,
               const absl::optional<ResolveHostParameters>& optional_parameters,
               base::WeakPtr<MockHostResolverBase> resolver)
@@ -314,10 +311,7 @@
     std::move(callback_).Run(error);
   }
 
-  const absl::variant<url::SchemeHostPort, HostPortPair>& request_endpoint()
-      const {
-    return request_endpoint_;
-  }
+  const Host& request_endpoint() const { return request_endpoint_; }
 
   const NetworkIsolationKey& network_isolation_key() const {
     return network_isolation_key_;
@@ -375,7 +369,7 @@
     return corrected;
   }
 
-  const absl::variant<url::SchemeHostPort, HostPortPair> request_endpoint_;
+  const Host request_endpoint_;
   const NetworkIsolationKey network_isolation_key_;
   const ResolveHostParameters parameters_;
   RequestPriority priority_;
@@ -519,7 +513,7 @@
 
 const MockHostResolverBase::RuleResolver::RuleResult&
 MockHostResolverBase::RuleResolver::Resolve(
-    const absl::variant<url::SchemeHostPort, HostPortPair>& request_endpoint,
+    const Host& request_endpoint,
     DnsQueryTypeSet request_types,
     HostResolverSource request_source) const {
   for (const auto& rule : rules_) {
@@ -749,7 +743,7 @@
 }
 
 int MockHostResolverBase::LoadIntoCache(
-    const absl::variant<url::SchemeHostPort, HostPortPair>& endpoint,
+    const Host& endpoint,
     const NetworkIsolationKey& network_isolation_key,
     const absl::optional<ResolveHostParameters>& optional_parameters) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
@@ -954,7 +948,7 @@
 }
 
 int MockHostResolverBase::ResolveFromIPLiteralOrCache(
-    const absl::variant<url::SchemeHostPort, HostPortPair>& endpoint,
+    const Host& endpoint,
     const NetworkIsolationKey& network_isolation_key,
     DnsQueryType dns_query_type,
     HostResolverFlags flags,
diff --git a/net/dns/mock_host_resolver.h b/net/dns/mock_host_resolver.h
index 7b26026..fb00c7b7 100644
--- a/net/dns/mock_host_resolver.h
+++ b/net/dns/mock_host_resolver.h
@@ -154,11 +154,9 @@
     RuleResolver(RuleResolver&&);
     RuleResolver& operator=(RuleResolver&&);
 
-    const RuleResult& Resolve(
-        const absl::variant<url::SchemeHostPort, HostPortPair>&
-            request_endpoint,
-        DnsQueryTypeSet request_types,
-        HostResolverSource request_source) const;
+    const RuleResult& Resolve(const Host& request_endpoint,
+                              DnsQueryTypeSet request_types,
+                              HostResolverSource request_source) const;
 
     void ClearRules();
 
@@ -286,7 +284,7 @@
   // Preloads the cache with what would currently be the result of a request
   // with the given parameters. Returns the net error of the cached result.
   int LoadIntoCache(
-      const absl::variant<url::SchemeHostPort, HostPortPair>& endpoint,
+      const Host& endpoint,
       const NetworkIsolationKey& network_isolation_key,
       const absl::optional<ResolveHostParameters>& optional_parameters);
 
@@ -402,7 +400,7 @@
   // Resolve as IP or from |cache_| return cached error or
   // DNS_CACHE_MISS if failed.
   int ResolveFromIPLiteralOrCache(
-      const absl::variant<url::SchemeHostPort, HostPortPair>& endpoint,
+      const Host& endpoint,
       const NetworkIsolationKey& network_isolation_key,
       DnsQueryType dns_query_type,
       HostResolverFlags flags,
