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.cc350
1 files changed, 196 insertions, 154 deletions
diff --git a/chromium/net/dns/mock_host_resolver.cc b/chromium/net/dns/mock_host_resolver.cc
index 03500cf172b..3f662a4c4b3 100644
--- a/chromium/net/dns/mock_host_resolver.cc
+++ b/chromium/net/dns/mock_host_resolver.cc
@@ -48,6 +48,7 @@
#include "net/dns/host_resolver.h"
#include "net/dns/host_resolver_manager.h"
#include "net/dns/host_resolver_results.h"
+#include "net/dns/https_record_rdata.h"
#include "net/dns/public/dns_query_type.h"
#include "net/dns/public/host_resolver_source.h"
#include "net/dns/public/mdns_listener_update_type.h"
@@ -111,13 +112,43 @@ absl::variant<url::SchemeHostPort, std::string> GetCacheHost(
return absl::get<HostPortPair>(endpoint).host();
}
+absl::optional<HostCache::Entry> CreateCacheEntry(
+ const std::vector<HostResolverEndpointResult>& endpoint_results,
+ const std::set<std::string>& aliases) {
+ absl::optional<std::vector<net::IPEndPoint>> ip_endpoints;
+ std::multimap<HttpsRecordPriority, ConnectionEndpointMetadata>
+ endpoint_metadatas;
+ for (const auto& endpoint_result : endpoint_results) {
+ if (!ip_endpoints) {
+ ip_endpoints = endpoint_result.ip_endpoints;
+ } else {
+ // TODO(crbug.com/1264933): Support caching different IP endpoints
+ // resutls.
+ CHECK(*ip_endpoints == endpoint_result.ip_endpoints)
+ << "Currently caching MockHostResolver only supports same IP "
+ "endpoints results.";
+ }
+
+ if (!endpoint_result.metadata.supported_protocol_alpns.empty()) {
+ endpoint_metadatas.emplace(/*priority=*/1, endpoint_result.metadata);
+ }
+ }
+ DCHECK(ip_endpoints);
+ auto endpoint_entry = HostCache::Entry(OK, *ip_endpoints, aliases,
+ HostCache::Entry::SOURCE_UNKNOWN);
+ if (endpoint_metadatas.empty()) {
+ return endpoint_entry;
+ }
+ return HostCache::Entry::MergeEntries(
+ HostCache::Entry(OK, std::move(endpoint_metadatas),
+ HostCache::Entry::SOURCE_UNKNOWN),
+ endpoint_entry);
+}
} // namespace
int ParseAddressList(base::StringPiece host_list,
- const std::vector<std::string>& dns_aliases,
- AddressList* addrlist) {
- *addrlist = AddressList();
- addrlist->SetDnsAliases(dns_aliases);
+ std::vector<net::IPEndPoint>* ip_endpoints) {
+ ip_endpoints->clear();
for (const base::StringPiece& address : base::SplitStringPiece(
host_list, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) {
IPAddress ip_address;
@@ -125,7 +156,7 @@ int ParseAddressList(base::StringPiece host_list,
LOG(WARNING) << "Not a supported IP literal: " << address;
return ERR_UNEXPECTED;
}
- addrlist->push_back(IPEndPoint(ip_address, 0));
+ ip_endpoints->push_back(IPEndPoint(ip_address, 0));
}
return OK;
}
@@ -238,58 +269,32 @@ class MockHostResolverBase::RequestImpl
resolve_error_info_ = ResolveErrorInfo(error);
}
- // Sets `address_results_` to `address_results`, after fixing them up. Also
- // sets `error` to OK if the fixed up AddressList is non-empty, or
- // ERR_NAME_NOT_RESOLVED otherwise.
- void SetAddressResults(const AddressList& address_results,
- absl::optional<HostCache::EntryStaleness> staleness) {
- // Should only be called at most once and before request is marked
- // completed.
- DCHECK(!complete_);
- DCHECK(!address_results_);
- DCHECK(!endpoint_results_);
- DCHECK(!parameters_.is_speculative);
-
- address_results_ = FixupAddressList(address_results);
-
- // If there are no addresses, either as a result of FixupAddressList(), as
- // in the originally passed in value, clear results and set an error.
- if (address_results_->empty()) {
- address_results_.reset();
- SetError(ERR_NAME_NOT_RESOLVED);
- return;
- }
-
- SetError(OK);
-
- fixed_up_dns_alias_results_ = dns_alias_utility::FixUpDnsAliases(
- std::set<std::string>(address_results_->dns_aliases().begin(),
- address_results_->dns_aliases().end()));
- staleness_ = std::move(staleness);
-
- endpoint_results_ = AddressListToEndpointResults(address_results_.value());
- }
-
+ // Sets `endpoint_results_`, `fixed_up_dns_alias_results_`,
+ // `address_results_` and `staleness_` after fixing them up.
+ // Also sets `error` to OK.
void SetEndpointResults(
- std::vector<HostResolverEndpointResult> endpoint_results) {
+ std::vector<HostResolverEndpointResult> endpoint_results,
+ std::set<std::string> aliases,
+ absl::optional<HostCache::EntryStaleness> staleness) {
DCHECK(!complete_);
DCHECK(!endpoint_results_);
DCHECK(!parameters_.is_speculative);
- // TODO(crbug.com/1264933): Perform fixups on `endpoint_results`?
endpoint_results_ = std::move(endpoint_results);
+ for (auto& result : *endpoint_results_) {
+ result.ip_endpoints = FixupEndPoints(result.ip_endpoints);
+ }
- // For now, we do not support configuring DNS aliases with endpoint results,
- // but the value is expected to always be present.
- //
- // TODO(crbug.com/1264933): Add some way to configure this, to support code
- // migrating to `HostResolverEndpointResult`.
- fixed_up_dns_alias_results_.emplace();
+ fixed_up_dns_alias_results_ = FixupAliases(aliases);
// `HostResolver` implementations are expected to provide an `AddressList`
// result whenever `HostResolverEndpointResult` is also available.
address_results_ = EndpointResultToAddressList(
*endpoint_results_, *fixed_up_dns_alias_results_);
+
+ staleness_ = std::move(staleness);
+
+ SetError(OK);
}
void OnAsyncCompleted(size_t id, int error) {
@@ -341,31 +346,29 @@ class MockHostResolverBase::RequestImpl
ResolveErrorInfo resolve_error_info() const { return resolve_error_info_; }
private:
- AddressList FixupAddressList(const AddressList& list) {
- // Filter address family by query type and set request port if response port
- // is default.
- AddressList corrected;
- for (const IPEndPoint& endpoint : list.endpoints()) {
+ std::vector<IPEndPoint> FixupEndPoints(
+ const std::vector<IPEndPoint>& endpoints) {
+ std::vector<IPEndPoint> corrected;
+ for (const IPEndPoint& endpoint : endpoints) {
DCHECK_NE(endpoint.GetFamily(), ADDRESS_FAMILY_UNSPECIFIED);
if (parameters_.dns_query_type == DnsQueryType::UNSPECIFIED ||
parameters_.dns_query_type ==
AddressFamilyToDnsQueryType(endpoint.GetFamily())) {
if (endpoint.port() == 0) {
- corrected.push_back(
- IPEndPoint(endpoint.address(), GetPort(request_endpoint_)));
+ corrected.emplace_back(endpoint.address(),
+ GetPort(request_endpoint_));
} else {
corrected.push_back(endpoint);
}
}
}
-
- // Copy over aliases and set to request hostname if empty.
- corrected.SetDnsAliases(list.dns_aliases());
- if (corrected.dns_aliases().empty())
- corrected.SetDnsAliases({std::string(GetHostname(request_endpoint_))});
-
return corrected;
}
+ 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 aliases;
+ }
const Host request_endpoint_;
const NetworkIsolationKey network_isolation_key_;
@@ -490,8 +493,31 @@ MockHostResolverBase::RuleResolver::RuleKey::RuleKey(RuleKey&&) = default;
MockHostResolverBase::RuleResolver::RuleKey&
MockHostResolverBase::RuleResolver::RuleKey::operator=(RuleKey&&) = default;
+MockHostResolverBase::RuleResolver::RuleResult::RuleResult() = default;
+
+MockHostResolverBase::RuleResolver::RuleResult::RuleResult(
+ std::vector<HostResolverEndpointResult> endpoints,
+ std::set<std::string> aliases)
+ : endpoints(std::move(endpoints)), aliases(std::move(aliases)) {}
+
+MockHostResolverBase::RuleResolver::RuleResult::~RuleResult() = default;
+
+MockHostResolverBase::RuleResolver::RuleResult::RuleResult(const RuleResult&) =
+ default;
+
+MockHostResolverBase::RuleResolver::RuleResult&
+MockHostResolverBase::RuleResolver::RuleResult::operator=(const RuleResult&) =
+ default;
+
+MockHostResolverBase::RuleResolver::RuleResult::RuleResult(RuleResult&&) =
+ default;
+
+MockHostResolverBase::RuleResolver::RuleResult&
+MockHostResolverBase::RuleResolver::RuleResult::operator=(RuleResult&&) =
+ default;
+
MockHostResolverBase::RuleResolver::RuleResolver(
- absl::optional<RuleResult> default_result)
+ absl::optional<RuleResultOrError> default_result)
: default_result_(std::move(default_result)) {}
MockHostResolverBase::RuleResolver::~RuleResolver() = default;
@@ -506,14 +532,14 @@ MockHostResolverBase::RuleResolver::RuleResolver(RuleResolver&&) = default;
MockHostResolverBase::RuleResolver&
MockHostResolverBase::RuleResolver::operator=(RuleResolver&&) = default;
-const MockHostResolverBase::RuleResolver::RuleResult&
+const MockHostResolverBase::RuleResolver::RuleResultOrError&
MockHostResolverBase::RuleResolver::Resolve(
const Host& request_endpoint,
DnsQueryTypeSet request_types,
HostResolverSource request_source) const {
for (const auto& rule : rules_) {
const RuleKey& key = rule.first;
- const RuleResult& result = rule.second;
+ const RuleResultOrError& result = rule.second;
if (absl::holds_alternative<RuleKey::NoScheme>(key.scheme) &&
absl::holds_alternative<url::SchemeHostPort>(request_endpoint)) {
@@ -556,7 +582,7 @@ MockHostResolverBase::RuleResolver::Resolve(
NOTREACHED() << "Request " << GetHostname(request_endpoint)
<< " did not match any MockHostResolver rules.";
- static const RuleResult kUnexpected = ERR_UNEXPECTED;
+ static const RuleResultOrError kUnexpected = ERR_UNEXPECTED;
return kUnexpected;
}
@@ -565,14 +591,15 @@ void MockHostResolverBase::RuleResolver::ClearRules() {
}
// static
-MockHostResolverBase::RuleResolver::RuleResult
+MockHostResolverBase::RuleResolver::RuleResultOrError
MockHostResolverBase::RuleResolver::GetLocalhostResult() {
- return AddressList::CreateFromIPAddress(IPAddress::IPv4Localhost(),
- /*port=*/0);
+ HostResolverEndpointResult endpoint;
+ endpoint.ip_endpoints = {IPEndPoint(IPAddress::IPv4Localhost(), /*port=*/0)};
+ return RuleResult(std::vector{endpoint});
}
void MockHostResolverBase::RuleResolver::AddRule(RuleKey key,
- RuleResult result) {
+ RuleResultOrError result) {
// Literals are always resolved to themselves by MockHostResolverBase,
// consequently we do not support remapping them.
IPAddress ip_address;
@@ -584,15 +611,15 @@ void MockHostResolverBase::RuleResolver::AddRule(RuleKey key,
void MockHostResolverBase::RuleResolver::AddRule(RuleKey key,
base::StringPiece ip_literal) {
- AddressList results;
- CHECK_EQ(ParseAddressList(ip_literal, /*dns_aliases=*/{}, &results), OK);
-
- AddRule(std::move(key), std::move(results));
+ std::vector<HostResolverEndpointResult> endpoints;
+ endpoints.emplace_back();
+ CHECK_EQ(ParseAddressList(ip_literal, &endpoints[0].ip_endpoints), OK);
+ AddRule(std::move(key), RuleResult(std::move(endpoints)));
}
void MockHostResolverBase::RuleResolver::AddRule(
base::StringPiece hostname_pattern,
- RuleResult result) {
+ RuleResultOrError result) {
RuleKey key;
key.hostname_pattern = std::string(hostname_pattern);
AddRule(std::move(key), std::move(result));
@@ -601,10 +628,10 @@ void MockHostResolverBase::RuleResolver::AddRule(
void MockHostResolverBase::RuleResolver::AddRule(
base::StringPiece hostname_pattern,
base::StringPiece ip_literal) {
- AddressList results;
- CHECK_EQ(ParseAddressList(ip_literal, /*dns_aliases=*/{}, &results), OK);
-
- AddRule(hostname_pattern, std::move(results));
+ std::vector<HostResolverEndpointResult> endpoints;
+ endpoints.emplace_back();
+ CHECK_EQ(ParseAddressList(ip_literal, &endpoints[0].ip_endpoints), OK);
+ AddRule(hostname_pattern, RuleResult(std::move(endpoints)));
}
void MockHostResolverBase::RuleResolver::AddRule(
@@ -623,24 +650,26 @@ void MockHostResolverBase::RuleResolver::AddIPLiteralRule(
RuleKey key;
key.hostname_pattern = std::string(hostname_pattern);
- std::vector<std::string> aliases;
+ std::set<std::string> aliases;
if (!canonical_name.empty())
- aliases.emplace_back(canonical_name);
+ aliases.emplace(canonical_name);
- AddressList results;
- CHECK_EQ(ParseAddressList(ip_literal, aliases, &results), OK);
-
- AddRule(std::move(key), std::move(results));
+ std::vector<HostResolverEndpointResult> endpoints;
+ endpoints.emplace_back();
+ CHECK_EQ(ParseAddressList(ip_literal, &endpoints[0].ip_endpoints), OK);
+ AddRule(std::move(key), RuleResult(std::move(endpoints), std::move(aliases)));
}
void MockHostResolverBase::RuleResolver::AddIPLiteralRuleWithDnsAliases(
base::StringPiece hostname_pattern,
base::StringPiece ip_literal,
std::vector<std::string> dns_aliases) {
- AddressList results;
- CHECK_EQ(ParseAddressList(ip_literal, dns_aliases, &results), OK);
-
- AddRule(hostname_pattern, std::move(results));
+ std::vector<HostResolverEndpointResult> endpoints;
+ endpoints.emplace_back();
+ CHECK_EQ(ParseAddressList(ip_literal, &endpoints[0].ip_endpoints), OK);
+ AddRule(hostname_pattern,
+ RuleResult(std::move(endpoints),
+ std::set(dns_aliases.begin(), dns_aliases.end())));
}
void MockHostResolverBase::RuleResolver::AddIPLiteralRuleWithDnsAliases(
@@ -669,10 +698,12 @@ void MockHostResolverBase::RuleResolver::AddRuleWithFlags(
base::StringPiece ip_literal,
HostResolverFlags /*flags*/,
std::vector<std::string> dns_aliases) {
- AddressList results;
- CHECK_EQ(ParseAddressList(ip_literal, dns_aliases, &results), OK);
-
- AddRule(host_pattern, std::move(results));
+ std::vector<HostResolverEndpointResult> endpoints;
+ endpoints.emplace_back();
+ CHECK_EQ(ParseAddressList(ip_literal, &endpoints[0].ip_endpoints), OK);
+ AddRule(host_pattern,
+ RuleResult(std::move(endpoints),
+ std::set(dns_aliases.begin(), dns_aliases.end())));
}
MockHostResolverBase::State::State() = default;
@@ -747,12 +778,13 @@ int MockHostResolverBase::LoadIntoCache(
ResolveHostParameters parameters =
optional_parameters.value_or(ResolveHostParameters());
- AddressList addresses;
+ std::vector<HostResolverEndpointResult> endpoints;
+ std::set<std::string> aliases;
absl::optional<HostCache::EntryStaleness> stale_info;
int rv = ResolveFromIPLiteralOrCache(
endpoint, network_isolation_key, parameters.dns_query_type,
ParametersToHostResolverFlags(parameters), parameters.source,
- parameters.cache_usage, &addresses, &stale_info);
+ parameters.cache_usage, &endpoints, &aliases, &stale_info);
if (rv != ERR_DNS_CACHE_MISS) {
// Request already in cache (or IP literal). No need to load it.
return rv;
@@ -894,17 +926,19 @@ int MockHostResolverBase::Resolve(RequestImpl* request) {
last_request_network_isolation_key_ = request->network_isolation_key();
last_secure_dns_policy_ = request->parameters().secure_dns_policy;
state_->IncrementNumResolve();
- AddressList addresses;
+ std::vector<HostResolverEndpointResult> endpoints;
+ std::set<std::string> aliases;
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->parameters().dns_query_type, request->host_resolver_flags(),
request->parameters().source, request->parameters().cache_usage,
- &addresses, &stale_info);
+ &endpoints, &aliases, &stale_info);
if (rv == OK && !request->parameters().is_speculative) {
- request->SetAddressResults(addresses, std::move(stale_info));
+ request->SetEndpointResults(std::move(endpoints), std::move(aliases),
+ std::move(stale_info));
} else {
request->SetError(rv);
}
@@ -945,10 +979,14 @@ int MockHostResolverBase::ResolveFromIPLiteralOrCache(
HostResolverFlags flags,
HostResolverSource source,
HostResolver::ResolveHostParameters::CacheUsage cache_usage,
- AddressList* addresses,
+ std::vector<HostResolverEndpointResult>* out_endpoints,
+ std::set<std::string>* out_aliases,
absl::optional<HostCache::EntryStaleness>* out_stale_info) {
- DCHECK(addresses);
+ DCHECK(out_endpoints);
+ DCHECK(out_aliases);
DCHECK(out_stale_info);
+ out_endpoints->clear();
+ out_aliases->clear();
*out_stale_info = absl::nullopt;
IPAddress ip_address;
@@ -963,16 +1001,20 @@ int MockHostResolverBase::ResolveFromIPLiteralOrCache(
return ERR_NAME_NOT_RESOLVED;
}
- *addresses =
- AddressList::CreateFromIPAddress(ip_address, GetPort(endpoint));
+ *out_endpoints = std::vector<HostResolverEndpointResult>(1);
+ (*out_endpoints)[0].ip_endpoints.emplace_back(ip_address,
+ GetPort(endpoint));
if (flags & HOST_RESOLVER_CANONNAME)
- addresses->SetDefaultCanonicalName();
+ *out_aliases = {ip_address.ToString()};
return OK;
}
+ std::vector<IPEndPoint> localhost_endpoints;
// Immediately resolve any "localhost" or recognized similar names.
if (IsAddressType(dns_query_type) &&
- ResolveLocalHostname(GetHostname(endpoint), addresses)) {
+ ResolveLocalHostname(GetHostname(endpoint), &localhost_endpoints)) {
+ *out_endpoints = std::vector<HostResolverEndpointResult>(1);
+ (*out_endpoints)[0].ip_endpoints = localhost_endpoints;
return OK;
}
int rv = ERR_DNS_CACHE_MISS;
@@ -1000,8 +1042,14 @@ int MockHostResolverBase::ResolveFromIPLiteralOrCache(
if (cache_result) {
rv = cache_result->second.error();
if (rv == OK) {
- *addresses = AddressList::CopyWithPort(
- cache_result->second.legacy_addresses().value(), GetPort(endpoint));
+ *out_endpoints = std::vector<HostResolverEndpointResult>(1);
+ (*out_endpoints)[0].ip_endpoints = *cache_result->second.ip_endpoints();
+
+ if (cache_result->second.aliases()) {
+ const auto& aliasess = *cache_result->second.aliases();
+ *out_aliases =
+ std::set<std::string>(aliasess.begin(), aliasess.end());
+ }
*out_stale_info = std::move(stale_info);
}
@@ -1024,40 +1072,32 @@ int MockHostResolverBase::ResolveFromIPLiteralOrCache(
int MockHostResolverBase::DoSynchronousResolution(RequestImpl& request) {
state_->IncrementNumNonLocalResolves();
- const RuleResolver::RuleResult& result = rule_resolver_.Resolve(
+ const RuleResolver::RuleResultOrError& result = rule_resolver_.Resolve(
request.request_endpoint(), request.parameters().dns_query_type,
request.parameters().source);
int error = ERR_UNEXPECTED;
absl::optional<HostCache::Entry> cache_entry;
-
- if (absl::holds_alternative<AddressList>(result)) {
- const AddressList& address_results = absl::get<AddressList>(result);
- request.SetAddressResults(address_results,
- /*staleness=*/absl::nullopt);
- error = request.resolve_error_info().error;
- cache_entry =
- request.address_results()
- ? HostCache::Entry(error, *request.address_results(),
- HostCache::Entry::SOURCE_UNKNOWN)
- : HostCache::Entry(error, HostCache::Entry::SOURCE_UNKNOWN);
- } else if (absl::holds_alternative<std::vector<HostResolverEndpointResult>>(
- result)) {
- const auto& endpoint_results =
- absl::get<std::vector<HostResolverEndpointResult>>(result);
- request.SetEndpointResults(endpoint_results);
+ if (absl::holds_alternative<RuleResolver::RuleResult>(result)) {
+ const auto& rule_result = absl::get<RuleResolver::RuleResult>(result);
+ const auto& endpoint_results = rule_result.endpoints;
+ const auto& aliases = rule_result.aliases;
+ request.SetEndpointResults(endpoint_results, aliases,
+ /*staleness=*/absl::nullopt);
// TODO(crbug.com/1264933): Change `error` on empty results?
error = OK;
- // TODO(crbug.com/1264933): Save result to cache.
+ if (cache_.get()) {
+ cache_entry = CreateCacheEntry(endpoint_results, aliases);
+ }
} else {
DCHECK(absl::holds_alternative<RuleResolver::ErrorResult>(result));
error = absl::get<RuleResolver::ErrorResult>(result);
request.SetError(error);
- cache_entry.emplace(error, HostCache::Entry::SOURCE_UNKNOWN);
+ if (cache_.get()) {
+ cache_entry.emplace(error, HostCache::Entry::SOURCE_UNKNOWN);
+ }
}
-
if (cache_.get() && cache_entry.has_value()) {
- DCHECK(cache_entry.has_value());
HostCache::Key key(
GetCacheHost(request.request_endpoint()),
request.parameters().dns_query_type, request.host_resolver_flags(),
@@ -1116,10 +1156,10 @@ std::unique_ptr<HostResolver> MockHostResolverFactory::CreateStandaloneResolver(
//-----------------------------------------------------------------------------
RuleBasedHostResolverProc::Rule::Rule(ResolverType resolver_type,
- const std::string& host_pattern,
+ base::StringPiece host_pattern,
AddressFamily address_family,
HostResolverFlags host_resolver_flags,
- const std::string& replacement,
+ base::StringPiece replacement,
std::vector<std::string> dns_aliases,
int latency_ms)
: resolver_type(resolver_type),
@@ -1136,20 +1176,21 @@ RuleBasedHostResolverProc::Rule::Rule(const Rule& other) = default;
RuleBasedHostResolverProc::Rule::~Rule() = default;
-RuleBasedHostResolverProc::RuleBasedHostResolverProc(HostResolverProc* previous,
- bool allow_fallback)
- : HostResolverProc(previous, allow_fallback) {}
+RuleBasedHostResolverProc::RuleBasedHostResolverProc(
+ scoped_refptr<HostResolverProc> previous,
+ bool allow_fallback)
+ : HostResolverProc(std::move(previous), allow_fallback) {}
-void RuleBasedHostResolverProc::AddRule(const std::string& host_pattern,
- const std::string& replacement) {
+void RuleBasedHostResolverProc::AddRule(base::StringPiece host_pattern,
+ base::StringPiece replacement) {
AddRuleForAddressFamily(host_pattern, ADDRESS_FAMILY_UNSPECIFIED,
replacement);
}
void RuleBasedHostResolverProc::AddRuleForAddressFamily(
- const std::string& host_pattern,
+ base::StringPiece host_pattern,
AddressFamily address_family,
- const std::string& replacement) {
+ base::StringPiece replacement) {
DCHECK(!replacement.empty());
HostResolverFlags flags = HOST_RESOLVER_LOOPBACK_ONLY;
Rule rule(Rule::kResolverTypeSystem, host_pattern, address_family, flags,
@@ -1158,8 +1199,8 @@ void RuleBasedHostResolverProc::AddRuleForAddressFamily(
}
void RuleBasedHostResolverProc::AddRuleWithFlags(
- const std::string& host_pattern,
- const std::string& replacement,
+ base::StringPiece host_pattern,
+ base::StringPiece replacement,
HostResolverFlags flags,
std::vector<std::string> dns_aliases) {
DCHECK(!replacement.empty());
@@ -1169,9 +1210,9 @@ void RuleBasedHostResolverProc::AddRuleWithFlags(
}
void RuleBasedHostResolverProc::AddIPLiteralRule(
- const std::string& host_pattern,
- const std::string& ip_literal,
- const std::string& canonical_name) {
+ base::StringPiece host_pattern,
+ base::StringPiece ip_literal,
+ base::StringPiece canonical_name) {
// Literals are always resolved to themselves by HostResolverImpl,
// consequently we do not support remapping them.
IPAddress ip_address;
@@ -1190,8 +1231,8 @@ void RuleBasedHostResolverProc::AddIPLiteralRule(
}
void RuleBasedHostResolverProc::AddIPLiteralRuleWithDnsAliases(
- const std::string& host_pattern,
- const std::string& ip_literal,
+ base::StringPiece host_pattern,
+ base::StringPiece ip_literal,
std::vector<std::string> dns_aliases) {
// Literals are always resolved to themselves by HostResolverImpl,
// consequently we do not support remapping them.
@@ -1208,8 +1249,8 @@ void RuleBasedHostResolverProc::AddIPLiteralRuleWithDnsAliases(
}
void RuleBasedHostResolverProc::AddRuleWithLatency(
- const std::string& host_pattern,
- const std::string& replacement,
+ base::StringPiece host_pattern,
+ base::StringPiece replacement,
int latency_ms) {
DCHECK(!replacement.empty());
HostResolverFlags flags = HOST_RESOLVER_LOOPBACK_ONLY;
@@ -1219,7 +1260,7 @@ void RuleBasedHostResolverProc::AddRuleWithLatency(
}
void RuleBasedHostResolverProc::AllowDirectLookup(
- const std::string& host_pattern) {
+ base::StringPiece host_pattern) {
HostResolverFlags flags = HOST_RESOLVER_LOOPBACK_ONLY;
Rule rule(Rule::kResolverTypeSystem, host_pattern, ADDRESS_FAMILY_UNSPECIFIED,
flags, std::string(), /*dns_aliases=*/{}, 0);
@@ -1227,7 +1268,7 @@ void RuleBasedHostResolverProc::AllowDirectLookup(
}
void RuleBasedHostResolverProc::AddSimulatedFailure(
- const std::string& host_pattern,
+ base::StringPiece host_pattern,
HostResolverFlags flags) {
Rule rule(Rule::kResolverTypeFail, host_pattern, ADDRESS_FAMILY_UNSPECIFIED,
flags, std::string(), /*dns_aliases=*/{}, 0);
@@ -1235,7 +1276,7 @@ void RuleBasedHostResolverProc::AddSimulatedFailure(
}
void RuleBasedHostResolverProc::AddSimulatedTimeoutFailure(
- const std::string& host_pattern,
+ base::StringPiece host_pattern,
HostResolverFlags flags) {
Rule rule(Rule::kResolverTypeFailTimeout, host_pattern,
ADDRESS_FAMILY_UNSPECIFIED, flags, std::string(),
@@ -1311,17 +1352,17 @@ int RuleBasedHostResolverProc::Resolve(const std::string& host,
aliases = (!r->dns_aliases.empty())
? r->dns_aliases
: std::vector<std::string>({host});
- int result =
- ParseAddressList(effective_host, aliases, &raw_addr_list);
+ std::vector<net::IPEndPoint> ip_endpoints;
+ int result = ParseAddressList(effective_host, &ip_endpoints);
// Filter out addresses with the wrong family.
*addrlist = AddressList();
- for (const auto& address : raw_addr_list) {
+ for (const auto& address : ip_endpoints) {
if (address_family == ADDRESS_FAMILY_UNSPECIFIED ||
address_family == address.GetFamily()) {
addrlist->push_back(address);
}
}
- addrlist->SetDnsAliases(raw_addr_list.dns_aliases());
+ addrlist->SetDnsAliases(aliases);
if (result == OK && addrlist->empty())
return ERR_NAME_NOT_RESOLVED;
@@ -1364,15 +1405,16 @@ void RuleBasedHostResolverProc::AddRuleInternal(const Rule& rule) {
rules_.push_back(fixed_rule);
}
-RuleBasedHostResolverProc* CreateCatchAllHostResolverProc() {
- RuleBasedHostResolverProc* catchall =
- new RuleBasedHostResolverProc(/*previous=*/nullptr,
- /*allow_fallback=*/false);
+scoped_refptr<RuleBasedHostResolverProc> CreateCatchAllHostResolverProc() {
+ auto catchall =
+ base::MakeRefCounted<RuleBasedHostResolverProc>(/*previous=*/nullptr,
+ /*allow_fallback=*/false);
// Note that IPv6 lookups fail.
catchall->AddIPLiteralRule("*", "127.0.0.1", "localhost");
// Next add a rules-based layer that the test controls.
- return new RuleBasedHostResolverProc(catchall, /*allow_fallback=*/false);
+ return base::MakeRefCounted<RuleBasedHostResolverProc>(
+ std::move(catchall), /*allow_fallback=*/false);
}
//-----------------------------------------------------------------------------
@@ -1514,7 +1556,7 @@ ScopedDefaultHostResolverProc::~ScopedDefaultHostResolverProc() {
void ScopedDefaultHostResolverProc::Init(HostResolverProc* proc) {
current_proc_ = proc;
previous_proc_ = HostResolverProc::SetDefault(current_proc_.get());
- current_proc_->SetLastProc(previous_proc_.get());
+ current_proc_->SetLastProc(previous_proc_);
}
} // namespace net