summaryrefslogtreecommitdiff
path: root/chromium/net/dns/mock_host_resolver.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/dns/mock_host_resolver.cc')
-rw-r--r--chromium/net/dns/mock_host_resolver.cc147
1 files changed, 65 insertions, 82 deletions
diff --git a/chromium/net/dns/mock_host_resolver.cc b/chromium/net/dns/mock_host_resolver.cc
index 3f662a4c4b3..368a620416b 100644
--- a/chromium/net/dns/mock_host_resolver.cc
+++ b/chromium/net/dns/mock_host_resolver.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -21,7 +21,6 @@
#include "base/memory/ref_counted.h"
#include "base/no_destructor.h"
#include "base/notreached.h"
-#include "base/stl_util.h"
#include "base/strings/pattern.h"
#include "base/strings/string_piece.h"
#include "base/strings/string_split.h"
@@ -32,6 +31,7 @@
#include "base/time/default_tick_clock.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
+#include "base/types/optional_util.h"
#include "build/build_config.h"
#include "net/base/address_family.h"
#include "net/base/address_list.h"
@@ -40,16 +40,17 @@
#include "net/base/ip_endpoint.h"
#include "net/base/net_errors.h"
#include "net/base/net_export.h"
-#include "net/base/network_isolation_key.h"
+#include "net/base/network_anonymization_key.h"
#include "net/base/test_completion_callback.h"
#include "net/dns/dns_alias_utility.h"
#include "net/dns/dns_util.h"
#include "net/dns/host_cache.h"
#include "net/dns/host_resolver.h"
#include "net/dns/host_resolver_manager.h"
-#include "net/dns/host_resolver_results.h"
+#include "net/dns/host_resolver_system_task.h"
#include "net/dns/https_record_rdata.h"
#include "net/dns/public/dns_query_type.h"
+#include "net/dns/public/host_resolver_results.h"
#include "net/dns/public/host_resolver_source.h"
#include "net/dns/public/mdns_listener_update_type.h"
#include "net/dns/public/resolve_error_info.h"
@@ -73,43 +74,13 @@ const unsigned kMaxCacheEntries = 100;
// TTL for the successful resolutions. Failures are not cached.
const unsigned kCacheEntryTTLSeconds = 60;
-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 HostResolver::Host& endpoint) {
- if (absl::holds_alternative<url::SchemeHostPort>(endpoint)) {
- base::StringPiece hostname =
- absl::get<url::SchemeHostPort>(endpoint).host();
- if (hostname.size() >= 2 && hostname.front() == '[' &&
- hostname.back() == ']') {
- return hostname.substr(1, hostname.size() - 2);
- }
- return hostname;
- }
-
- DCHECK(absl::holds_alternative<HostPortPair>(endpoint));
- return absl::get<HostPortPair>(endpoint).host();
-}
-
-uint16_t GetPort(const HostResolver::Host& endpoint) {
- if (absl::holds_alternative<url::SchemeHostPort>(endpoint))
- return absl::get<url::SchemeHostPort>(endpoint).port();
-
- DCHECK(absl::holds_alternative<HostPortPair>(endpoint));
- return absl::get<HostPortPair>(endpoint).port();
-}
-
absl::variant<url::SchemeHostPort, std::string> GetCacheHost(
const HostResolver::Host& endpoint) {
- if (absl::holds_alternative<url::SchemeHostPort>(endpoint))
- return absl::get<url::SchemeHostPort>(endpoint);
+ if (endpoint.HasScheme()) {
+ return endpoint.AsSchemeHostPort();
+ }
- DCHECK(absl::holds_alternative<HostPortPair>(endpoint));
- return absl::get<HostPortPair>(endpoint).host();
+ return endpoint.GetHostname();
}
absl::optional<HostCache::Entry> CreateCacheEntry(
@@ -165,11 +136,11 @@ class MockHostResolverBase::RequestImpl
: public HostResolver::ResolveHostRequest {
public:
RequestImpl(Host request_endpoint,
- const NetworkIsolationKey& network_isolation_key,
+ const NetworkAnonymizationKey& network_anonymization_key,
const absl::optional<ResolveHostParameters>& optional_parameters,
base::WeakPtr<MockHostResolverBase> resolver)
: request_endpoint_(std::move(request_endpoint)),
- network_isolation_key_(network_isolation_key),
+ network_anonymization_key_(network_anonymization_key),
parameters_(optional_parameters ? optional_parameters.value()
: ResolveHostParameters()),
priority_(parameters_.initial_priority),
@@ -218,13 +189,13 @@ class MockHostResolverBase::RequestImpl
const AddressList* GetAddressResults() const override {
DCHECK(complete_);
- return base::OptionalOrNullptr(address_results_);
+ return base::OptionalToPtr(address_results_);
}
const std::vector<HostResolverEndpointResult>* GetEndpointResults()
const override {
DCHECK(complete_);
- return base::OptionalOrNullptr(endpoint_results_);
+ return base::OptionalToPtr(endpoint_results_);
}
const absl::optional<std::vector<std::string>>& GetTextResults()
@@ -245,7 +216,7 @@ class MockHostResolverBase::RequestImpl
const std::set<std::string>* GetDnsAliasResults() const override {
DCHECK(complete_);
- return base::OptionalOrNullptr(fixed_up_dns_alias_results_);
+ return base::OptionalToPtr(fixed_up_dns_alias_results_);
}
net::ResolveErrorInfo GetResolveErrorInfo() const override {
@@ -316,8 +287,8 @@ class MockHostResolverBase::RequestImpl
const Host& request_endpoint() const { return request_endpoint_; }
- const NetworkIsolationKey& network_isolation_key() const {
- return network_isolation_key_;
+ const NetworkAnonymizationKey& network_anonymization_key() const {
+ return network_anonymization_key_;
}
const ResolveHostParameters& parameters() const { return parameters_; }
@@ -356,7 +327,7 @@ class MockHostResolverBase::RequestImpl
AddressFamilyToDnsQueryType(endpoint.GetFamily())) {
if (endpoint.port() == 0) {
corrected.emplace_back(endpoint.address(),
- GetPort(request_endpoint_));
+ request_endpoint_.GetPort());
} else {
corrected.push_back(endpoint);
}
@@ -366,12 +337,13 @@ class MockHostResolverBase::RequestImpl
}
std::set<std::string> FixupAliases(const std::set<std::string> aliases) {
if (aliases.empty())
- return std::set<std::string>{std::string(GetHostname(request_endpoint_))};
+ return std::set<std::string>{
+ std::string(request_endpoint_.GetHostnameWithoutBrackets())};
return aliases;
}
const Host request_endpoint_;
- const NetworkIsolationKey network_isolation_key_;
+ const NetworkAnonymizationKey network_anonymization_key_;
const ResolveHostParameters parameters_;
RequestPriority priority_;
int host_resolver_flags_;
@@ -542,11 +514,12 @@ MockHostResolverBase::RuleResolver::Resolve(
const RuleResultOrError& result = rule.second;
if (absl::holds_alternative<RuleKey::NoScheme>(key.scheme) &&
- absl::holds_alternative<url::SchemeHostPort>(request_endpoint)) {
+ request_endpoint.HasScheme()) {
continue;
}
- if (key.port.has_value() && key.port.value() != GetPort(request_endpoint)) {
+ if (key.port.has_value() &&
+ key.port.value() != request_endpoint.GetPort()) {
continue;
}
@@ -563,13 +536,13 @@ MockHostResolverBase::RuleResolver::Resolve(
}
if (absl::holds_alternative<RuleKey::Scheme>(key.scheme) &&
- (!absl::holds_alternative<url::SchemeHostPort>(request_endpoint) ||
- GetScheme(request_endpoint) !=
+ (!request_endpoint.HasScheme() ||
+ request_endpoint.GetScheme() !=
absl::get<RuleKey::Scheme>(key.scheme))) {
continue;
}
- if (!base::MatchPattern(GetHostname(request_endpoint),
+ if (!base::MatchPattern(request_endpoint.GetHostnameWithoutBrackets(),
key.hostname_pattern)) {
continue;
}
@@ -580,7 +553,7 @@ MockHostResolverBase::RuleResolver::Resolve(
if (default_result_)
return default_result_.value();
- NOTREACHED() << "Request " << GetHostname(request_endpoint)
+ NOTREACHED() << "Request " << request_endpoint.GetHostname()
<< " did not match any MockHostResolver rules.";
static const RuleResultOrError kUnexpected = ERR_UNEXPECTED;
return kUnexpected;
@@ -736,20 +709,21 @@ void MockHostResolverBase::OnShutdown() {
std::unique_ptr<HostResolver::ResolveHostRequest>
MockHostResolverBase::CreateRequest(
url::SchemeHostPort host,
- NetworkIsolationKey network_isolation_key,
+ NetworkAnonymizationKey network_anonymization_key,
NetLogWithSource net_log,
absl::optional<ResolveHostParameters> optional_parameters) {
- return std::make_unique<RequestImpl>(std::move(host), network_isolation_key,
+ return std::make_unique<RequestImpl>(Host(std::move(host)),
+ network_anonymization_key,
optional_parameters, AsWeakPtr());
}
std::unique_ptr<HostResolver::ResolveHostRequest>
MockHostResolverBase::CreateRequest(
const HostPortPair& host,
- const NetworkIsolationKey& network_isolation_key,
+ const NetworkAnonymizationKey& network_anonymization_key,
const NetLogWithSource& source_net_log,
const absl::optional<ResolveHostParameters>& optional_parameters) {
- return std::make_unique<RequestImpl>(host, network_isolation_key,
+ return std::make_unique<RequestImpl>(Host(host), network_anonymization_key,
optional_parameters, AsWeakPtr());
}
@@ -769,8 +743,16 @@ HostCache* MockHostResolverBase::GetHostCache() {
}
int MockHostResolverBase::LoadIntoCache(
+ absl::variant<url::SchemeHostPort, HostPortPair> endpoint,
+ const NetworkAnonymizationKey& network_anonymization_key,
+ const absl::optional<ResolveHostParameters>& optional_parameters) {
+ return LoadIntoCache(Host(std::move(endpoint)), network_anonymization_key,
+ optional_parameters);
+}
+
+int MockHostResolverBase::LoadIntoCache(
const Host& endpoint,
- const NetworkIsolationKey& network_isolation_key,
+ const NetworkAnonymizationKey& network_anonymization_key,
const absl::optional<ResolveHostParameters>& optional_parameters) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(cache_);
@@ -782,7 +764,7 @@ int MockHostResolverBase::LoadIntoCache(
std::set<std::string> aliases;
absl::optional<HostCache::EntryStaleness> stale_info;
int rv = ResolveFromIPLiteralOrCache(
- endpoint, network_isolation_key, parameters.dns_query_type,
+ endpoint, network_anonymization_key, parameters.dns_query_type,
ParametersToHostResolverFlags(parameters), parameters.source,
parameters.cache_usage, &endpoints, &aliases, &stale_info);
if (rv != ERR_DNS_CACHE_MISS) {
@@ -792,10 +774,10 @@ int MockHostResolverBase::LoadIntoCache(
// Just like the real resolver, refuse to do anything with invalid
// hostnames.
- if (!IsValidDNSDomain(GetHostname(endpoint)))
+ if (!IsValidDNSDomain(endpoint.GetHostnameWithoutBrackets()))
return ERR_NAME_NOT_RESOLVED;
- RequestImpl request(endpoint, network_isolation_key, optional_parameters,
+ RequestImpl request(endpoint, network_anonymization_key, optional_parameters,
AsWeakPtr());
return DoSynchronousResolution(request);
}
@@ -836,7 +818,7 @@ void MockHostResolverBase::DetachRequest(size_t id) {
base::StringPiece MockHostResolverBase::request_host(size_t id) {
DCHECK(request(id));
- return GetHostname(request(id)->request_endpoint());
+ return request(id)->request_endpoint().GetHostnameWithoutBrackets();
}
RequestPriority MockHostResolverBase::request_priority(size_t id) {
@@ -844,10 +826,10 @@ RequestPriority MockHostResolverBase::request_priority(size_t id) {
return request(id)->priority();
}
-const NetworkIsolationKey& MockHostResolverBase::request_network_isolation_key(
- size_t id) {
+const NetworkAnonymizationKey&
+MockHostResolverBase::request_network_anonymization_key(size_t id) {
DCHECK(request(id));
- return request(id)->network_isolation_key();
+ return request(id)->network_anonymization_key();
}
void MockHostResolverBase::ResolveOnlyRequestNow() {
@@ -923,7 +905,8 @@ int MockHostResolverBase::Resolve(RequestImpl* request) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
last_request_priority_ = request->parameters().initial_priority;
- last_request_network_isolation_key_ = request->network_isolation_key();
+ last_request_network_anonymization_key_ =
+ request->network_anonymization_key();
last_secure_dns_policy_ = request->parameters().secure_dns_policy;
state_->IncrementNumResolve();
std::vector<HostResolverEndpointResult> endpoints;
@@ -931,7 +914,7 @@ int MockHostResolverBase::Resolve(RequestImpl* request) {
absl::optional<HostCache::EntryStaleness> stale_info;
// TODO(crbug.com/1264933): Allow caching `ConnectionEndpoint` results.
int rv = ResolveFromIPLiteralOrCache(
- request->request_endpoint(), request->network_isolation_key(),
+ request->request_endpoint(), request->network_anonymization_key(),
request->parameters().dns_query_type, request->host_resolver_flags(),
request->parameters().source, request->parameters().cache_usage,
&endpoints, &aliases, &stale_info);
@@ -950,7 +933,8 @@ int MockHostResolverBase::Resolve(RequestImpl* request) {
// Just like the real resolver, refuse to do anything with invalid
// hostnames.
- if (!IsValidDNSDomain(GetHostname(request->request_endpoint()))) {
+ if (!IsValidDNSDomain(
+ request->request_endpoint().GetHostnameWithoutBrackets())) {
request->SetError(ERR_NAME_NOT_RESOLVED);
return ERR_NAME_NOT_RESOLVED;
}
@@ -974,7 +958,7 @@ int MockHostResolverBase::Resolve(RequestImpl* request) {
int MockHostResolverBase::ResolveFromIPLiteralOrCache(
const Host& endpoint,
- const NetworkIsolationKey& network_isolation_key,
+ const NetworkAnonymizationKey& network_anonymization_key,
DnsQueryType dns_query_type,
HostResolverFlags flags,
HostResolverSource source,
@@ -990,7 +974,7 @@ int MockHostResolverBase::ResolveFromIPLiteralOrCache(
*out_stale_info = absl::nullopt;
IPAddress ip_address;
- if (ip_address.AssignFromIPLiteral(GetHostname(endpoint))) {
+ if (ip_address.AssignFromIPLiteral(endpoint.GetHostnameWithoutBrackets())) {
const DnsQueryType desired_address_query =
AddressFamilyToDnsQueryType(GetAddressFamily(ip_address));
DCHECK_NE(desired_address_query, DnsQueryType::UNSPECIFIED);
@@ -1003,7 +987,7 @@ int MockHostResolverBase::ResolveFromIPLiteralOrCache(
*out_endpoints = std::vector<HostResolverEndpointResult>(1);
(*out_endpoints)[0].ip_endpoints.emplace_back(ip_address,
- GetPort(endpoint));
+ endpoint.GetPort());
if (flags & HOST_RESOLVER_CANONNAME)
*out_aliases = {ip_address.ToString()};
return OK;
@@ -1012,7 +996,8 @@ int MockHostResolverBase::ResolveFromIPLiteralOrCache(
std::vector<IPEndPoint> localhost_endpoints;
// Immediately resolve any "localhost" or recognized similar names.
if (IsAddressType(dns_query_type) &&
- ResolveLocalHostname(GetHostname(endpoint), &localhost_endpoints)) {
+ ResolveLocalHostname(endpoint.GetHostnameWithoutBrackets(),
+ &localhost_endpoints)) {
*out_endpoints = std::vector<HostResolverEndpointResult>(1);
(*out_endpoints)[0].ip_endpoints = localhost_endpoints;
return OK;
@@ -1028,7 +1013,7 @@ int MockHostResolverBase::ResolveFromIPLiteralOrCache(
source == HostResolverSource::LOCAL_ONLY ? HostResolverSource::ANY
: source;
HostCache::Key key(GetCacheHost(endpoint), dns_query_type, flags,
- effective_source, network_isolation_key);
+ effective_source, network_anonymization_key);
const std::pair<const HostCache::Key, HostCache::Entry>* cache_result;
HostCache::EntryStaleness stale_info = HostCache::kNotStale;
if (cache_usage ==
@@ -1101,7 +1086,7 @@ int MockHostResolverBase::DoSynchronousResolution(RequestImpl& request) {
HostCache::Key key(
GetCacheHost(request.request_endpoint()),
request.parameters().dns_query_type, request.host_resolver_flags(),
- request.parameters().source, request.network_isolation_key());
+ request.parameters().source, request.network_anonymization_key());
// Storing a failure with TTL 0 so that it overwrites previous value.
base::TimeDelta ttl;
if (error == OK) {
@@ -1340,9 +1325,7 @@ int RuleBasedHostResolverProc::Resolve(const std::string& host,
case Rule::kResolverTypeFailTimeout:
return ERR_DNS_TIMED_OUT;
case Rule::kResolverTypeSystem:
-#if BUILDFLAG(IS_WIN)
- EnsureWinsockInit();
-#endif
+ EnsureSystemHostResolverCallReady();
return SystemHostResolverCall(effective_host, address_family,
host_resolver_flags, addrlist,
os_error);
@@ -1498,22 +1481,22 @@ void HangingHostResolver::OnShutdown() {
std::unique_ptr<HostResolver::ResolveHostRequest>
HangingHostResolver::CreateRequest(
url::SchemeHostPort host,
- NetworkIsolationKey network_isolation_key,
+ NetworkAnonymizationKey network_anonymization_key,
NetLogWithSource net_log,
absl::optional<ResolveHostParameters> optional_parameters) {
// TODO(crbug.com/1206799): Propagate scheme and make affect behavior.
return CreateRequest(HostPortPair::FromSchemeHostPort(host),
- network_isolation_key, net_log, optional_parameters);
+ network_anonymization_key, net_log, optional_parameters);
}
std::unique_ptr<HostResolver::ResolveHostRequest>
HangingHostResolver::CreateRequest(
const HostPortPair& host,
- const NetworkIsolationKey& network_isolation_key,
+ const NetworkAnonymizationKey& network_anonymization_key,
const NetLogWithSource& source_net_log,
const absl::optional<ResolveHostParameters>& optional_parameters) {
last_host_ = host;
- last_network_isolation_key_ = network_isolation_key;
+ last_network_anonymization_key_ = network_anonymization_key;
if (shutting_down_)
return CreateFailingRequest(ERR_CONTEXT_SHUT_DOWN);