Use context from ContextHostResolver for DoH
Had to divorce some things in HostResolver from HostCache::Key since
different requests now have different context but the cache shouldn't
be keying on context (although in a separate CL, different contexts
will soon use separate caches entirely). Jobs are now keyed on a
separate JobKey struct, and things are passed around by raw data
(hostname, query_type, etc) with HostCache::Key and JobKey generated
from that as needed rather than using any key type as a container of
request parameters.
Bug: 934402
Change-Id: Ic2d3ccd515456f25a9a09976f82dd7d277638efb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1535148
Commit-Queue: Eric Orth <[email protected]>
Reviewed-by: Matt Menke <[email protected]>
Cr-Commit-Position: refs/heads/master@{#651326}
diff --git a/net/dns/context_host_resolver.cc b/net/dns/context_host_resolver.cc
index 31a6d7e..2ce87e6 100644
--- a/net/dns/context_host_resolver.cc
+++ b/net/dns/context_host_resolver.cc
@@ -106,7 +106,9 @@
const base::Optional<ResolveHostParameters>& optional_parameters) {
// TODO(crbug.com/934402): DHCECK |context_| once universally set.
auto request = std::make_unique<WrappedRequest>(
- manager_->CreateRequest(host, source_net_log, optional_parameters), this);
+ manager_->CreateRequest(host, source_net_log, optional_parameters,
+ context_),
+ this);
active_requests_.insert(request.get());
return request;
}
diff --git a/net/dns/context_host_resolver_unittest.cc b/net/dns/context_host_resolver_unittest.cc
index 7ff08ad..cbaafd12 100644
--- a/net/dns/context_host_resolver_unittest.cc
+++ b/net/dns/context_host_resolver_unittest.cc
@@ -24,6 +24,7 @@
#include "net/log/net_log_with_source.h"
#include "net/test/gtest_util.h"
#include "net/test/test_with_scoped_task_environment.h"
+#include "net/url_request/url_request_context.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -64,18 +65,22 @@
};
TEST_F(ContextHostResolverTest, Resolve) {
+ URLRequestContext context;
+
MockDnsClientRuleList rules;
rules.emplace_back("example.com", dns_protocol::kTypeA,
SecureDnsMode::AUTOMATIC,
MockDnsClientRule::Result(BuildTestDnsResponse(
"example.com", kEndpoint.address())),
- false /* delay */);
- rules.emplace_back(
- "example.com", dns_protocol::kTypeAAAA, SecureDnsMode::AUTOMATIC,
- MockDnsClientRule::Result(MockDnsClientRule::EMPTY), false /* delay */);
+ false /* delay */, &context);
+ rules.emplace_back("example.com", dns_protocol::kTypeAAAA,
+ SecureDnsMode::AUTOMATIC,
+ MockDnsClientRule::Result(MockDnsClientRule::EMPTY),
+ false /* delay */, &context);
SetMockDnsRules(std::move(rules));
auto resolver = std::make_unique<ContextHostResolver>(manager_.get());
+ resolver->SetRequestContext(&context);
std::unique_ptr<HostResolver::ResolveHostRequest> request =
resolver->CreateRequest(HostPortPair("example.com", 100),
NetLogWithSource(), base::nullopt);
diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
index 1918587..0cb763a 100644
--- a/net/dns/host_resolver_manager.cc
+++ b/net/dns/host_resolver_manager.cc
@@ -21,6 +21,7 @@
#include <cmath>
#include <limits>
#include <memory>
+#include <tuple>
#include <unordered_set>
#include <utility>
@@ -82,6 +83,7 @@
#include "net/log/net_log_with_source.h"
#include "net/socket/client_socket_factory.h"
#include "net/socket/datagram_client_socket.h"
+#include "net/url_request/url_request_context.h"
#include "url/url_canon_ip.h"
#if BUILDFLAG(ENABLE_MDNS)
@@ -496,11 +498,13 @@
RequestImpl(const NetLogWithSource& source_net_log,
const HostPortPair& request_host,
const base::Optional<ResolveHostParameters>& optional_parameters,
+ URLRequestContext* request_context,
base::WeakPtr<HostResolverManager> resolver)
: source_net_log_(source_net_log),
request_host_(request_host),
parameters_(optional_parameters ? optional_parameters.value()
: ResolveHostParameters()),
+ request_context_(request_context),
host_resolver_flags_(
HostResolver::ParametersToHostResolverFlags(parameters_)),
priority_(parameters_.initial_priority),
@@ -630,6 +634,8 @@
const ResolveHostParameters& parameters() const { return parameters_; }
+ URLRequestContext* request_context() const { return request_context_; }
+
HostResolverFlags host_resolver_flags() const { return host_resolver_flags_; }
RequestPriority priority() const { return priority_; }
@@ -652,6 +658,7 @@
const HostPortPair request_host_;
const ResolveHostParameters parameters_;
+ URLRequestContext* const request_context_;
const HostResolverFlags host_resolver_flags_;
RequestPriority priority_;
@@ -694,13 +701,17 @@
typedef base::OnceCallback<void(int net_error, const AddressList& addr_list)>
Callback;
- ProcTask(const Key& key,
+ ProcTask(std::string hostname,
+ AddressFamily address_family,
+ HostResolverFlags flags,
const ProcTaskParams& params,
Callback callback,
scoped_refptr<base::TaskRunner> proc_task_runner,
const NetLogWithSource& job_net_log,
const base::TickClock* tick_clock)
- : key_(key),
+ : hostname_(std::move(hostname)),
+ address_family_(address_family),
+ flags_(flags),
params_(params),
callback_(std::move(callback)),
network_task_runner_(base::ThreadTaskRunnerHandle::Get()),
@@ -709,9 +720,6 @@
net_log_(job_net_log),
tick_clock_(tick_clock),
weak_ptr_factory_(this) {
- // ProcTask only supports resolving addresses.
- DCHECK(IsAddressType(key_.dns_query_type));
-
DCHECK(callback_);
if (!params_.resolver_proc.get())
params_.resolver_proc = HostResolverProc::GetDefault();
@@ -759,8 +767,9 @@
start_time, attempt_number_, tick_clock_);
proc_task_runner_->PostTask(
FROM_HERE,
- base::BindOnce(&ProcTask::DoLookup, key_, params_.resolver_proc,
- network_task_runner_, std::move(completion_callback)));
+ base::BindOnce(&ProcTask::DoLookup, hostname_, address_family_, flags_,
+ params_.resolver_proc, network_task_runner_,
+ std::move(completion_callback)));
net_log_.AddEvent(NetLogEventType::HOST_RESOLVER_IMPL_ATTEMPT_STARTED,
NetLog::IntCallback("attempt_number", attempt_number_));
@@ -785,16 +794,16 @@
// careful about using other objects (like MessageLoops, Singletons, etc).
// During shutdown these objects may no longer exist.
static void DoLookup(
- Key key,
+ std::string hostname,
+ AddressFamily address_family,
+ HostResolverFlags flags,
scoped_refptr<HostResolverProc> resolver_proc,
scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
AttemptCompletionCallback completion_callback) {
AddressList results;
int os_error = 0;
- int error = resolver_proc->Resolve(
- key.hostname,
- HostResolver::DnsQueryTypeToAddressFamily(key.dns_query_type),
- key.host_resolver_flags, &results, &os_error);
+ int error = resolver_proc->Resolve(std::move(hostname), address_family,
+ flags, &results, &os_error);
network_task_runner->PostTask(
FROM_HERE, base::BindOnce(std::move(completion_callback), results,
@@ -863,7 +872,9 @@
std::move(callback_).Run(error, results);
}
- Key key_;
+ const std::string hostname_;
+ const AddressFamily address_family_;
+ const HostResolverFlags flags_;
// Holds an owning reference to the HostResolverProc that we are going to use.
// This may not be the current resolver procedure by the time we call
@@ -917,7 +928,6 @@
// only needs to run one transaction.
virtual void OnFirstDnsTransactionComplete() = 0;
- virtual URLRequestContext* url_request_context() = 0;
virtual RequestPriority priority() const = 0;
protected:
@@ -926,13 +936,17 @@
};
DnsTask(DnsClient* client,
- const Key& key,
+ base::StringPiece hostname,
+ DnsQueryType query_type,
+ URLRequestContext* request_context,
bool allow_fallback_resolution,
Delegate* delegate,
const NetLogWithSource& job_net_log,
const base::TickClock* tick_clock)
: client_(client),
- key_(key),
+ hostname_(hostname),
+ query_type_(query_type),
+ request_context_(request_context),
allow_fallback_resolution_(allow_fallback_resolution),
delegate_(delegate),
net_log_(job_net_log),
@@ -946,7 +960,7 @@
bool allow_fallback_resolution() const { return allow_fallback_resolution_; }
bool needs_two_transactions() const {
- return key_.dns_query_type == DnsQueryType::UNSPECIFIED;
+ return query_type_ == DnsQueryType::UNSPECIFIED;
}
bool needs_another_transaction() const {
@@ -958,10 +972,10 @@
DCHECK(!transaction1_);
net_log_.BeginEvent(NetLogEventType::HOST_RESOLVER_IMPL_DNS_TASK);
- if (key_.dns_query_type == DnsQueryType::UNSPECIFIED) {
+ if (query_type_ == DnsQueryType::UNSPECIFIED) {
transaction1_ = CreateTransaction(DnsQueryType::A);
} else {
- transaction1_ = CreateTransaction(key_.dns_query_type);
+ transaction1_ = CreateTransaction(query_type_);
}
transaction1_->Start();
}
@@ -987,19 +1001,19 @@
// the DoH server names. This is needed to prevent infinite recursion.
DCHECK(client_->GetConfig());
for (auto& doh_server : client_->GetConfig()->dns_over_https_servers) {
- if (key_.hostname.compare(GURL(GetURLFromTemplateWithoutParameters(
- doh_server.server_template))
- .host()) == 0) {
+ if (hostname_.compare(GURL(GetURLFromTemplateWithoutParameters(
+ doh_server.server_template))
+ .host()) == 0) {
secure_dns_mode = SecureDnsMode::OFF;
}
}
std::unique_ptr<DnsTransaction> trans =
client_->GetTransactionFactory()->CreateTransaction(
- key_.hostname, DnsQueryTypeToQtype(dns_query_type),
+ hostname_, DnsQueryTypeToQtype(dns_query_type),
base::BindOnce(&DnsTask::OnTransactionComplete,
base::Unretained(this), tick_clock_->NowTicks(),
dns_query_type),
- net_log_, secure_dns_mode, delegate_->url_request_context());
+ net_log_, secure_dns_mode, request_context_);
trans->SetRequestPriority(delegate_->priority());
return trans;
}
@@ -1081,8 +1095,6 @@
if (needs_two_transactions() && num_completed_transactions_ == 1) {
saved_results_ = std::move(results);
saved_secure_ = secure;
- // No need to repeat the suffix search.
- key_.hostname = transaction->GetHostname();
delegate_->OnFirstDnsTransactionComplete();
return;
}
@@ -1370,7 +1382,9 @@
}
DnsClient* client_;
- Key key_;
+ std::string hostname_;
+ const DnsQueryType query_type_;
+ URLRequestContext* const request_context_;
// Whether resolution may fallback to other task types (e.g. ProcTask) on
// failure of this task.
@@ -1401,6 +1415,20 @@
//-----------------------------------------------------------------------------
+struct HostResolverManager::JobKey {
+ bool operator<(const JobKey& other) const {
+ return std::tie(query_type, flags, source, request_context, hostname) <
+ std::tie(other.query_type, other.flags, other.source,
+ other.request_context, other.hostname);
+ }
+
+ std::string hostname;
+ DnsQueryType query_type;
+ HostResolverFlags flags;
+ HostResolverSource source;
+ URLRequestContext* request_context;
+};
+
// Aggregates all Requests for the same Key. Dispatched via PriorityDispatch.
class HostResolverManager::Job : public PrioritizedDispatcher::Job,
public HostResolverManager::DnsTask::Delegate {
@@ -1408,13 +1436,21 @@
// Creates new job for |key| where |request_net_log| is bound to the
// request that spawned it.
Job(const base::WeakPtr<HostResolverManager>& resolver,
- const Key& key,
+ base::StringPiece hostname,
+ DnsQueryType query_type,
+ HostResolverFlags host_resolver_flags,
+ HostResolverSource requested_source,
+ URLRequestContext* request_context,
RequestPriority priority,
scoped_refptr<base::TaskRunner> proc_task_runner,
const NetLogWithSource& source_net_log,
const base::TickClock* tick_clock)
: resolver_(resolver),
- key_(key),
+ hostname_(hostname),
+ query_type_(query_type),
+ host_resolver_flags_(host_resolver_flags),
+ requested_source_(requested_source),
+ request_context_(request_context),
priority_tracker_(priority),
proc_task_runner_(std::move(proc_task_runner)),
had_non_speculative_request_(false),
@@ -1429,7 +1465,7 @@
net_log_.BeginEvent(NetLogEventType::HOST_RESOLVER_IMPL_JOB,
base::Bind(&NetLogJobCreationCallback,
- source_net_log.source(), &key_.hostname));
+ source_net_log.source(), &hostname_));
}
~Job() override {
@@ -1478,7 +1514,7 @@
}
void AddRequest(RequestImpl* request) {
- DCHECK_EQ(key_.hostname, request->request_host().host());
+ DCHECK_EQ(hostname_, request->request_host().host());
request->AssignJob(this);
@@ -1502,7 +1538,7 @@
}
void ChangeRequestPriority(RequestImpl* req, RequestPriority priority) {
- DCHECK_EQ(key_.hostname, req->request_host().host());
+ DCHECK_EQ(hostname_, req->request_host().host());
priority_tracker_.Remove(req->priority());
req->set_priority(priority);
@@ -1513,7 +1549,7 @@
// Detach cancelled request. If it was the last active Request, also finishes
// this Job.
void CancelRequest(RequestImpl* request) {
- DCHECK_EQ(key_.hostname, request->request_host().host());
+ DCHECK_EQ(hostname_, request->request_host().host());
DCHECK(!requests_.empty());
LogCancelRequest(request->source_net_log());
@@ -1584,7 +1620,7 @@
// Job must be saved in |resolver_| to be completed asynchronously.
// Otherwise the job will be destroyed with requests silently cancelled
// before completion runs.
- DCHECK_EQ(1u, resolver_->jobs_.count(key_));
+ DCHECK(self_iterator_);
base::SequencedTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(&Job::CompleteRequestsWithError,
weak_ptr_factory_.GetWeakPtr(),
@@ -1602,7 +1638,9 @@
// this Job was destroyed.
bool ServeFromHosts() {
DCHECK_GT(num_active_requests(), 0u);
- base::Optional<HostCache::Entry> results = resolver_->ServeFromHosts(key());
+ base::Optional<HostCache::Entry> results = resolver_->ServeFromHosts(
+ hostname_, query_type_,
+ host_resolver_flags_ & HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6);
if (results) {
// This will destroy the Job.
CompleteRequests(results.value(), base::TimeDelta(),
@@ -1612,7 +1650,16 @@
return false;
}
- const Key& key() const { return key_; }
+ void OnAddedToJobMap(JobMap::iterator iterator) {
+ DCHECK(!self_iterator_);
+ DCHECK(iterator != resolver_->jobs_.end());
+ self_iterator_ = iterator;
+ }
+
+ void OnRemovedFromJobMap() {
+ DCHECK(self_iterator_);
+ self_iterator_ = base::nullopt;
+ }
bool is_queued() const { return !handle_.is_null(); }
@@ -1621,6 +1668,13 @@
}
private:
+ HostCache::Key GenerateCacheKey(bool secure) const {
+ HostCache::Key cache_key(hostname_, query_type_, host_resolver_flags_,
+ requested_source_);
+ cache_key.secure = secure;
+ return cache_key;
+ }
+
void KillDnsTask() {
if (dns_task_) {
ReduceToOneJobSlot();
@@ -1667,7 +1721,7 @@
start_time_ = tick_clock_->NowTicks();
- switch (key_.host_resolver_source) {
+ switch (requested_source_) {
case HostResolverSource::ANY:
// Force address queries with canonname to use ProcTask to counter poor
// CNAME support in DnsTask. See https://crbug.com/872665
@@ -1676,13 +1730,13 @@
// address queries). But if hostname appears to be an MDNS name (ends in
// *.local), go with ProcTask for address queries and MdnsTask for non-
// address queries.
- if ((key_.host_resolver_flags & HOST_RESOLVER_CANONNAME) &&
- IsAddressType(key_.dns_query_type)) {
+ if ((host_resolver_flags_ & HOST_RESOLVER_CANONNAME) &&
+ IsAddressType(query_type_)) {
StartProcTask();
- } else if (!ResemblesMulticastDNSName(key_.hostname)) {
- StartDnsTask(IsAddressType(
- key_.dns_query_type) /* allow_fallback_resolution */);
- } else if (IsAddressType(key_.dns_query_type)) {
+ } else if (!ResemblesMulticastDNSName(hostname_)) {
+ StartDnsTask(
+ IsAddressType(query_type_) /* allow_fallback_resolution */);
+ } else if (IsAddressType(query_type_)) {
StartProcTask();
} else {
StartMdnsTask();
@@ -1712,10 +1766,11 @@
// PrioritizedDispatcher with tighter limits.
void StartProcTask() {
DCHECK(!is_running());
- DCHECK(IsAddressType(key_.dns_query_type));
+ DCHECK(IsAddressType(query_type_));
proc_task_ = std::make_unique<ProcTask>(
- key_, resolver_->proc_params_,
+ hostname_, HostResolver::DnsQueryTypeToAddressFamily(query_type_),
+ host_resolver_flags_, resolver_->proc_params_,
base::BindOnce(&Job::OnProcTaskComplete, base::Unretained(this),
tick_clock_->NowTicks()),
proc_task_runner_, net_log_, tick_clock_);
@@ -1769,9 +1824,9 @@
// Need to create the task even if we're going to post a failure instead of
// running it, as a "started" job needs a task to be properly cleaned up.
- dns_task_.reset(new DnsTask(resolver_->dns_client_.get(), key_,
- allow_fallback_resolution, this, net_log_,
- tick_clock_));
+ dns_task_.reset(new DnsTask(
+ resolver_->dns_client_.get(), hostname_, query_type_, request_context_,
+ allow_fallback_resolution, this, net_log_, tick_clock_));
if (resolver_->HaveDnsConfig()) {
dns_task_->StartFirstTransaction();
@@ -1884,21 +1939,21 @@
// No flags are supported for MDNS except
// HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6 (which is not actually an
// input flag).
- DCHECK_EQ(0, key_.host_resolver_flags &
+ DCHECK_EQ(0, host_resolver_flags_ &
~HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6);
std::vector<DnsQueryType> query_types;
- if (key_.dns_query_type == DnsQueryType::UNSPECIFIED) {
+ if (query_type_ == DnsQueryType::UNSPECIFIED) {
query_types.push_back(DnsQueryType::A);
query_types.push_back(DnsQueryType::AAAA);
} else {
- query_types.push_back(key_.dns_query_type);
+ query_types.push_back(query_type_);
}
MDnsClient* client;
int rv = resolver_->GetOrCreateMdnsClient(&client);
- mdns_task_ = std::make_unique<HostResolverMdnsTask>(client, key_.hostname,
- query_types);
+ mdns_task_ =
+ std::make_unique<HostResolverMdnsTask>(client, hostname_, query_types);
if (rv == OK) {
mdns_task_->Start(
@@ -1934,10 +1989,6 @@
CompleteRequestsWithError(rv);
}
- URLRequestContext* url_request_context() override {
- return resolver_->url_request_context_;
- }
-
void RecordJobHistograms(int error) {
// Used in UMA_HISTOGRAM_ENUMERATION. Do not renumber entries or reuse
// deprecated values.
@@ -1957,7 +2008,7 @@
if (had_non_speculative_request_) {
category = RESOLVE_SUCCESS;
UMA_HISTOGRAM_LONG_TIMES_100("Net.DNS.ResolveSuccessTime", duration);
- switch (key_.dns_query_type) {
+ switch (query_type_) {
case DnsQueryType::A:
UMA_HISTOGRAM_LONG_TIMES_100("Net.DNS.ResolveSuccessTime.IPV4",
duration);
@@ -1985,7 +2036,7 @@
if (had_non_speculative_request_) {
category = RESOLVE_FAIL;
UMA_HISTOGRAM_LONG_TIMES_100("Net.DNS.ResolveFailureTime", duration);
- switch (key_.dns_query_type) {
+ switch (query_type_) {
case DnsQueryType::A:
UMA_HISTOGRAM_LONG_TIMES_100("Net.DNS.ResolveFailureTime.IPV4",
duration);
@@ -2033,7 +2084,9 @@
// new job with the same key in case one of the OnComplete callbacks decides
// to spawn one. Consequently, if the job was owned by |jobs_|, the job
// deletes itself when CompleteRequests is done.
- std::unique_ptr<Job> self_deleter = resolver_->RemoveJob(this);
+ std::unique_ptr<Job> self_deleter;
+ if (self_iterator_)
+ self_deleter = resolver_->RemoveJob(self_iterator_.value());
if (is_running()) {
proc_task_ = nullptr;
@@ -2061,11 +2114,8 @@
bool did_complete = (results.error() != ERR_NETWORK_CHANGED) &&
(results.error() != ERR_HOST_RESOLVER_QUEUE_TOO_LARGE);
- if (did_complete && allow_cache) {
- Key effective_key = key_;
- effective_key.secure = secure;
- resolver_->CacheResult(effective_key, results, ttl);
- }
+ if (did_complete && allow_cache)
+ resolver_->CacheResult(GenerateCacheKey(secure), results, ttl);
RecordJobHistograms(results.error());
@@ -2124,7 +2174,11 @@
base::WeakPtr<HostResolverManager> resolver_;
- Key key_;
+ const std::string hostname_;
+ const DnsQueryType query_type_;
+ const HostResolverFlags host_resolver_flags_;
+ const HostResolverSource requested_source_;
+ URLRequestContext* const request_context_;
// Tracks the highest priority across |requests_|.
PriorityTracker priority_tracker_;
@@ -2160,6 +2214,9 @@
// A handle used in |HostResolverManager::dispatcher_|.
PrioritizedDispatcher::Handle handle_;
+ // Iterator to |this| in the JobMap. |nullopt| if not owned by the JobMap.
+ base::Optional<JobMap::iterator> self_iterator_;
+
base::WeakPtrFactory<Job> weak_ptr_factory_;
};
@@ -2178,7 +2235,6 @@
additional_resolver_flags_(0),
use_proctask_by_default_(false),
allow_fallback_to_proctask_(true),
- url_request_context_(nullptr),
tick_clock_(base::DefaultTickClock::GetInstance()),
weak_ptr_factory_(this),
probe_weak_ptr_factory_(this) {
@@ -2260,9 +2316,11 @@
HostResolverManager::CreateRequest(
const HostPortPair& host,
const NetLogWithSource& net_log,
- const base::Optional<ResolveHostParameters>& optional_parameters) {
+ const base::Optional<ResolveHostParameters>& optional_parameters,
+ URLRequestContext* request_context) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
return std::make_unique<RequestImpl>(net_log, host, optional_parameters,
+ request_context,
weak_ptr_factory_.GetWeakPtr());
}
@@ -2370,14 +2428,6 @@
UpdateDNSConfig(true);
}
-void HostResolverManager::SetRequestContext(URLRequestContext* context) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-
- if (context != url_request_context_) {
- url_request_context_ = context;
- }
-}
-
const std::vector<DnsConfig::DnsOverHttpsServerConfig>*
HostResolverManager::GetDnsOverHttpsServersForTesting() const {
if (!dns_config_overrides_.dns_over_https_servers ||
@@ -2446,13 +2496,14 @@
LogStartRequest(request->source_net_log(), request->request_host());
- Key key;
+ DnsQueryType effective_query_type;
+ HostResolverFlags effective_host_resolver_flags;
base::Optional<HostCache::EntryStaleness> stale_info;
HostCache::Entry results = ResolveLocally(
request->request_host().host(), request->parameters().dns_query_type,
request->parameters().source, request->host_resolver_flags(),
- request->parameters().cache_usage, request->source_net_log(), &key,
- &stale_info);
+ request->parameters().cache_usage, request->source_net_log(),
+ &effective_query_type, &effective_host_resolver_flags, &stale_info);
if (results.error() != ERR_DNS_CACHE_MISS ||
request->parameters().source == HostResolverSource::LOCAL_ONLY) {
if (results.error() == OK && !request->parameters().is_speculative) {
@@ -2467,7 +2518,8 @@
return results.error();
}
- int rv = CreateAndStartJob(key, request);
+ int rv = CreateAndStartJob(effective_query_type,
+ effective_host_resolver_flags, request);
// At this point, expect only async or errors.
DCHECK_NE(OK, rv);
@@ -2481,7 +2533,8 @@
HostResolverFlags flags,
ResolveHostParameters::CacheUsage cache_usage,
const NetLogWithSource& source_net_log,
- Key* out_key,
+ DnsQueryType* out_effective_query_type,
+ HostResolverFlags* out_effective_host_resolver_flags,
base::Optional<HostCache::EntryStaleness>* out_stale_info) {
DCHECK(out_stale_info);
*out_stale_info = base::nullopt;
@@ -2504,12 +2557,14 @@
}
}
- // Build a key that identifies the request in the cache and in the
- // outstanding jobs map. If this key is used in the future to store an entry
- // in the cache, it will be modified first to indicate whether the result was
- // obtained securely or not.
- *out_key = GetEffectiveKeyForRequest(hostname, dns_query_type, source, flags,
- ip_address_ptr, source_net_log);
+ GetEffectiveParametersForRequest(dns_query_type, flags, ip_address_ptr,
+ source_net_log, out_effective_query_type,
+ out_effective_host_resolver_flags);
+ bool resolve_canonname =
+ *out_effective_host_resolver_flags & HOST_RESOLVER_CANONNAME;
+ bool default_family_due_to_no_ipv6 =
+ *out_effective_host_resolver_flags &
+ HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6;
// The result of |getaddrinfo| for empty hosts is inconsistent across systems.
// On Windows it gives the default interface's address, whereas on Linux it
@@ -2520,21 +2575,23 @@
}
base::Optional<HostCache::Entry> resolved =
- ResolveAsIP(*out_key, ip_address_ptr);
+ ResolveAsIP(*out_effective_query_type, resolve_canonname, ip_address_ptr);
if (resolved)
return resolved.value();
// Special-case localhost names, as per the recommendations in
// https://tools.ietf.org/html/draft-west-let-localhost-be-localhost.
- resolved = ServeLocalhost(*out_key);
+ resolved = ServeLocalhost(hostname, *out_effective_query_type,
+ default_family_due_to_no_ipv6);
if (resolved)
return resolved.value();
if (cache_usage == ResolveHostParameters::CacheUsage::ALLOWED ||
cache_usage == ResolveHostParameters::CacheUsage::STALE_ALLOWED) {
+ HostCache::Key key(hostname, *out_effective_query_type,
+ *out_effective_host_resolver_flags, source);
resolved = ServeFromCache(
- *out_key,
- cache_usage == ResolveHostParameters::CacheUsage::STALE_ALLOWED,
+ key, cache_usage == ResolveHostParameters::CacheUsage::STALE_ALLOWED,
out_stale_info);
if (resolved) {
DCHECK(out_stale_info->has_value());
@@ -2548,7 +2605,8 @@
// TODO(szym): Do not do this if nsswitch.conf instructs not to.
// http://crbug.com/117655
- resolved = ServeFromHosts(*out_key);
+ resolved = ServeFromHosts(hostname, *out_effective_query_type,
+ default_family_due_to_no_ipv6);
if (resolved) {
source_net_log.AddEvent(NetLogEventType::HOST_RESOLVER_IMPL_HOSTS_HIT,
resolved.value().CreateNetLogCallback());
@@ -2558,14 +2616,23 @@
return HostCache::Entry(ERR_DNS_CACHE_MISS, HostCache::Entry::SOURCE_UNKNOWN);
}
-int HostResolverManager::CreateAndStartJob(const Key& key,
- RequestImpl* request) {
+int HostResolverManager::CreateAndStartJob(
+ DnsQueryType effective_query_type,
+ HostResolverFlags effective_host_resolver_flags,
+ RequestImpl* request) {
+ JobKey key = {request->request_host().host(), effective_query_type,
+ effective_host_resolver_flags, request->parameters().source,
+ request->request_context()};
+
auto jobit = jobs_.find(key);
Job* job;
if (jobit == jobs_.end()) {
auto new_job = std::make_unique<Job>(
- weak_ptr_factory_.GetWeakPtr(), key, request->priority(),
- proc_task_runner_, request->source_net_log(), tick_clock_);
+ weak_ptr_factory_.GetWeakPtr(), request->request_host().host(),
+ effective_query_type, effective_host_resolver_flags,
+ request->parameters().source, request->request_context(),
+ request->priority(), proc_task_runner_, request->source_net_log(),
+ tick_clock_);
job = new_job.get();
new_job->Schedule(false);
DCHECK(new_job->is_running() || new_job->is_queued());
@@ -2587,8 +2654,9 @@
}
DCHECK(new_job->is_running() || new_job->is_queued());
- DCHECK(!jobs_[key]);
- jobs_[key] = std::move(new_job);
+ auto insert_result = jobs_.emplace(std::move(key), std::move(new_job));
+ DCHECK(insert_result.second);
+ job->OnAddedToJobMap(insert_result.first);
} else {
job = jobit->second.get();
}
@@ -2599,28 +2667,29 @@
}
base::Optional<HostCache::Entry> HostResolverManager::ResolveAsIP(
- const Key& key,
+ DnsQueryType query_type,
+ bool resolve_canonname,
const IPAddress* ip_address) {
- if (ip_address == nullptr || !IsAddressType(key.dns_query_type))
+ if (ip_address == nullptr || !IsAddressType(query_type))
return base::nullopt;
AddressFamily family = GetAddressFamily(*ip_address);
- if (key.dns_query_type != DnsQueryType::UNSPECIFIED &&
- key.dns_query_type != AddressFamilyToDnsQueryType(family)) {
+ if (query_type != DnsQueryType::UNSPECIFIED &&
+ query_type != AddressFamilyToDnsQueryType(family)) {
// Don't return IPv6 addresses for IPv4 queries, and vice versa.
return HostCache::Entry(ERR_NAME_NOT_RESOLVED,
HostCache::Entry::SOURCE_UNKNOWN);
}
AddressList addresses = AddressList::CreateFromIPAddress(*ip_address, 0);
- if (key.host_resolver_flags & HOST_RESOLVER_CANONNAME)
+ if (resolve_canonname)
addresses.SetDefaultCanonicalName();
return HostCache::Entry(OK, std::move(addresses),
HostCache::Entry::SOURCE_UNKNOWN);
}
base::Optional<HostCache::Entry> HostResolverManager::ServeFromCache(
- const Key& key,
+ const HostCache::Key& key,
bool allow_stale,
base::Optional<HostCache::EntryStaleness>* out_stale_info) {
DCHECK(out_stale_info);
@@ -2630,7 +2699,7 @@
return base::nullopt;
// Local-only requests search the cache for non-local-only results.
- Key effective_key = key;
+ HostCache::Key effective_key = key;
if (effective_key.host_resolver_source == HostResolverSource::LOCAL_ONLY)
effective_key.host_resolver_source = HostResolverSource::ANY;
@@ -2652,12 +2721,14 @@
}
base::Optional<HostCache::Entry> HostResolverManager::ServeFromHosts(
- const Key& key) {
- if (!HaveDnsConfig() || !IsAddressType(key.dns_query_type))
+ base::StringPiece hostname,
+ DnsQueryType query_type,
+ bool default_family_due_to_no_ipv6) {
+ if (!HaveDnsConfig() || !IsAddressType(query_type))
return base::nullopt;
// HOSTS lookups are case-insensitive.
- std::string hostname = base::ToLowerASCII(key.hostname);
+ std::string effective_hostname = base::ToLowerASCII(hostname);
const DnsHosts& hosts = dns_client_->GetConfig()->hosts;
@@ -2667,30 +2738,24 @@
// We prefer IPv6 because "happy eyeballs" will fall back to IPv4 if
// necessary.
AddressList addresses;
- if (key.dns_query_type == DnsQueryType::AAAA ||
- key.dns_query_type == DnsQueryType::UNSPECIFIED) {
- auto it = hosts.find(DnsHostsKey(hostname, ADDRESS_FAMILY_IPV6));
+ if (query_type == DnsQueryType::AAAA ||
+ query_type == DnsQueryType::UNSPECIFIED) {
+ auto it = hosts.find(DnsHostsKey(effective_hostname, ADDRESS_FAMILY_IPV6));
if (it != hosts.end())
addresses.push_back(IPEndPoint(it->second, 0));
}
- if (key.dns_query_type == DnsQueryType::A ||
- key.dns_query_type == DnsQueryType::UNSPECIFIED) {
- auto it = hosts.find(DnsHostsKey(hostname, ADDRESS_FAMILY_IPV4));
+ if (query_type == DnsQueryType::A ||
+ query_type == DnsQueryType::UNSPECIFIED) {
+ auto it = hosts.find(DnsHostsKey(effective_hostname, ADDRESS_FAMILY_IPV4));
if (it != hosts.end())
addresses.push_back(IPEndPoint(it->second, 0));
}
// If got only loopback addresses and the family was restricted, resolve
// again, without restrictions. See SystemHostResolverCall for rationale.
- if ((key.host_resolver_flags &
- HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6) &&
- IsAllIPv4Loopback(addresses)) {
- Key new_key(key);
- new_key.dns_query_type = DnsQueryType::UNSPECIFIED;
- new_key.host_resolver_flags &=
- ~HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6;
- return ServeFromHosts(new_key);
+ if (default_family_due_to_no_ipv6 && IsAllIPv4Loopback(addresses)) {
+ return ServeFromHosts(hostname, DnsQueryType::UNSPECIFIED, false);
}
if (!addresses.empty()) {
@@ -2702,10 +2767,12 @@
}
base::Optional<HostCache::Entry> HostResolverManager::ServeLocalhost(
- const Key& key) {
+ base::StringPiece hostname,
+ DnsQueryType query_type,
+ bool default_family_due_to_no_ipv6) {
AddressList resolved_addresses;
- if (!IsAddressType(key.dns_query_type) ||
- !ResolveLocalHostname(key.hostname, &resolved_addresses)) {
+ if (!IsAddressType(query_type) ||
+ !ResolveLocalHostname(hostname, &resolved_addresses)) {
return base::nullopt;
}
@@ -2717,13 +2784,11 @@
// - this is an IPv6 address and caller specifically asked for IPv4 due
// to lack of detected IPv6 support. (See SystemHostResolverCall for
// rationale).
- if (key.dns_query_type == DnsQueryType::UNSPECIFIED ||
- HostResolver::DnsQueryTypeToAddressFamily(key.dns_query_type) ==
+ if (query_type == DnsQueryType::UNSPECIFIED ||
+ HostResolver::DnsQueryTypeToAddressFamily(query_type) ==
address.GetFamily() ||
(address.GetFamily() == ADDRESS_FAMILY_IPV6 &&
- key.dns_query_type == DnsQueryType::A &&
- (key.host_resolver_flags &
- HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6))) {
+ query_type == DnsQueryType::A && default_family_due_to_no_ipv6)) {
filtered_addresses.push_back(address);
}
}
@@ -2732,7 +2797,7 @@
HostCache::Entry::SOURCE_UNKNOWN);
}
-void HostResolverManager::CacheResult(const Key& key,
+void HostResolverManager::CacheResult(const HostCache::Key& key,
const HostCache::Entry& entry,
base::TimeDelta ttl) {
// Don't cache an error unless it has a positive TTL.
@@ -2774,29 +2839,31 @@
}
std::unique_ptr<HostResolverManager::Job> HostResolverManager::RemoveJob(
- Job* job) {
- DCHECK(job);
- std::unique_ptr<Job> retval;
- auto it = jobs_.find(job->key());
- if (it != jobs_.end() && it->second.get() == job) {
- it->second.swap(retval);
- jobs_.erase(it);
- }
- return retval;
+ JobMap::iterator job_it) {
+ DCHECK(job_it != jobs_.end());
+ DCHECK(job_it->second);
+ DCHECK_EQ(1u, jobs_.count(job_it->first));
+
+ std::unique_ptr<Job> job;
+ job_it->second.swap(job);
+ jobs_.erase(job_it);
+ job->OnRemovedFromJobMap();
+
+ return job;
}
-HostResolverManager::Key HostResolverManager::GetEffectiveKeyForRequest(
- const std::string& hostname,
+void HostResolverManager::GetEffectiveParametersForRequest(
DnsQueryType dns_query_type,
- HostResolverSource source,
HostResolverFlags flags,
const IPAddress* ip_address,
- const NetLogWithSource& net_log) {
- HostResolverFlags effective_flags = flags | additional_resolver_flags_;
+ const NetLogWithSource& net_log,
+ DnsQueryType* out_effective_type,
+ HostResolverFlags* out_effective_flags) {
+ *out_effective_flags = flags | additional_resolver_flags_;
- DnsQueryType effective_query_type = dns_query_type;
+ *out_effective_type = dns_query_type;
- if (effective_query_type == DnsQueryType::UNSPECIFIED &&
+ if (*out_effective_type == DnsQueryType::UNSPECIFIED &&
// When resolving IPv4 literals, there's no need to probe for IPv6.
// When resolving IPv6 literals, there's no benefit to artificially
// limiting our resolution based on a probe. Prior logic ensures
@@ -2804,11 +2871,9 @@
// so the code requesting the resolution should be amenable to receiving a
// IPv6 resolution.
!use_local_ipv6_ && ip_address == nullptr && !IsIPv6Reachable(net_log)) {
- effective_query_type = DnsQueryType::A;
- effective_flags |= HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6;
+ *out_effective_type = DnsQueryType::A;
+ *out_effective_flags |= HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6;
}
-
- return Key(hostname, effective_query_type, effective_flags, source);
}
bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) {
@@ -2881,8 +2946,7 @@
for (auto it = jobs_.begin(); it != jobs_.end();) {
Job* job = it->second.get();
if (job->is_running()) {
- jobs_to_abort.push_back(std::move(it->second));
- jobs_.erase(it++);
+ jobs_to_abort.push_back(RemoveJob(it++));
} else {
DCHECK(job->is_queued());
++it;
diff --git a/net/dns/host_resolver_manager.h b/net/dns/host_resolver_manager.h
index fc6d3747..488690c0 100644
--- a/net/dns/host_resolver_manager.h
+++ b/net/dns/host_resolver_manager.h
@@ -25,7 +25,6 @@
#include "net/dns/host_resolver.h"
#include "net/dns/host_resolver_proc.h"
#include "net/dns/public/dns_query_type.h"
-#include "net/url_request/url_request_context.h"
#include "url/gurl.h"
namespace base {
@@ -42,6 +41,7 @@
class MDnsSocketFactory;
class NetLog;
class NetLogWithSource;
+class URLRequestContext;
// Scheduler and controller of host resolution requests. Because of the global
// nature of host resolutions, this class is generally expected to be singleton
@@ -122,7 +122,8 @@
std::unique_ptr<CancellableRequest> CreateRequest(
const HostPortPair& host,
const NetLogWithSource& net_log,
- const base::Optional<ResolveHostParameters>& optional_parameters);
+ const base::Optional<ResolveHostParameters>& optional_parameters,
+ URLRequestContext* request_context);
std::unique_ptr<MdnsListener> CreateMdnsListener(const HostPortPair& host,
DnsQueryType query_type);
void SetDnsClientEnabled(bool enabled);
@@ -146,7 +147,6 @@
void SetDnsConfigOverrides(const DnsConfigOverrides& overrides);
- void SetRequestContext(URLRequestContext* request_context);
const std::vector<DnsConfig::DnsOverHttpsServerConfig>*
GetDnsOverHttpsServersForTesting() const;
@@ -186,12 +186,12 @@
friend class HostResolverManagerTest;
FRIEND_TEST_ALL_PREFIXES(HostResolverManagerDnsTest, ModeForHistogram);
class Job;
+ struct JobKey;
class ProcTask;
class LoopbackProbeJob;
class DnsTask;
class RequestImpl;
- using Key = HostCache::Key;
- using JobMap = std::map<Key, std::unique_ptr<Job>>;
+ using JobMap = std::map<JobKey, std::unique_ptr<Job>>;
// Current resolver mode, useful for breaking down histograms.
enum ModeForHistogram {
@@ -223,8 +223,8 @@
// or ERR_DNS_CACHE_MISS if the host could not be resolved using local
// sources.
//
- // On ERR_DNS_CACHE_MISS and OK, the cache key for the request is written to
- // |out_key|. On other errors, it may not be.
+ // On ERR_DNS_CACHE_MISS and OK, effective request parameters are written to
+ // |out_effective_query_type| and |out_effective_host_resolver_flags|.
//
// If results are returned from the host cache, |out_stale_info| will be
// filled in with information on how stale or fresh the result is. Otherwise,
@@ -239,17 +239,21 @@
HostResolverFlags flags,
ResolveHostParameters::CacheUsage cache_usage,
const NetLogWithSource& request_net_log,
- Key* out_key,
+ DnsQueryType* out_effective_query_type,
+ HostResolverFlags* out_effective_host_resolver_flags,
base::Optional<HostCache::EntryStaleness>* out_stale_info);
// Attempts to create and start a Job to asynchronously attempt to resolve
- // |key|. On success, returns ERR_IO_PENDING and attaches the Job to
+ // |request|. On success, returns ERR_IO_PENDING and attaches the Job to
// |request|. On error, marks |request| completed and returns the error.
- int CreateAndStartJob(const Key& key, RequestImpl* request);
+ int CreateAndStartJob(DnsQueryType effective_query_type,
+ HostResolverFlags effective_host_resolver_flags,
+ RequestImpl* request);
// Tries to resolve |key| and its possible IP address representation,
// |ip_address|. Returns a results entry iff the input can be resolved.
- base::Optional<HostCache::Entry> ResolveAsIP(const Key& key,
+ base::Optional<HostCache::Entry> ResolveAsIP(DnsQueryType query_type,
+ bool resolve_canonname,
const IPAddress* ip_address);
// Returns the result iff a positive match is found for |key| in the cache.
@@ -259,27 +263,32 @@
//
// If |allow_stale| is true, then stale cache entries can be returned.
base::Optional<HostCache::Entry> ServeFromCache(
- const Key& key,
+ const HostCache::Key& key,
bool allow_stale,
base::Optional<HostCache::EntryStaleness>* out_stale_info);
// Iff we have a DnsClient with a valid DnsConfig, and |key| can be resolved
// from the HOSTS file, return the results.
- base::Optional<HostCache::Entry> ServeFromHosts(const Key& key);
+ base::Optional<HostCache::Entry> ServeFromHosts(
+ base::StringPiece hostname,
+ DnsQueryType query_type,
+ bool default_family_due_to_no_ipv6);
// Iff |key| is for a localhost name (RFC 6761) and address DNS query type,
// returns a results entry with the loopback IP.
- base::Optional<HostCache::Entry> ServeLocalhost(const Key& key);
+ base::Optional<HostCache::Entry> ServeLocalhost(
+ base::StringPiece hostname,
+ DnsQueryType query_type,
+ bool default_family_due_to_no_ipv6);
- // Returns the (hostname, address_family) key to use for |info|, choosing an
- // "effective" address family by inheriting the resolver's default address
- // family when the request leaves it unspecified.
- Key GetEffectiveKeyForRequest(const std::string& hostname,
- DnsQueryType dns_query_type,
- HostResolverSource source,
- HostResolverFlags flags,
- const IPAddress* ip_address,
- const NetLogWithSource& net_log);
+ // Determines "effective" request parameters using manager properties and IPv6
+ // reachability.
+ void GetEffectiveParametersForRequest(DnsQueryType dns_query_type,
+ HostResolverFlags flags,
+ const IPAddress* ip_address,
+ const NetLogWithSource& net_log,
+ DnsQueryType* out_effective_type,
+ HostResolverFlags* out_effective_flags);
// Probes IPv6 support and returns true if IPv6 support is enabled.
// Results are cached, i.e. when called repeatedly this method returns result
@@ -294,7 +303,7 @@
virtual void RunLoopbackProbeJob();
// Records the result in cache if cache is present.
- void CacheResult(const Key& key,
+ void CacheResult(const HostCache::Key& key,
const HostCache::Entry& entry,
base::TimeDelta ttl);
@@ -303,8 +312,8 @@
bool from_cache,
base::TimeDelta duration) const;
- // Removes |job| from |jobs_| and return, only if it exists.
- std::unique_ptr<Job> RemoveJob(Job* job);
+ // Removes |job_it| from |jobs_| and return.
+ std::unique_ptr<Job> RemoveJob(JobMap::iterator job_it);
// Aborts all in progress jobs with ERR_NETWORK_CHANGED and notifies their
// requests. Might start new jobs.
@@ -423,8 +432,6 @@
// Current resolver mode, useful for breaking down histogram data.
ModeForHistogram mode_for_histogram_;
- URLRequestContext* url_request_context_;
-
// Shared tick clock, overridden for testing.
const base::TickClock* tick_clock_;
diff --git a/net/dns/host_resolver_manager_unittest.cc b/net/dns/host_resolver_manager_unittest.cc
index d9b620d..1fc4c71f 100644
--- a/net/dns/host_resolver_manager_unittest.cc
+++ b/net/dns/host_resolver_manager_unittest.cc
@@ -52,6 +52,8 @@
#include "net/log/test_net_log.h"
#include "net/test/gtest_util.h"
#include "net/test/test_with_scoped_task_environment.h"
+#include "net/url_request/url_request_context.h"
+#include "net/url_request/url_request_test_util.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -485,7 +487,10 @@
protected:
// testing::Test implementation:
- void SetUp() override { CreateResolver(); }
+ void SetUp() override {
+ CreateResolver();
+ request_context_ = std::make_unique<TestURLRequestContext>();
+ }
void TearDown() override {
if (resolver_.get())
@@ -543,6 +548,7 @@
scoped_refptr<MockHostResolverProc> proc_;
std::unique_ptr<HostResolverManager> resolver_;
+ std::unique_ptr<URLRequestContext> request_context_;
};
TEST_F(HostResolverManagerTest, AsynchronousLookup) {
@@ -550,7 +556,8 @@
proc_->SignalMultiple(1u);
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
@@ -566,6 +573,65 @@
EXPECT_TRUE(cache_result);
}
+TEST_F(HostResolverManagerTest, JobsClearedOnCompletion) {
+ proc_->AddRuleForAllFamilies("just.testing", "192.168.1.42");
+ proc_->SignalMultiple(1u);
+
+ ResolveHostResponseHelper response(resolver_->CreateRequest(
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
+ EXPECT_EQ(1u, resolver_->num_jobs_for_testing());
+
+ EXPECT_THAT(response.result_error(), IsOk());
+ EXPECT_EQ(0u, resolver_->num_jobs_for_testing());
+}
+
+TEST_F(HostResolverManagerTest, JobsClearedOnCompletion_MultipleRequests) {
+ proc_->AddRuleForAllFamilies("just.testing", "192.168.1.42");
+ proc_->SignalMultiple(1u);
+
+ ResolveHostResponseHelper response1(resolver_->CreateRequest(
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
+ ResolveHostResponseHelper response2(resolver_->CreateRequest(
+ HostPortPair("just.testing", 85), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
+ EXPECT_EQ(1u, resolver_->num_jobs_for_testing());
+
+ EXPECT_THAT(response1.result_error(), IsOk());
+ EXPECT_THAT(response2.result_error(), IsOk());
+ EXPECT_EQ(0u, resolver_->num_jobs_for_testing());
+}
+
+TEST_F(HostResolverManagerTest, JobsClearedOnCompletion_Failure) {
+ proc_->AddRuleForAllFamilies(std::string(),
+ "0.0.0.0"); // Default to failures.
+ proc_->SignalMultiple(1u);
+
+ ResolveHostResponseHelper response(resolver_->CreateRequest(
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
+ EXPECT_EQ(1u, resolver_->num_jobs_for_testing());
+
+ EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+ EXPECT_EQ(0u, resolver_->num_jobs_for_testing());
+}
+
+TEST_F(HostResolverManagerTest, JobsClearedOnCompletion_Abort) {
+ proc_->AddRuleForAllFamilies("just.testing", "192.168.1.42");
+
+ ResolveHostResponseHelper response(resolver_->CreateRequest(
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
+ EXPECT_EQ(1u, resolver_->num_jobs_for_testing());
+
+ NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
+ proc_->SignalMultiple(1u);
+
+ EXPECT_THAT(response.result_error(), IsError(ERR_NETWORK_CHANGED));
+ EXPECT_EQ(0u, resolver_->num_jobs_for_testing());
+}
+
TEST_F(HostResolverManagerTest, DnsQueryType) {
proc_->AddRule("host", ADDRESS_FAMILY_IPV4, "192.168.1.20");
proc_->AddRule("host", ADDRESS_FAMILY_IPV6, "::5");
@@ -573,12 +639,14 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::A;
- ResolveHostResponseHelper v4_response(resolver_->CreateRequest(
- HostPortPair("host", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper v4_response(
+ resolver_->CreateRequest(HostPortPair("host", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
parameters.dns_query_type = DnsQueryType::AAAA;
- ResolveHostResponseHelper v6_response(resolver_->CreateRequest(
- HostPortPair("host", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper v6_response(
+ resolver_->CreateRequest(HostPortPair("host", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
proc_->SignalMultiple(2u);
@@ -596,20 +664,23 @@
parameters.dns_query_type = DnsQueryType::A;
ResolveHostResponseHelper v6_v4_response(resolver_->CreateRequest(
- HostPortPair("localhost6", 80), NetLogWithSource(), parameters));
+ HostPortPair("localhost6", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
EXPECT_THAT(v6_v4_response.result_error(), IsOk());
EXPECT_THAT(v6_v4_response.request()->GetAddressResults().value().endpoints(),
testing::IsEmpty());
parameters.dns_query_type = DnsQueryType::AAAA;
ResolveHostResponseHelper v6_v6_response(resolver_->CreateRequest(
- HostPortPair("localhost6", 80), NetLogWithSource(), parameters));
+ HostPortPair("localhost6", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
EXPECT_THAT(v6_v6_response.result_error(), IsOk());
EXPECT_THAT(v6_v6_response.request()->GetAddressResults().value().endpoints(),
testing::ElementsAre(CreateExpected("::1", 80)));
ResolveHostResponseHelper v6_unsp_response(resolver_->CreateRequest(
- HostPortPair("localhost6", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("localhost6", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(v6_unsp_response.result_error(), IsOk());
EXPECT_THAT(
v6_unsp_response.request()->GetAddressResults().value().endpoints(),
@@ -617,20 +688,23 @@
parameters.dns_query_type = DnsQueryType::A;
ResolveHostResponseHelper v4_v4_response(resolver_->CreateRequest(
- HostPortPair("localhost", 80), NetLogWithSource(), parameters));
+ HostPortPair("localhost", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
EXPECT_THAT(v4_v4_response.result_error(), IsOk());
EXPECT_THAT(v4_v4_response.request()->GetAddressResults().value().endpoints(),
testing::ElementsAre(CreateExpected("127.0.0.1", 80)));
parameters.dns_query_type = DnsQueryType::AAAA;
ResolveHostResponseHelper v4_v6_response(resolver_->CreateRequest(
- HostPortPair("localhost", 80), NetLogWithSource(), parameters));
+ HostPortPair("localhost", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
EXPECT_THAT(v4_v6_response.result_error(), IsOk());
EXPECT_THAT(v4_v6_response.request()->GetAddressResults().value().endpoints(),
testing::ElementsAre(CreateExpected("::1", 80)));
ResolveHostResponseHelper v4_unsp_response(resolver_->CreateRequest(
- HostPortPair("localhost", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("localhost", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(v4_unsp_response.result_error(), IsOk());
EXPECT_THAT(
v4_unsp_response.request()->GetAddressResults().value().endpoints(),
@@ -647,8 +721,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.source = HostResolverSource::SYSTEM;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair(kIpLiteral, 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair(kIpLiteral, 80), NetLogWithSource(),
+ parameters, request_context_.get()));
// IP literal resolution is expected to take precedence over source, so the
// result is expected to be the input IP, not the result IP from the proc rule
@@ -663,7 +738,8 @@
proc_->SignalMultiple(1u);
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
@@ -678,7 +754,8 @@
proc_->SignalMultiple(1u);
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetStaleInfo());
@@ -695,7 +772,8 @@
TEST_F(HostResolverManagerTest, AbortedAsynchronousLookup) {
ResolveHostResponseHelper response0(resolver_->CreateRequest(
- HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
ASSERT_FALSE(response0.complete());
ASSERT_TRUE(proc_->WaitFor(1u));
@@ -707,7 +785,8 @@
// To ensure there was no spurious callback, complete with a new resolver.
CreateResolver();
ResolveHostResponseHelper response1(resolver_->CreateRequest(
- HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
proc_->SignalMultiple(2u);
@@ -719,7 +798,8 @@
TEST_F(HostResolverManagerTest, NumericIPv4Address) {
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("127.1.2.3", 5555), NetLogWithSource(), base::nullopt));
+ HostPortPair("127.1.2.3", 5555), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
@@ -730,7 +810,8 @@
// Resolve a plain IPv6 address. Don't worry about [brackets], because
// the caller should have removed them.
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("2001:db8::1", 5555), NetLogWithSource(), base::nullopt));
+ HostPortPair("2001:db8::1", 5555), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
@@ -739,7 +820,8 @@
TEST_F(HostResolverManagerTest, EmptyHost) {
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair(std::string(), 5555), NetLogWithSource(), base::nullopt));
+ HostPortPair(std::string(), 5555), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
@@ -747,9 +829,9 @@
TEST_F(HostResolverManagerTest, EmptyDotsHost) {
for (int i = 0; i < 16; ++i) {
- ResolveHostResponseHelper response(
- resolver_->CreateRequest(HostPortPair(std::string(i, '.'), 5555),
- NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(resolver_->CreateRequest(
+ HostPortPair(std::string(i, '.'), 5555), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
@@ -757,9 +839,9 @@
}
TEST_F(HostResolverManagerTest, LongHost) {
- ResolveHostResponseHelper response(
- resolver_->CreateRequest(HostPortPair(std::string(4097, 'a'), 5555),
- NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(resolver_->CreateRequest(
+ HostPortPair(std::string(4097, 'a'), 5555), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
@@ -769,21 +851,21 @@
// Start 5 requests, duplicating hosts "a" and "b". Since the resolver_proc is
// blocked, these should all pile up until we signal it.
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("a", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("b", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("b", 81), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("a", 82), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("b", 83), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("b", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("b", 81), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("a", 82), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("b", 83), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
for (auto& response : responses) {
ASSERT_FALSE(response->complete());
@@ -798,21 +880,21 @@
TEST_F(HostResolverManagerTest, CancelMultipleRequests) {
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("a", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("b", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("b", 81), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("a", 82), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("b", 83), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("b", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("b", 81), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("a", 82), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("b", 83), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
for (auto& response : responses) {
ASSERT_FALSE(response->complete());
@@ -842,14 +924,14 @@
std::string hostname = "a_";
hostname[1] = 'a' + i;
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair(hostname, 80), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair(hostname, 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
ASSERT_FALSE(responses.back()->complete());
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair(hostname, 81), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair(hostname, 81), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
ASSERT_FALSE(responses.back()->complete());
}
@@ -889,22 +971,23 @@
ResolveHostResponseHelper cancelling_response(
resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource(),
- base::nullopt),
+ base::nullopt, request_context_.get()),
std::move(custom_callback));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("a", 81), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("a", 82), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("a", 81), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("a", 82), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
proc_->SignalMultiple(2u); // One for "a". One for "finalrequest".
EXPECT_THAT(cancelling_response.result_error(), IsOk());
ResolveHostResponseHelper final_response(resolver_->CreateRequest(
- HostPortPair("finalrequest", 70), NetLogWithSource(), base::nullopt));
+ HostPortPair("finalrequest", 70), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(final_response.result_error(), IsOk());
for (auto& response : responses) {
@@ -930,18 +1013,18 @@
ResolveHostResponseHelper deleting_response(
resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource(),
- base::nullopt),
+ base::nullopt, request_context_.get()),
std::move(custom_callback));
// Start additional requests to be cancelled as part of the first's deletion.
// Assumes all requests for a job are handled in order so that the deleting
// request will run first and cancel the rest.
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("a", 81), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("a", 82), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("a", 81), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("a", 82), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
proc_->SignalMultiple(3u);
@@ -977,18 +1060,18 @@
ResolveHostResponseHelper deleting_response(
resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource(),
- base::nullopt),
+ base::nullopt, request_context_.get()),
std::move(custom_callback));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("a", 81), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("b", 82), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("b", 83), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("a", 81), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("b", 82), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("b", 83), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
// Wait for all calls to queue up, trigger abort via IP address change, then
// signal all the queued requests to let them all try to finish.
@@ -1009,13 +1092,14 @@
[&](CompletionOnceCallback completion_callback, int error) {
new_response = std::make_unique<ResolveHostResponseHelper>(
resolver_->CreateRequest(HostPortPair("new", 70),
- NetLogWithSource(), base::nullopt));
+ NetLogWithSource(), base::nullopt,
+ request_context_.get()));
std::move(completion_callback).Run(error);
});
ResolveHostResponseHelper starting_response(
resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource(),
- base::nullopt),
+ base::nullopt, request_context_.get()),
std::move(custom_callback));
proc_->SignalMultiple(2u); // One for "a". One for "new".
@@ -1033,23 +1117,27 @@
[&](CompletionOnceCallback completion_callback, int error) {
new_response = std::make_unique<ResolveHostResponseHelper>(
resolver_->CreateRequest(HostPortPair("new", 70),
- NetLogWithSource(), base::nullopt));
+ NetLogWithSource(), base::nullopt,
+ request_context_.get()));
std::move(completion_callback).Run(error);
});
- ResolveHostResponseHelper initial_response(resolver_->CreateRequest(
- HostPortPair("initial", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper initial_response(
+ resolver_->CreateRequest(HostPortPair("initial", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ResolveHostResponseHelper evictee1_response(
resolver_->CreateRequest(HostPortPair("evictee1", 80), NetLogWithSource(),
- base::nullopt),
+ base::nullopt, request_context_.get()),
std::move(custom_callback));
- ResolveHostResponseHelper evictee2_response(resolver_->CreateRequest(
- HostPortPair("evictee2", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper evictee2_response(
+ resolver_->CreateRequest(HostPortPair("evictee2", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
// Now one running request ("initial") and two queued requests ("evictee1" and
// "evictee2"). Any further requests will cause evictions.
- ResolveHostResponseHelper evictor_response(resolver_->CreateRequest(
- HostPortPair("evictor", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper evictor_response(
+ resolver_->CreateRequest(HostPortPair("evictor", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(evictee1_response.result_error(),
IsError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE));
@@ -1075,21 +1163,24 @@
[&](CompletionOnceCallback completion_callback, int error) {
new_response = std::make_unique<ResolveHostResponseHelper>(
resolver_->CreateRequest(HostPortPair("new", 70),
- NetLogWithSource(), base::nullopt));
+ NetLogWithSource(), base::nullopt,
+ request_context_.get()));
std::move(completion_callback).Run(error);
});
- ResolveHostResponseHelper initial_response(resolver_->CreateRequest(
- HostPortPair("initial", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper initial_response(
+ resolver_->CreateRequest(HostPortPair("initial", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ResolveHostResponseHelper evictee_response(
resolver_->CreateRequest(HostPortPair("evictee", 80), NetLogWithSource(),
- base::nullopt),
+ base::nullopt, request_context_.get()),
std::move(custom_callback));
// Now one running request ("initial") and one queued requests ("evictee").
// Any further requests will cause evictions.
- ResolveHostResponseHelper evictor_response(resolver_->CreateRequest(
- HostPortPair("evictor", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper evictor_response(
+ resolver_->CreateRequest(HostPortPair("evictor", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(evictee_response.result_error(),
IsError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE));
@@ -1112,23 +1203,27 @@
[&](CompletionOnceCallback completion_callback, int error) {
new_response = std::make_unique<ResolveHostResponseHelper>(
resolver_->CreateRequest(HostPortPair("evictor", 70),
- NetLogWithSource(), base::nullopt));
+ NetLogWithSource(), base::nullopt,
+ request_context_.get()));
std::move(completion_callback).Run(error);
});
- ResolveHostResponseHelper initial_response(resolver_->CreateRequest(
- HostPortPair("initial", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper initial_response(
+ resolver_->CreateRequest(HostPortPair("initial", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ResolveHostResponseHelper evictee_response(
resolver_->CreateRequest(HostPortPair("evictee", 80), NetLogWithSource(),
- base::nullopt),
+ base::nullopt, request_context_.get()),
std::move(custom_callback));
ResolveHostResponseHelper additional_response(resolver_->CreateRequest(
- HostPortPair("additional", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("additional", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
// Now one running request ("initial") and two queued requests ("evictee" and
// "additional"). Any further requests will cause evictions.
- ResolveHostResponseHelper evictor_response(resolver_->CreateRequest(
- HostPortPair("evictor", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper evictor_response(
+ resolver_->CreateRequest(HostPortPair("evictor", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(evictee_response.result_error(),
IsError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE));
@@ -1146,13 +1241,15 @@
TEST_F(HostResolverManagerTest, BypassCache) {
proc_->SignalMultiple(2u);
- ResolveHostResponseHelper initial_response(resolver_->CreateRequest(
- HostPortPair("a", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper initial_response(
+ resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(initial_response.result_error(), IsOk());
EXPECT_EQ(1u, proc_->GetCaptureList().size());
- ResolveHostResponseHelper cached_response(resolver_->CreateRequest(
- HostPortPair("a", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper cached_response(
+ resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(cached_response.result_error(), IsOk());
// Expect no increase to calls to |proc_| because result was cached.
EXPECT_EQ(1u, proc_->GetCaptureList().size());
@@ -1160,8 +1257,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.cache_usage =
HostResolver::ResolveHostParameters::CacheUsage::DISALLOWED;
- ResolveHostResponseHelper cache_bypassed_response(resolver_->CreateRequest(
- HostPortPair("a", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper cache_bypassed_response(
+ resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(cache_bypassed_response.result_error(), IsOk());
// Expect call to |proc_| because cache was bypassed.
EXPECT_EQ(2u, proc_->GetCaptureList().size());
@@ -1172,20 +1270,23 @@
TEST_F(HostResolverManagerTest, FlushCacheOnIPAddressChange) {
proc_->SignalMultiple(2u); // One before the flush, one after.
- ResolveHostResponseHelper initial_response(resolver_->CreateRequest(
- HostPortPair("host1", 70), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper initial_response(
+ resolver_->CreateRequest(HostPortPair("host1", 70), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(initial_response.result_error(), IsOk());
EXPECT_EQ(1u, proc_->GetCaptureList().size());
- ResolveHostResponseHelper cached_response(resolver_->CreateRequest(
- HostPortPair("host1", 75), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper cached_response(
+ resolver_->CreateRequest(HostPortPair("host1", 75), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(cached_response.result_error(), IsOk());
EXPECT_EQ(1u, proc_->GetCaptureList().size()); // No expected increase.
// Verify initial DNS config read does not flush cache.
NetworkChangeNotifier::NotifyObserversOfInitialDNSConfigReadForTests();
- ResolveHostResponseHelper unflushed_response(resolver_->CreateRequest(
- HostPortPair("host1", 75), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper unflushed_response(
+ resolver_->CreateRequest(HostPortPair("host1", 75), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(unflushed_response.result_error(), IsOk());
EXPECT_EQ(1u, proc_->GetCaptureList().size()); // No expected increase.
@@ -1195,16 +1296,18 @@
// Resolve "host1" again -- this time it won't be served from cache, so it
// will complete asynchronously.
- ResolveHostResponseHelper flushed_response(resolver_->CreateRequest(
- HostPortPair("host1", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper flushed_response(
+ resolver_->CreateRequest(HostPortPair("host1", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(flushed_response.result_error(), IsOk());
EXPECT_EQ(2u, proc_->GetCaptureList().size()); // Expected increase.
}
// Test that IP address changes send ERR_NETWORK_CHANGED to pending requests.
TEST_F(HostResolverManagerTest, AbortOnIPAddressChanged) {
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host1", 70), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host1", 70), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ASSERT_FALSE(response.complete());
ASSERT_TRUE(proc_->WaitFor(1u));
@@ -1221,8 +1324,9 @@
// Test that initial DNS config read signals do not abort pending requests.
TEST_F(HostResolverManagerTest, DontAbortOnInitialDNSConfigRead) {
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host1", 70), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host1", 70), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ASSERT_FALSE(response.complete());
ASSERT_TRUE(proc_->WaitFor(1u));
@@ -1242,15 +1346,15 @@
CreateSerialResolver();
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("a", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("b", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("c", 80), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("b", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("c", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
for (auto& response : responses) {
ASSERT_FALSE(response->complete());
@@ -1284,7 +1388,7 @@
CompletionOnceCallback completion_callback, int error) {
*next_response = std::make_unique<ResolveHostResponseHelper>(
resolver_->CreateRequest(next_host, NetLogWithSource(),
- base::nullopt));
+ base::nullopt, request_context_.get()));
std::move(completion_callback).Run(error);
});
@@ -1292,19 +1396,19 @@
ResolveHostResponseHelper response0(
resolver_->CreateRequest(HostPortPair("bbb", 80), NetLogWithSource(),
- base::nullopt),
+ base::nullopt, request_context_.get()),
base::BindOnce(custom_callback_template, HostPortPair("zzz", 80),
&next_responses[0]));
ResolveHostResponseHelper response1(
resolver_->CreateRequest(HostPortPair("eee", 80), NetLogWithSource(),
- base::nullopt),
+ base::nullopt, request_context_.get()),
base::BindOnce(custom_callback_template, HostPortPair("aaa", 80),
&next_responses[1]));
ResolveHostResponseHelper response2(
resolver_->CreateRequest(HostPortPair("ccc", 80), NetLogWithSource(),
- base::nullopt),
+ base::nullopt, request_context_.get()),
base::BindOnce(custom_callback_template, HostPortPair("eee", 80),
&next_responses[2]));
@@ -1352,30 +1456,30 @@
// requests we make will not complete.
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req0", 80), NetLogWithSource(), low_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req1", 80), NetLogWithSource(), medium_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req2", 80), NetLogWithSource(), medium_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req3", 80), NetLogWithSource(), low_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req4", 80), NetLogWithSource(), highest_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req5", 80), NetLogWithSource(), low_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req6", 80), NetLogWithSource(), low_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req5", 80), NetLogWithSource(), highest_priority)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req0", 80), NetLogWithSource(),
+ low_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req1", 80), NetLogWithSource(),
+ medium_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req2", 80), NetLogWithSource(),
+ medium_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req3", 80), NetLogWithSource(),
+ low_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req4", 80), NetLogWithSource(),
+ highest_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req5", 80), NetLogWithSource(),
+ low_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req6", 80), NetLogWithSource(),
+ low_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req5", 80), NetLogWithSource(),
+ highest_priority, request_context_.get())));
for (const auto& response : responses) {
ASSERT_FALSE(response->complete());
@@ -1417,15 +1521,15 @@
medium_priority.initial_priority = MEDIUM;
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req0", 80), NetLogWithSource(), medium_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req1", 80), NetLogWithSource(), low_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req2", 80), NetLogWithSource(), lowest_priority)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req0", 80), NetLogWithSource(),
+ medium_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req1", 80), NetLogWithSource(),
+ low_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req2", 80), NetLogWithSource(),
+ lowest_priority, request_context_.get())));
// req0 starts immediately; without ChangePriority, req1 and then req2 should
// run.
@@ -1466,27 +1570,27 @@
highest_priority.initial_priority = HIGHEST;
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req0", 80), NetLogWithSource(), lowest_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req1", 80), NetLogWithSource(), highest_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req2", 80), NetLogWithSource(), medium_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req3", 80), NetLogWithSource(), low_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req4", 80), NetLogWithSource(), highest_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req5", 80), NetLogWithSource(), lowest_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req6", 80), NetLogWithSource(), medium_priority)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req0", 80), NetLogWithSource(),
+ lowest_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req1", 80), NetLogWithSource(),
+ highest_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req2", 80), NetLogWithSource(),
+ medium_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req3", 80), NetLogWithSource(),
+ low_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req4", 80), NetLogWithSource(),
+ highest_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req5", 80), NetLogWithSource(),
+ lowest_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req6", 80), NetLogWithSource(),
+ medium_priority, request_context_.get())));
// Cancel some requests
responses[1]->CancelRequest();
@@ -1542,46 +1646,46 @@
// requests we make will not complete.
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req0", 80), NetLogWithSource(), lowest_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req1", 80), NetLogWithSource(), highest_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req2", 80), NetLogWithSource(), medium_priority)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req3", 80), NetLogWithSource(), medium_priority)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req0", 80), NetLogWithSource(),
+ lowest_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req1", 80), NetLogWithSource(),
+ highest_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req2", 80), NetLogWithSource(),
+ medium_priority, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req3", 80), NetLogWithSource(),
+ medium_priority, request_context_.get())));
// At this point, there are 3 enqueued jobs (and one "running" job).
// Insertion of subsequent requests will cause evictions.
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req4", 80), NetLogWithSource(), low_priority)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req4", 80), NetLogWithSource(),
+ low_priority, request_context_.get())));
EXPECT_THAT(responses[4]->result_error(),
IsError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE)); // Evicts self.
EXPECT_FALSE(responses[4]->request()->GetAddressResults());
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req5", 80), NetLogWithSource(), medium_priority)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req5", 80), NetLogWithSource(),
+ medium_priority, request_context_.get())));
EXPECT_THAT(responses[2]->result_error(),
IsError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE));
EXPECT_FALSE(responses[2]->request()->GetAddressResults());
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req6", 80), NetLogWithSource(), highest_priority)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req6", 80), NetLogWithSource(),
+ highest_priority, request_context_.get())));
EXPECT_THAT(responses[3]->result_error(),
IsError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE));
EXPECT_FALSE(responses[3]->request()->GetAddressResults());
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("req7", 80), NetLogWithSource(), medium_priority)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("req7", 80), NetLogWithSource(),
+ medium_priority, request_context_.get())));
EXPECT_THAT(responses[5]->result_error(),
IsError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE));
EXPECT_FALSE(responses[5]->request()->GetAddressResults());
@@ -1625,11 +1729,13 @@
// Note that at this point the MockHostResolverProc is blocked, so any
// requests we make will not complete.
- ResolveHostResponseHelper run_response(resolver_->CreateRequest(
- HostPortPair("run", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper run_response(
+ resolver_->CreateRequest(HostPortPair("run", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
- ResolveHostResponseHelper evict_response(resolver_->CreateRequest(
- HostPortPair("req1", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper evict_response(
+ resolver_->CreateRequest(HostPortPair("req1", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(evict_response.result_error(),
IsError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE));
EXPECT_FALSE(evict_response.request()->GetAddressResults());
@@ -1650,34 +1756,40 @@
v6_parameters.dns_query_type = DnsQueryType::AAAA;
ResolveHostResponseHelper v4_v4_request(resolver_->CreateRequest(
- HostPortPair("127.0.0.1", 80), NetLogWithSource(), v4_parameters));
+ HostPortPair("127.0.0.1", 80), NetLogWithSource(), v4_parameters,
+ request_context_.get()));
EXPECT_THAT(v4_v4_request.result_error(), IsOk());
EXPECT_THAT(v4_v4_request.request()->GetAddressResults().value().endpoints(),
testing::ElementsAre(CreateExpected("127.0.0.1", 80)));
ResolveHostResponseHelper v4_v6_request(resolver_->CreateRequest(
- HostPortPair("127.0.0.1", 80), NetLogWithSource(), v6_parameters));
+ HostPortPair("127.0.0.1", 80), NetLogWithSource(), v6_parameters,
+ request_context_.get()));
EXPECT_THAT(v4_v6_request.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
ResolveHostResponseHelper v4_unsp_request(resolver_->CreateRequest(
- HostPortPair("127.0.0.1", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("127.0.0.1", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(v4_unsp_request.result_error(), IsOk());
EXPECT_THAT(
v4_unsp_request.request()->GetAddressResults().value().endpoints(),
testing::ElementsAre(CreateExpected("127.0.0.1", 80)));
- ResolveHostResponseHelper v6_v4_request(resolver_->CreateRequest(
- HostPortPair("::1", 80), NetLogWithSource(), v4_parameters));
+ ResolveHostResponseHelper v6_v4_request(
+ resolver_->CreateRequest(HostPortPair("::1", 80), NetLogWithSource(),
+ v4_parameters, request_context_.get()));
EXPECT_THAT(v6_v4_request.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
- ResolveHostResponseHelper v6_v6_request(resolver_->CreateRequest(
- HostPortPair("::1", 80), NetLogWithSource(), v6_parameters));
+ ResolveHostResponseHelper v6_v6_request(
+ resolver_->CreateRequest(HostPortPair("::1", 80), NetLogWithSource(),
+ v6_parameters, request_context_.get()));
EXPECT_THAT(v6_v6_request.result_error(), IsOk());
EXPECT_THAT(v6_v6_request.request()->GetAddressResults().value().endpoints(),
testing::ElementsAre(CreateExpected("::1", 80)));
- ResolveHostResponseHelper v6_unsp_request(resolver_->CreateRequest(
- HostPortPair("::1", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper v6_unsp_request(
+ resolver_->CreateRequest(HostPortPair("::1", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(v6_unsp_request.result_error(), IsOk());
EXPECT_THAT(
v6_unsp_request.request()->GetAddressResults().value().endpoints(),
@@ -1692,9 +1804,9 @@
source_none_parameters.source = HostResolverSource::LOCAL_ONLY;
// First NONE query expected to complete synchronously with a cache miss.
- ResolveHostResponseHelper cache_miss_request(
- resolver_->CreateRequest(HostPortPair("just.testing", 80),
- NetLogWithSource(), source_none_parameters));
+ ResolveHostResponseHelper cache_miss_request(resolver_->CreateRequest(
+ HostPortPair("just.testing", 80), NetLogWithSource(),
+ source_none_parameters, request_context_.get()));
EXPECT_TRUE(cache_miss_request.complete());
EXPECT_THAT(cache_miss_request.result_error(), IsError(ERR_DNS_CACHE_MISS));
EXPECT_FALSE(cache_miss_request.request()->GetAddressResults());
@@ -1702,14 +1814,15 @@
// Normal query to populate the cache.
ResolveHostResponseHelper normal_request(resolver_->CreateRequest(
- HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(normal_request.result_error(), IsOk());
EXPECT_FALSE(normal_request.request()->GetStaleInfo());
// Second NONE query expected to complete synchronously with cache hit.
- ResolveHostResponseHelper cache_hit_request(
- resolver_->CreateRequest(HostPortPair("just.testing", 80),
- NetLogWithSource(), source_none_parameters));
+ ResolveHostResponseHelper cache_hit_request(resolver_->CreateRequest(
+ HostPortPair("just.testing", 80), NetLogWithSource(),
+ source_none_parameters, request_context_.get()));
EXPECT_TRUE(cache_hit_request.complete());
EXPECT_THAT(cache_hit_request.result_error(), IsOk());
EXPECT_THAT(
@@ -1726,9 +1839,9 @@
source_none_parameters.source = HostResolverSource::LOCAL_ONLY;
// First NONE query expected to complete synchronously with a cache miss.
- ResolveHostResponseHelper cache_miss_request(
- resolver_->CreateRequest(HostPortPair("just.testing", 80),
- NetLogWithSource(), source_none_parameters));
+ ResolveHostResponseHelper cache_miss_request(resolver_->CreateRequest(
+ HostPortPair("just.testing", 80), NetLogWithSource(),
+ source_none_parameters, request_context_.get()));
EXPECT_TRUE(cache_miss_request.complete());
EXPECT_THAT(cache_miss_request.result_error(), IsError(ERR_DNS_CACHE_MISS));
EXPECT_FALSE(cache_miss_request.request()->GetAddressResults());
@@ -1736,16 +1849,17 @@
// Normal query to populate the cache.
ResolveHostResponseHelper normal_request(resolver_->CreateRequest(
- HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(normal_request.result_error(), IsOk());
EXPECT_FALSE(normal_request.request()->GetStaleInfo());
MakeCacheStale();
// Second NONE query still expected to complete synchronously with cache miss.
- ResolveHostResponseHelper stale_request(
- resolver_->CreateRequest(HostPortPair("just.testing", 80),
- NetLogWithSource(), source_none_parameters));
+ ResolveHostResponseHelper stale_request(resolver_->CreateRequest(
+ HostPortPair("just.testing", 80), NetLogWithSource(),
+ source_none_parameters, request_context_.get()));
EXPECT_TRUE(stale_request.complete());
EXPECT_THAT(stale_request.result_error(), IsError(ERR_DNS_CACHE_MISS));
EXPECT_FALSE(stale_request.request()->GetAddressResults());
@@ -1756,8 +1870,9 @@
HostResolver::ResolveHostParameters source_none_parameters;
source_none_parameters.source = HostResolverSource::LOCAL_ONLY;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("1.2.3.4", 56), NetLogWithSource(), source_none_parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("1.2.3.4", 56), NetLogWithSource(),
+ source_none_parameters, request_context_.get()));
// Expected to resolve synchronously.
EXPECT_TRUE(response.complete());
@@ -1773,9 +1888,9 @@
HostResolver::ResolveHostParameters source_none_parameters;
source_none_parameters.source = HostResolverSource::LOCAL_ONLY;
- ResolveHostResponseHelper response(
- resolver_->CreateRequest(HostPortPair("foo,bar.com", 57),
- NetLogWithSource(), source_none_parameters));
+ ResolveHostResponseHelper response(resolver_->CreateRequest(
+ HostPortPair("foo,bar.com", 57), NetLogWithSource(),
+ source_none_parameters, request_context_.get()));
// Expected to fail synchronously.
EXPECT_TRUE(response.complete());
@@ -1788,9 +1903,9 @@
HostResolver::ResolveHostParameters source_none_parameters;
source_none_parameters.source = HostResolverSource::LOCAL_ONLY;
- ResolveHostResponseHelper response(
- resolver_->CreateRequest(HostPortPair("foo,bar.localhost", 58),
- NetLogWithSource(), source_none_parameters));
+ ResolveHostResponseHelper response(resolver_->CreateRequest(
+ HostPortPair("foo,bar.localhost", 58), NetLogWithSource(),
+ source_none_parameters, request_context_.get()));
// Expected to fail synchronously.
EXPECT_TRUE(response.complete());
@@ -1809,9 +1924,9 @@
HostResolver::ResolveHostParameters::CacheUsage::STALE_ALLOWED;
// First query expected to complete synchronously as a cache miss.
- ResolveHostResponseHelper cache_miss_request(
- resolver_->CreateRequest(HostPortPair("just.testing", 80),
- NetLogWithSource(), stale_allowed_parameters));
+ ResolveHostResponseHelper cache_miss_request(resolver_->CreateRequest(
+ HostPortPair("just.testing", 80), NetLogWithSource(),
+ stale_allowed_parameters, request_context_.get()));
EXPECT_TRUE(cache_miss_request.complete());
EXPECT_THAT(cache_miss_request.result_error(), IsError(ERR_DNS_CACHE_MISS));
EXPECT_FALSE(cache_miss_request.request()->GetAddressResults());
@@ -1819,16 +1934,17 @@
// Normal query to populate cache
ResolveHostResponseHelper normal_request(resolver_->CreateRequest(
- HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(normal_request.result_error(), IsOk());
EXPECT_FALSE(normal_request.request()->GetStaleInfo());
MakeCacheStale();
// Second NONE query expected to get a stale cache hit.
- ResolveHostResponseHelper stale_request(
- resolver_->CreateRequest(HostPortPair("just.testing", 84),
- NetLogWithSource(), stale_allowed_parameters));
+ ResolveHostResponseHelper stale_request(resolver_->CreateRequest(
+ HostPortPair("just.testing", 84), NetLogWithSource(),
+ stale_allowed_parameters, request_context_.get()));
EXPECT_TRUE(stale_request.complete());
EXPECT_THAT(stale_request.result_error(), IsOk());
EXPECT_THAT(stale_request.request()->GetAddressResults().value().endpoints(),
@@ -1846,9 +1962,9 @@
// Normal non-local resolves should still work normally with the STALE_ALLOWED
// parameter, and there should be no stale info.
- ResolveHostResponseHelper response(
- resolver_->CreateRequest(HostPortPair("just.testing", 85),
- NetLogWithSource(), stale_allowed_parameters));
+ ResolveHostResponseHelper response(resolver_->CreateRequest(
+ HostPortPair("just.testing", 85), NetLogWithSource(),
+ stale_allowed_parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
testing::ElementsAre(CreateExpected("192.168.2.42", 85)));
@@ -1860,9 +1976,9 @@
stale_allowed_parameters.cache_usage =
HostResolver::ResolveHostParameters::CacheUsage::STALE_ALLOWED;
- ResolveHostResponseHelper response(
- resolver_->CreateRequest(HostPortPair("1.2.3.4", 57), NetLogWithSource(),
- stale_allowed_parameters));
+ ResolveHostResponseHelper response(resolver_->CreateRequest(
+ HostPortPair("1.2.3.4", 57), NetLogWithSource(), stale_allowed_parameters,
+ request_context_.get()));
// Expected to resolve synchronously without stale info.
EXPECT_TRUE(response.complete());
@@ -1907,8 +2023,9 @@
base::ThreadTaskRunnerHandle::OverrideForTesting(test_task_runner);
// Resolve "host1".
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host1", 70), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host1", 70), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_FALSE(response.complete());
resolver_proc->WaitForNAttemptsToBeBlocked(1);
@@ -1950,8 +2067,9 @@
proc_->AddRuleForAllFamilies("not_reserved3", "10.0.53.53");
proc_->SignalMultiple(6u);
- ResolveHostResponseHelper single_response(resolver_->CreateRequest(
- HostPortPair("single", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper single_response(
+ resolver_->CreateRequest(HostPortPair("single", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(single_response.result_error(),
IsError(ERR_ICANN_NAME_COLLISION));
EXPECT_FALSE(single_response.request()->GetAddressResults());
@@ -1965,34 +2083,40 @@
HostResolverSource::ANY));
EXPECT_FALSE(cache_result);
- ResolveHostResponseHelper multiple_response(resolver_->CreateRequest(
- HostPortPair("multiple", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper multiple_response(
+ resolver_->CreateRequest(HostPortPair("multiple", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(multiple_response.result_error(),
IsError(ERR_ICANN_NAME_COLLISION));
// Resolving an IP literal of 127.0.53.53 however is allowed.
ResolveHostResponseHelper literal_response(resolver_->CreateRequest(
- HostPortPair("127.0.53.53", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("127.0.53.53", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(literal_response.result_error(), IsOk());
// Moreover the address should not be recognized when embedded in an IPv6
// address.
ResolveHostResponseHelper ipv6_response(resolver_->CreateRequest(
- HostPortPair("127.0.53.53", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("127.0.53.53", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(ipv6_response.result_error(), IsOk());
// Try some other IPs which are similar, but NOT an exact match on
// 127.0.53.53.
ResolveHostResponseHelper similar_response1(resolver_->CreateRequest(
- HostPortPair("not_reserved1", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("not_reserved1", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(similar_response1.result_error(), IsOk());
ResolveHostResponseHelper similar_response2(resolver_->CreateRequest(
- HostPortPair("not_reserved2", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("not_reserved2", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(similar_response2.result_error(), IsOk());
ResolveHostResponseHelper similar_response3(resolver_->CreateRequest(
- HostPortPair("not_reserved3", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("not_reserved3", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(similar_response3.result_error(), IsOk());
}
@@ -2037,9 +2161,11 @@
HostResolver::ResolveHostParameters parameters;
parameters.include_canonical_name = true;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("just.testing", 80), NetLogWithSource(), parameters));
+ HostPortPair("just.testing", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
ResolveHostResponseHelper response_no_flag(resolver_->CreateRequest(
- HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
@@ -2058,9 +2184,11 @@
HostResolver::ResolveHostParameters parameters;
parameters.loopback_only = true;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("otherlocal", 80), NetLogWithSource(), parameters));
+ HostPortPair("otherlocal", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
ResolveHostResponseHelper response_no_flag(resolver_->CreateRequest(
- HostPortPair("otherlocal", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("otherlocal", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
@@ -2077,7 +2205,8 @@
parameters.is_speculative = true;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("just.testing", 80), NetLogWithSource(), parameters));
+ HostPortPair("just.testing", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_FALSE(response.request()->GetAddressResults());
@@ -2088,7 +2217,8 @@
// Reresolve without the |is_speculative| flag should immediately return from
// cache.
ResolveHostResponseHelper response2(resolver_->CreateRequest(
- HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("just.testing", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response2.result_error(), IsOk());
EXPECT_THAT(response2.request()->GetAddressResults().value().endpoints(),
@@ -2360,7 +2490,8 @@
parameters.source = HostResolverSource::MULTICAST_DNS;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 80), NetLogWithSource(), parameters));
+ HostPortPair("myhello.local", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
socket_factory_ptr->SimulateReceive(kMdnsResponseA, sizeof(kMdnsResponseA));
socket_factory_ptr->SimulateReceive(kMdnsResponseAAAA,
@@ -2388,7 +2519,8 @@
parameters.source = HostResolverSource::MULTICAST_DNS;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 80), NetLogWithSource(), parameters));
+ HostPortPair("myhello.local", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
socket_factory_ptr->SimulateReceive(kMdnsResponseAAAA,
sizeof(kMdnsResponseAAAA));
@@ -2411,7 +2543,8 @@
parameters.source = HostResolverSource::MULTICAST_DNS;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 80), NetLogWithSource(), parameters));
+ HostPortPair("myhello.local", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
socket_factory_ptr->SimulateReceive(kMdnsResponseTxt,
sizeof(kMdnsResponseTxt));
@@ -2435,7 +2568,8 @@
parameters.source = HostResolverSource::MULTICAST_DNS;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 83), NetLogWithSource(), parameters));
+ HostPortPair("myhello.local", 83), NetLogWithSource(), parameters,
+ request_context_.get()));
socket_factory_ptr->SimulateReceive(kMdnsResponsePtr,
sizeof(kMdnsResponsePtr));
@@ -2460,7 +2594,8 @@
parameters.source = HostResolverSource::MULTICAST_DNS;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 83), NetLogWithSource(), parameters));
+ HostPortPair("myhello.local", 83), NetLogWithSource(), parameters,
+ request_context_.get()));
socket_factory_ptr->SimulateReceive(kMdnsResponseSrv,
sizeof(kMdnsResponseSrv));
@@ -2486,7 +2621,7 @@
ResolveHostResponseHelper response(resolver_->CreateRequest(
HostPortPair("foo bar(A1B2)._ipps._tcp.local", 83), NetLogWithSource(),
- parameters));
+ parameters, request_context_.get()));
socket_factory_ptr->SimulateReceive(kMdnsResponseSrvUnrestricted,
sizeof(kMdnsResponseSrvUnrestricted));
@@ -2511,7 +2646,8 @@
parameters.source = HostResolverSource::MULTICAST_DNS;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 83), NetLogWithSource(), parameters));
+ HostPortPair("myhello.local", 83), NetLogWithSource(), parameters,
+ request_context_.get()));
socket_factory_ptr->SimulateReceive(
kMdnsResponseSrvUnrestrictedResult,
@@ -2539,7 +2675,8 @@
parameters.source = HostResolverSource::MULTICAST_DNS;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 80), NetLogWithSource(), parameters));
+ HostPortPair("myhello.local", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
socket_factory_ptr->SimulateReceive(kMdnsResponseNsec,
sizeof(kMdnsResponseNsec));
@@ -2570,7 +2707,8 @@
parameters.source = HostResolverSource::MULTICAST_DNS;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 80), NetLogWithSource(), parameters));
+ HostPortPair("myhello.local", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
ASSERT_TRUE(test_task_runner->HasPendingTask());
test_task_runner->FastForwardBy(MDnsTransaction::kTransactionTimeout +
@@ -2607,7 +2745,8 @@
parameters.source = HostResolverSource::MULTICAST_DNS;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 80), NetLogWithSource(), parameters));
+ HostPortPair("myhello.local", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
// Not the requested type. Should be ignored.
socket_factory_ptr->SimulateReceive(kMdnsResponseTxt,
@@ -2649,7 +2788,8 @@
parameters.source = HostResolverSource::MULTICAST_DNS;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 80), NetLogWithSource(), parameters));
+ HostPortPair("myhello.local", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
ASSERT_TRUE(test_task_runner->HasPendingTask());
@@ -2675,7 +2815,8 @@
parameters.source = HostResolverSource::MULTICAST_DNS;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 80), NetLogWithSource(), parameters));
+ HostPortPair("myhello.local", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
response.CancelRequest();
@@ -2711,7 +2852,8 @@
parameters.source = HostResolverSource::MULTICAST_DNS;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 80), NetLogWithSource(), parameters));
+ HostPortPair("myhello.local", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_FAILED));
EXPECT_FALSE(response.request()->GetAddressResults());
@@ -2728,7 +2870,8 @@
parameters.source = HostResolverSource::MULTICAST_DNS;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 80), NetLogWithSource(), parameters));
+ HostPortPair("myhello.local", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_FAILED));
EXPECT_FALSE(response.request()->GetAddressResults());
@@ -3233,21 +3376,24 @@
proc_->AddRuleForAllFamilies("localhost.", "192.168.1.42");
ResolveHostResponseHelper response0(resolver_->CreateRequest(
- HostPortPair("foo.localhost", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("foo.localhost", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response0.result_error(), IsOk());
EXPECT_THAT(response0.request()->GetAddressResults().value().endpoints(),
testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
CreateExpected("::1", 80)));
ResolveHostResponseHelper response1(resolver_->CreateRequest(
- HostPortPair("localhost", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("localhost", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response1.result_error(), IsOk());
EXPECT_THAT(response1.request()->GetAddressResults().value().endpoints(),
testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
CreateExpected("::1", 80)));
ResolveHostResponseHelper response2(resolver_->CreateRequest(
- HostPortPair("localhost.", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("localhost.", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response2.result_error(), IsOk());
EXPECT_THAT(response2.request()->GetAddressResults().value().endpoints(),
testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
@@ -3268,14 +3414,16 @@
ChangeDnsConfig(config);
ResolveHostResponseHelper response0(resolver_->CreateRequest(
- HostPortPair("localhost", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("localhost", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response0.result_error(), IsOk());
EXPECT_THAT(response0.request()->GetAddressResults().value().endpoints(),
testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
CreateExpected("::1", 80)));
ResolveHostResponseHelper response1(resolver_->CreateRequest(
- HostPortPair("foo.localhost", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("foo.localhost", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response1.result_error(), IsOk());
EXPECT_THAT(response1.request()->GetAddressResults().value().endpoints(),
testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
@@ -3288,8 +3436,9 @@
// All other hostnames will fail in proc_.
// Initially there is no config, so client should not be invoked.
- ResolveHostResponseHelper initial_response(resolver_->CreateRequest(
- HostPortPair("ok_fail", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper initial_response(
+ resolver_->CreateRequest(HostPortPair("ok_fail", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_FALSE(initial_response.complete());
proc_->SignalMultiple(1u);
@@ -3298,12 +3447,15 @@
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response0(resolver_->CreateRequest(
- HostPortPair("ok_fail", 80), NetLogWithSource(), base::nullopt));
- ResolveHostResponseHelper response1(resolver_->CreateRequest(
- HostPortPair("nx_fail", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response0(
+ resolver_->CreateRequest(HostPortPair("ok_fail", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
+ ResolveHostResponseHelper response1(
+ resolver_->CreateRequest(HostPortPair("nx_fail", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ResolveHostResponseHelper response2(resolver_->CreateRequest(
- HostPortPair("nx_succeed", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("nx_succeed", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
proc_->SignalMultiple(4u);
@@ -3331,10 +3483,12 @@
// Set empty DnsConfig.
ChangeDnsConfig(DnsConfig());
// Initially there is no config, so client should not be invoked.
- ResolveHostResponseHelper initial_response0(resolver_->CreateRequest(
- HostPortPair("ok_fail", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper initial_response0(
+ resolver_->CreateRequest(HostPortPair("ok_fail", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ResolveHostResponseHelper initial_response1(resolver_->CreateRequest(
- HostPortPair("nx_succeed", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("nx_succeed", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
proc_->SignalMultiple(2u);
EXPECT_THAT(initial_response0.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
@@ -3345,10 +3499,12 @@
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper abort_response0(resolver_->CreateRequest(
- HostPortPair("ok_abort", 80), NetLogWithSource(), base::nullopt));
- ResolveHostResponseHelper abort_response1(resolver_->CreateRequest(
- HostPortPair("nx_abort", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper abort_response0(
+ resolver_->CreateRequest(HostPortPair("ok_abort", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
+ ResolveHostResponseHelper abort_response1(
+ resolver_->CreateRequest(HostPortPair("nx_abort", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
// Simulate the case when the preference or policy has disabled the DNS
// client causing AbortDnsTasks.
@@ -3356,10 +3512,12 @@
// First request is resolved by MockDnsClient, others should fail due to
// disabled fallback to ProcTask.
- ResolveHostResponseHelper response0(resolver_->CreateRequest(
- HostPortPair("ok_fail", 80), NetLogWithSource(), base::nullopt));
- ResolveHostResponseHelper response1(resolver_->CreateRequest(
- HostPortPair("nx_fail", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response0(
+ resolver_->CreateRequest(HostPortPair("ok_fail", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
+ ResolveHostResponseHelper response1(
+ resolver_->CreateRequest(HostPortPair("nx_fail", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
proc_->SignalMultiple(6u);
// Aborted due to Network Change.
@@ -3377,8 +3535,9 @@
// Test behavior of OnDnsTaskFailure when Job is aborted.
TEST_F(HostResolverManagerDnsTest, OnDnsTaskFailureAbortedJob) {
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("nx_abort", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("nx_abort", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
// Abort all jobs here.
CreateResolver();
proc_->SignalMultiple(1u);
@@ -3390,8 +3549,9 @@
// Repeat test with Fallback to ProcTask disabled
set_allow_fallback_to_proctask(false);
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper no_fallback_response(resolver_->CreateRequest(
- HostPortPair("nx_abort", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper no_fallback_response(
+ resolver_->CreateRequest(HostPortPair("nx_abort", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
// Abort all jobs here.
CreateResolver();
proc_->SignalMultiple(2u);
@@ -3411,10 +3571,12 @@
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response0(resolver_->CreateRequest(
- HostPortPair("nx_fail", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response0(
+ resolver_->CreateRequest(HostPortPair("nx_fail", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ResolveHostResponseHelper response1(resolver_->CreateRequest(
- HostPortPair("nx_succeed", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("nx_succeed", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
proc_->SignalMultiple(2u);
EXPECT_THAT(response0.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
@@ -3435,10 +3597,12 @@
HostResolver::ResolveHostParameters parameters;
parameters.source = HostResolverSource::DNS;
- ResolveHostResponseHelper response0(resolver_->CreateRequest(
- HostPortPair("nx_fail", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response0(
+ resolver_->CreateRequest(HostPortPair("nx_fail", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
ResolveHostResponseHelper response1(resolver_->CreateRequest(
- HostPortPair("nx_succeed", 80), NetLogWithSource(), parameters));
+ HostPortPair("nx_succeed", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
// Nothing should reach |proc_| on success, but let failures through to fail
// instead of hanging.
proc_->SignalMultiple(2u);
@@ -3457,10 +3621,12 @@
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response0(resolver_->CreateRequest(
- HostPortPair("ok_fail", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response0(
+ resolver_->CreateRequest(HostPortPair("ok_fail", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ResolveHostResponseHelper response1(resolver_->CreateRequest(
- HostPortPair("nx_succeed", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("nx_succeed", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
proc_->SignalMultiple(2u);
// Simulate the case when the preference or policy has disabled the DNS client
@@ -3486,10 +3652,12 @@
HostResolver::ResolveHostParameters parameters;
parameters.source = HostResolverSource::DNS;
- ResolveHostResponseHelper response0(resolver_->CreateRequest(
- HostPortPair("ok_fail", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response0(
+ resolver_->CreateRequest(HostPortPair("ok_fail", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
ResolveHostResponseHelper response1(resolver_->CreateRequest(
- HostPortPair("nx_succeed", 80), NetLogWithSource(), parameters));
+ HostPortPair("nx_succeed", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
// Nothing should reach |proc_| on success, but let failures through to fail
// instead of hanging.
proc_->SignalMultiple(2u);
@@ -3510,18 +3678,18 @@
// All other hostnames will fail in proc_.
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("4ok", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("6ok", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("4nx", 80), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("4ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("6ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("4nx", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
proc_->SignalMultiple(4u);
@@ -3546,7 +3714,8 @@
// When the resolver returns an A record with 127.0.53.53 it should be
// mapped to a special error.
ResolveHostResponseHelper response_ipv4(resolver_->CreateRequest(
- HostPortPair("4collision", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("4collision", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response_ipv4.result_error(), IsError(ERR_ICANN_NAME_COLLISION));
EXPECT_FALSE(response_ipv4.request()->GetAddressResults());
@@ -3554,7 +3723,8 @@
// work just like any other IP. (Despite having the same suffix, it is not
// considered special)
ResolveHostResponseHelper response_ipv6(resolver_->CreateRequest(
- HostPortPair("6collision", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("6collision", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response_ipv6.result_error(), IsOk());
EXPECT_THAT(response_ipv6.request()->GetAddressResults().value().endpoints(),
testing::ElementsAre(CreateExpected("::127.0.53.53", 80)));
@@ -3569,8 +3739,9 @@
std::string()); // Default to failures.
proc_->SignalMultiple(1u); // For the first request which misses.
- ResolveHostResponseHelper initial_response(resolver_->CreateRequest(
- HostPortPair("nx_ipv4", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper initial_response(
+ resolver_->CreateRequest(HostPortPair("nx_ipv4", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(initial_response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
IPAddress local_ipv4 = IPAddress::IPv4Localhost();
@@ -3586,20 +3757,23 @@
config.hosts = hosts;
ChangeDnsConfig(config);
- ResolveHostResponseHelper response_ipv4(resolver_->CreateRequest(
- HostPortPair("nx_ipv4", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response_ipv4(
+ resolver_->CreateRequest(HostPortPair("nx_ipv4", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(response_ipv4.result_error(), IsOk());
EXPECT_THAT(response_ipv4.request()->GetAddressResults().value().endpoints(),
testing::ElementsAre(CreateExpected("127.0.0.1", 80)));
- ResolveHostResponseHelper response_ipv6(resolver_->CreateRequest(
- HostPortPair("nx_ipv6", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response_ipv6(
+ resolver_->CreateRequest(HostPortPair("nx_ipv6", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(response_ipv6.result_error(), IsOk());
EXPECT_THAT(response_ipv6.request()->GetAddressResults().value().endpoints(),
testing::ElementsAre(CreateExpected("::1", 80)));
- ResolveHostResponseHelper response_both(resolver_->CreateRequest(
- HostPortPair("nx_both", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response_both(
+ resolver_->CreateRequest(HostPortPair("nx_both", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(response_both.result_error(), IsOk());
EXPECT_THAT(response_both.request()->GetAddressResults().value().endpoints(),
testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
@@ -3609,8 +3783,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::A;
- ResolveHostResponseHelper response_specified_ipv4(resolver_->CreateRequest(
- HostPortPair("nx_ipv4", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response_specified_ipv4(
+ resolver_->CreateRequest(HostPortPair("nx_ipv4", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response_specified_ipv4.result_error(), IsOk());
EXPECT_THAT(response_specified_ipv4.request()
->GetAddressResults()
@@ -3619,8 +3794,9 @@
testing::ElementsAre(CreateExpected("127.0.0.1", 80)));
parameters.dns_query_type = DnsQueryType::AAAA;
- ResolveHostResponseHelper response_specified_ipv6(resolver_->CreateRequest(
- HostPortPair("nx_ipv6", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response_specified_ipv6(
+ resolver_->CreateRequest(HostPortPair("nx_ipv6", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response_specified_ipv6.result_error(), IsOk());
EXPECT_THAT(response_specified_ipv6.request()
->GetAddressResults()
@@ -3629,8 +3805,9 @@
testing::ElementsAre(CreateExpected("::1", 80)));
// Request with upper case.
- ResolveHostResponseHelper response_upper(resolver_->CreateRequest(
- HostPortPair("nx_IPV4", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response_upper(
+ resolver_->CreateRequest(HostPortPair("nx_IPV4", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(response_upper.result_error(), IsOk());
EXPECT_THAT(response_upper.request()->GetAddressResults().value().endpoints(),
testing::ElementsAre(CreateExpected("127.0.0.1", 80)));
@@ -3648,10 +3825,12 @@
std::string()); // Default to failures.
proc_->SignalMultiple(1u); // For the first request which fails.
- ResolveHostResponseHelper failure_response(resolver_->CreateRequest(
- HostPortPair("nx_ipv4", 80), NetLogWithSource(), base::nullopt));
- ResolveHostResponseHelper queued_response(resolver_->CreateRequest(
- HostPortPair("nx_ipv6", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper failure_response(
+ resolver_->CreateRequest(HostPortPair("nx_ipv4", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
+ ResolveHostResponseHelper queued_response(
+ resolver_->CreateRequest(HostPortPair("nx_ipv6", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
DnsHosts hosts;
hosts[DnsHostsKey("nx_ipv4", ADDRESS_FAMILY_IPV4)] =
@@ -3690,21 +3869,22 @@
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("ok.local", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
responses.emplace_back(
std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("ok.local", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("ok.local.", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("oklocal", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("oklocal.", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), base::nullopt)));
+ HostPortPair("ok.local.", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("oklocal", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("oklocal.", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
proc_->SignalMultiple(5u);
@@ -3738,7 +3918,8 @@
dns_parameters.dns_query_type = DnsQueryType::TXT;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("myhello.local", 80), NetLogWithSource(), dns_parameters));
+ HostPortPair("myhello.local", 80), NetLogWithSource(), dns_parameters,
+ request_context_.get()));
socket_factory_ptr->SimulateReceive(kMdnsResponseTxt,
sizeof(kMdnsResponseTxt));
@@ -3760,12 +3941,15 @@
HostResolver::ResolveHostParameters dns_parameters;
dns_parameters.source = HostResolverSource::DNS;
- ResolveHostResponseHelper dns_response(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), dns_parameters));
- ResolveHostResponseHelper dns_local_response(resolver_->CreateRequest(
- HostPortPair("ok.local", 80), NetLogWithSource(), dns_parameters));
- ResolveHostResponseHelper normal_local_response(resolver_->CreateRequest(
- HostPortPair("ok.local", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper dns_response(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ dns_parameters, request_context_.get()));
+ ResolveHostResponseHelper dns_local_response(
+ resolver_->CreateRequest(HostPortPair("ok.local", 80), NetLogWithSource(),
+ dns_parameters, request_context_.get()));
+ ResolveHostResponseHelper normal_local_response(
+ resolver_->CreateRequest(HostPortPair("ok.local", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
proc_->SignalMultiple(3u);
@@ -3780,13 +3964,15 @@
ChangeDnsConfig(CreateValidDnsConfig());
proc_->AddRuleForAllFamilies(std::string(), std::string());
- ResolveHostResponseHelper dns_response(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper dns_response(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
HostResolver::ResolveHostParameters parameters;
parameters.source = HostResolverSource::SYSTEM;
- ResolveHostResponseHelper system_response(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper system_response(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
proc_->SignalMultiple(2u);
@@ -3801,8 +3987,9 @@
std::string()); // Default to failures.
// Check that DnsTask works.
- ResolveHostResponseHelper initial_response(resolver_->CreateRequest(
- HostPortPair("ok_1", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper initial_response(
+ resolver_->CreateRequest(HostPortPair("ok_1", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(initial_response.result_error(), IsOk());
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
@@ -3811,9 +3998,9 @@
std::string hostname = base::StringPrintf("nx_%u", i);
// Ensure fallback to ProcTask succeeds.
proc_->AddRuleForAllFamilies(hostname, "192.168.1.101");
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair(hostname, 80), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair(hostname, 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
}
proc_->SignalMultiple(responses.size());
@@ -3824,20 +4011,23 @@
ASSERT_FALSE(proc_->HasBlockedRequests());
// DnsTask should be disabled by now unless explictly requested via |source|.
- ResolveHostResponseHelper fail_response(resolver_->CreateRequest(
- HostPortPair("ok_2", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper fail_response(
+ resolver_->CreateRequest(HostPortPair("ok_2", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
HostResolver::ResolveHostParameters parameters;
parameters.source = HostResolverSource::DNS;
- ResolveHostResponseHelper dns_response(resolver_->CreateRequest(
- HostPortPair("ok_2", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper dns_response(
+ resolver_->CreateRequest(HostPortPair("ok_2", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
proc_->SignalMultiple(2u);
EXPECT_THAT(fail_response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_THAT(dns_response.result_error(), IsOk());
// Check that it is re-enabled after DNS change.
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper reenabled_response(resolver_->CreateRequest(
- HostPortPair("ok_3", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper reenabled_response(
+ resolver_->CreateRequest(HostPortPair("ok_3", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(reenabled_response.result_error(), IsOk());
}
@@ -3852,9 +4042,9 @@
// Use custom names to require separate Jobs.
std::string hostname = (i % 2) == 0 ? base::StringPrintf("nx_%u", i)
: base::StringPrintf("ok_%u", i);
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair(hostname, 80), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair(hostname, 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
}
proc_->SignalMultiple(40u);
@@ -3866,8 +4056,9 @@
proc_->AddRuleForAllFamilies(std::string(), std::string());
// DnsTask should still be enabled.
- ResolveHostResponseHelper final_response(resolver_->CreateRequest(
- HostPortPair("ok_last", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper final_response(
+ resolver_->CreateRequest(HostPortPair("ok_last", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(final_response.result_error(), IsOk());
}
@@ -3884,7 +4075,8 @@
// Try without DnsClient.
resolver_->SetDnsClient(nullptr);
ResolveHostResponseHelper system_response(resolver_->CreateRequest(
- HostPortPair("localhost", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("localhost", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(system_response.result_error(), IsOk());
EXPECT_THAT(
system_response.request()->GetAddressResults().value().endpoints(),
@@ -3894,7 +4086,8 @@
// With DnsClient
UseMockDnsClient(CreateValidDnsConfig(), CreateDefaultDnsRules());
ResolveHostResponseHelper builtin_response(resolver_->CreateRequest(
- HostPortPair("localhost", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("localhost", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(builtin_response.result_error(), IsOk());
EXPECT_THAT(
builtin_response.request()->GetAddressResults().value().endpoints(),
@@ -3907,7 +4100,8 @@
config.use_local_ipv6 = false;
ChangeDnsConfig(config);
ResolveHostResponseHelper ipv6_disabled_response(resolver_->CreateRequest(
- HostPortPair("localhost", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("localhost", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(ipv6_disabled_response.result_error(), IsOk());
EXPECT_THAT(
ipv6_disabled_response.request()->GetAddressResults().value().endpoints(),
@@ -3924,8 +4118,9 @@
config.use_local_ipv6 = false;
ChangeDnsConfig(config);
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ASSERT_FALSE(response.complete());
ASSERT_EQ(1u, num_running_dispatcher_jobs());
@@ -3941,8 +4136,9 @@
CreateSerialResolver();
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_EQ(1u, num_running_dispatcher_jobs());
response.CancelRequest();
@@ -3956,8 +4152,9 @@
TEST_F(HostResolverManagerDnsTest, CancelWithTwoTransactionsActive) {
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_EQ(2u, num_running_dispatcher_jobs());
response.CancelRequest();
@@ -3979,9 +4176,9 @@
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
for (int i = 0; i < 12; ++i) {
std::string hostname = base::StringPrintf("ok%i", i);
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair(hostname, 80), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair(hostname, 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
}
EXPECT_EQ(10u, num_running_dispatcher_jobs());
@@ -3996,8 +4193,9 @@
TEST_F(HostResolverManagerDnsTest, DeleteWithCompletedRequests) {
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
@@ -4016,7 +4214,8 @@
ChangeDnsConfig(CreateValidDnsConfig());
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("4slow_4ok", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("4slow_4ok", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
response.request()->Cancel();
dns_client_->CompleteDelayedTransactions();
@@ -4028,8 +4227,9 @@
TEST_F(HostResolverManagerDnsTest, ExplicitCancel_Completed) {
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
@@ -4048,8 +4248,9 @@
TEST_F(HostResolverManagerDnsTest, CancelWithIPv6TransactionActive) {
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("6slow_ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("6slow_ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_EQ(2u, num_running_dispatcher_jobs());
// The IPv4 request should complete, the IPv6 request is still pending.
@@ -4068,8 +4269,9 @@
set_allow_fallback_to_proctask(false);
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("4slow_ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("4slow_ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_EQ(2u, num_running_dispatcher_jobs());
// The IPv6 request should complete, the IPv4 request is still pending.
@@ -4087,18 +4289,21 @@
ChangeDnsConfig(CreateValidDnsConfig());
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("4slow_ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
responses.emplace_back(
std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("4slow_ok", 80), NetLogWithSource(), base::nullopt)));
+ HostPortPair("4slow_4ok", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get())));
responses.emplace_back(
std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("4slow_4ok", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
- resolver_->CreateRequest(HostPortPair("4slow_4timeout", 80),
- NetLogWithSource(), base::nullopt)));
- responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
- resolver_->CreateRequest(HostPortPair("4slow_6timeout", 80),
- NetLogWithSource(), base::nullopt)));
+ HostPortPair("4slow_4timeout", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get())));
+ responses.emplace_back(
+ std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+ HostPortPair("4slow_6timeout", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get())));
base::RunLoop().RunUntilIdle();
EXPECT_FALSE(responses[0]->complete());
@@ -4157,24 +4362,29 @@
set_allow_fallback_to_proctask(false);
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("secure", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
responses.emplace_back(
std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("secure", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
- resolver_->CreateRequest(HostPortPair("4insecure_6slowsecure", 80),
- NetLogWithSource(), base::nullopt)));
- responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
- resolver_->CreateRequest(HostPortPair("4insecure_6slowemptysecure", 80),
- NetLogWithSource(), base::nullopt)));
- responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
- resolver_->CreateRequest(HostPortPair("4insecureempty_6slowsecure", 80),
- NetLogWithSource(), base::nullopt)));
- responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
- resolver_->CreateRequest(HostPortPair("4insecure_6slowfailsecure", 80),
- NetLogWithSource(), base::nullopt)));
- responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
- resolver_->CreateRequest(HostPortPair("4secure_6slowinsecure", 80),
- NetLogWithSource(), base::nullopt)));
+ HostPortPair("4insecure_6slowsecure", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(
+ std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+ HostPortPair("4insecure_6slowemptysecure", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(
+ std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+ HostPortPair("4insecureempty_6slowsecure", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(
+ std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+ HostPortPair("4insecure_6slowfailsecure", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(
+ std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+ HostPortPair("4secure_6slowinsecure", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(responses[0]->complete());
@@ -4251,8 +4461,9 @@
set_allow_fallback_to_proctask(false);
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_FALSE(response.complete());
EXPECT_EQ(1u, num_running_dispatcher_jobs());
@@ -4273,11 +4484,13 @@
set_allow_fallback_to_proctask(false);
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response0(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response0(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_EQ(2u, num_running_dispatcher_jobs());
- ResolveHostResponseHelper response1(resolver_->CreateRequest(
- HostPortPair("4slow_ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response1(
+ resolver_->CreateRequest(HostPortPair("4slow_ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_EQ(3u, num_running_dispatcher_jobs());
// Request 0's transactions should complete, starting Request 1's second
@@ -4309,7 +4522,8 @@
proc_->SignalMultiple(1u);
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("empty_fallback", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("empty_fallback", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
testing::ElementsAre(CreateExpected("192.168.0.1", 80)));
@@ -4323,7 +4537,8 @@
proc_->SignalMultiple(1u);
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("empty_fallback", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("empty_fallback", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
@@ -4347,16 +4562,16 @@
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
// First active job gets two slots.
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("slow_nx1", 80), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("slow_nx1", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
// Next job gets one slot, and waits on another.
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("slow_nx2", 80), NetLogWithSource(), base::nullopt)));
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("slow_nx2", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
EXPECT_EQ(3u, num_running_dispatcher_jobs());
for (auto& response : responses) {
@@ -4385,8 +4600,9 @@
TEST_F(HostResolverManagerDnsTest, DontAbortOnInitialDNSConfigRead) {
// DnsClient is enabled, but there's no DnsConfig, so the request should start
// using ProcTask.
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host1", 70), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host1", 70), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_FALSE(response.complete());
EXPECT_TRUE(proc_->WaitFor(1u));
@@ -4420,7 +4636,8 @@
proc_->AddRuleForAllFamilies(host, "192.168.0.1");
failure_responses.emplace_back(
std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair(host, 80), NetLogWithSource(), base::nullopt)));
+ HostPortPair(host, 80), NetLogWithSource(), base::nullopt,
+ request_context_.get())));
EXPECT_FALSE(failure_responses[i]->complete());
}
@@ -4428,15 +4645,18 @@
// so should end up using ProcTasks.
proc_->AddRuleForAllFamilies("slow_ok1", "192.168.0.2");
ResolveHostResponseHelper response0(resolver_->CreateRequest(
- HostPortPair("slow_ok1", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("slow_ok1", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_FALSE(response0.complete());
proc_->AddRuleForAllFamilies("slow_ok2", "192.168.0.3");
ResolveHostResponseHelper response1(resolver_->CreateRequest(
- HostPortPair("slow_ok2", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("slow_ok2", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_FALSE(response1.complete());
proc_->AddRuleForAllFamilies("slow_ok3", "192.168.0.4");
ResolveHostResponseHelper response2(resolver_->CreateRequest(
- HostPortPair("slow_ok3", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("slow_ok3", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
EXPECT_FALSE(response2.complete());
// Requests specifying DNS source cannot fallback to ProcTask, so they
@@ -4444,15 +4664,17 @@
HostResolver::ResolveHostParameters parameters;
parameters.source = HostResolverSource::DNS;
ResolveHostResponseHelper response_dns(resolver_->CreateRequest(
- HostPortPair("4slow_ok", 80), NetLogWithSource(), parameters));
+ HostPortPair("4slow_ok", 80), NetLogWithSource(), parameters,
+ request_context_.get()));
EXPECT_FALSE(response_dns.complete());
// Requests specifying SYSTEM source should be unaffected by disabling
// DnsClient.
proc_->AddRuleForAllFamilies("nx_ok", "192.168.0.5");
parameters.source = HostResolverSource::SYSTEM;
- ResolveHostResponseHelper response_system(resolver_->CreateRequest(
- HostPortPair("nx_ok", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response_system(
+ resolver_->CreateRequest(HostPortPair("nx_ok", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_FALSE(response_system.complete());
proc_->SignalMultiple(maximum_dns_failures() + 5);
@@ -4505,19 +4727,19 @@
std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
// First active job gets two slots.
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("slow_ok1", 80), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("slow_ok1", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
EXPECT_FALSE(responses[0]->complete());
// Next job gets one slot, and waits on another.
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("slow_ok2", 80), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("slow_ok2", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
EXPECT_FALSE(responses[1]->complete());
// Next one is queued.
- responses.emplace_back(
- std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
- HostPortPair("ok", 80), NetLogWithSource(), base::nullopt)));
+ responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+ resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get())));
EXPECT_FALSE(responses[2]->complete());
EXPECT_EQ(3u, num_running_dispatcher_jobs());
@@ -4562,15 +4784,18 @@
HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6);
proc_->AddRule("h1", ADDRESS_FAMILY_IPV6, "::2");
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("h1", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("h1", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::A;
- ResolveHostResponseHelper v4_response(resolver_->CreateRequest(
- HostPortPair("h1", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper v4_response(
+ resolver_->CreateRequest(HostPortPair("h1", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
parameters.dns_query_type = DnsQueryType::AAAA;
- ResolveHostResponseHelper v6_response(resolver_->CreateRequest(
- HostPortPair("h1", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper v6_response(
+ resolver_->CreateRequest(HostPortPair("h1", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
proc_->SignalMultiple(3u);
@@ -4592,14 +4817,17 @@
NetworkChangeNotifier::CONNECTION_4G);
base::RunLoop().RunUntilIdle(); // Wait for NetworkChangeNotifier.
- ResolveHostResponseHelper no_wifi_response(resolver_->CreateRequest(
- HostPortPair("h1", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper no_wifi_response(
+ resolver_->CreateRequest(HostPortPair("h1", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
parameters.dns_query_type = DnsQueryType::A;
- ResolveHostResponseHelper no_wifi_v4_response(resolver_->CreateRequest(
- HostPortPair("h1", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper no_wifi_v4_response(
+ resolver_->CreateRequest(HostPortPair("h1", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
parameters.dns_query_type = DnsQueryType::AAAA;
- ResolveHostResponseHelper no_wifi_v6_response(resolver_->CreateRequest(
- HostPortPair("h1", 80), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper no_wifi_v6_response(
+ resolver_->CreateRequest(HostPortPair("h1", 80), NetLogWithSource(),
+ parameters, request_context_.get()));
proc_->SignalMultiple(3u);
@@ -4625,8 +4853,9 @@
ChangeDnsConfig(CreateValidDnsConfig());
// NODATA
- ResolveHostResponseHelper no_data_response(resolver_->CreateRequest(
- HostPortPair("empty", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper no_data_response(
+ resolver_->CreateRequest(HostPortPair("empty", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(no_data_response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(no_data_response.request()->GetAddressResults());
HostCache::Key key("empty", DnsQueryType::UNSPECIFIED, 0,
@@ -4640,8 +4869,9 @@
EXPECT_THAT(cache_result->second.ttl(), base::TimeDelta::FromSeconds(86400));
// NXDOMAIN
- ResolveHostResponseHelper no_domain_response(resolver_->CreateRequest(
- HostPortPair("nodomain", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper no_domain_response(
+ resolver_->CreateRequest(HostPortPair("nodomain", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(no_domain_response.result_error(),
IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(no_domain_response.request()->GetAddressResults());
@@ -4663,20 +4893,23 @@
cache_only_parameters.source = HostResolverSource::LOCAL_ONLY;
// Expect cache initially empty.
- ResolveHostResponseHelper cache_miss_response(resolver_->CreateRequest(
- HostPortPair("nodomain", 80), NetLogWithSource(), cache_only_parameters));
+ ResolveHostResponseHelper cache_miss_response(
+ resolver_->CreateRequest(HostPortPair("nodomain", 80), NetLogWithSource(),
+ cache_only_parameters, request_context_.get()));
EXPECT_THAT(cache_miss_response.result_error(), IsError(ERR_DNS_CACHE_MISS));
EXPECT_FALSE(cache_miss_response.request()->GetStaleInfo());
// Populate cache with an error.
- ResolveHostResponseHelper no_domain_response(resolver_->CreateRequest(
- HostPortPair("nodomain", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper no_domain_response(
+ resolver_->CreateRequest(HostPortPair("nodomain", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
EXPECT_THAT(no_domain_response.result_error(),
IsError(ERR_NAME_NOT_RESOLVED));
// Expect the error result can be resolved from the cache.
- ResolveHostResponseHelper cache_hit_response(resolver_->CreateRequest(
- HostPortPair("nodomain", 80), NetLogWithSource(), cache_only_parameters));
+ ResolveHostResponseHelper cache_hit_response(
+ resolver_->CreateRequest(HostPortPair("nodomain", 80), NetLogWithSource(),
+ cache_only_parameters, request_context_.get()));
EXPECT_THAT(cache_hit_response.result_error(),
IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(cache_hit_response.request()->GetStaleInfo().value().is_stale());
@@ -4693,8 +4926,9 @@
UseMockDnsClient(CreateValidDnsConfig(), std::move(rules));
set_allow_fallback_to_proctask(false);
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("alias", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("alias", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ASSERT_THAT(response.result_error(), IsOk());
// HostResolver may still give name, but if so, it must be correct.
@@ -4717,8 +4951,9 @@
HostResolver::ResolveHostParameters params;
params.include_canonical_name = true;
params.source = HostResolverSource::DNS;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("alias", 80), NetLogWithSource(), params));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("alias", 80), NetLogWithSource(),
+ params, request_context_.get()));
ASSERT_THAT(response.result_error(), IsOk());
EXPECT_EQ(response.request()->GetAddressResults().value().canonical_name(),
@@ -4739,8 +4974,9 @@
HostResolver::ResolveHostParameters params;
params.include_canonical_name = true;
params.source = HostResolverSource::DNS;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("alias", 80), NetLogWithSource(), params));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("alias", 80), NetLogWithSource(),
+ params, request_context_.get()));
ASSERT_FALSE(response.complete());
base::RunLoop().RunUntilIdle();
dns_client_->CompleteDelayedTransactions();
@@ -4761,8 +4997,9 @@
params.dns_query_type = DnsQueryType::A;
params.include_canonical_name = true;
params.source = HostResolverSource::DNS;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("alias", 80), NetLogWithSource(), params));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("alias", 80), NetLogWithSource(),
+ params, request_context_.get()));
ASSERT_THAT(response.result_error(), IsOk());
EXPECT_EQ(response.request()->GetAddressResults().value().canonical_name(),
"correct");
@@ -4784,7 +5021,8 @@
HostResolver::ResolveHostParameters params;
params.include_canonical_name = true;
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("nx_succeed", 80), NetLogWithSource(), params));
+ HostPortPair("nx_succeed", 80), NetLogWithSource(), params,
+ request_context_.get()));
ASSERT_THAT(response.result_error(), IsOk());
EXPECT_EQ(response.request()->GetAddressResults().value().canonical_name(),
@@ -4853,7 +5091,8 @@
resolver_->SetDnsConfigOverrides(overrides);
ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("dns.example2.com", 80), NetLogWithSource(), base::nullopt));
+ HostPortPair("dns.example2.com", 80), NetLogWithSource(), base::nullopt,
+ request_context_.get()));
ASSERT_THAT(response.result_error(), IsOk());
}
@@ -5177,8 +5416,9 @@
ASSERT_FALSE(overrides.OverridesEverything());
resolver_->SetDnsConfigOverrides(overrides);
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("4slow_ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("4slow_ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ASSERT_FALSE(response.complete());
DnsConfig new_config = original_config;
@@ -5201,8 +5441,9 @@
ASSERT_TRUE(overrides.OverridesEverything());
resolver_->SetDnsConfigOverrides(overrides);
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("4slow_ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("4slow_ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ASSERT_FALSE(response.complete());
DnsConfig new_config = original_config;
@@ -5217,8 +5458,9 @@
// overrides, same as receiving a new DnsConfig from the system.
TEST_F(HostResolverManagerDnsTest, CancelQueriesOnSettingOverrides) {
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("4slow_ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("4slow_ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ASSERT_FALSE(response.complete());
DnsConfigOverrides overrides;
@@ -5236,8 +5478,9 @@
overrides.attempts = 123;
resolver_->SetDnsConfigOverrides(overrides);
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("4slow_ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("4slow_ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ASSERT_FALSE(response.complete());
resolver_->SetDnsConfigOverrides(overrides);
@@ -5254,8 +5497,9 @@
overrides.attempts = 123;
resolver_->SetDnsConfigOverrides(overrides);
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("4slow_ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("4slow_ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ASSERT_FALSE(response.complete());
resolver_->SetDnsConfigOverrides(DnsConfigOverrides());
@@ -5268,8 +5512,9 @@
TEST_F(HostResolverManagerDnsTest,
CancelQueriesOnClearingOverrides_NoOverrides) {
ChangeDnsConfig(CreateValidDnsConfig());
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("4slow_ok", 80), NetLogWithSource(), base::nullopt));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("4slow_ok", 80), NetLogWithSource(),
+ base::nullopt, request_context_.get()));
ASSERT_FALSE(response.complete());
resolver_->SetDnsConfigOverrides(DnsConfigOverrides());
@@ -5343,8 +5588,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::TXT;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetHostnameResults());
@@ -5379,8 +5625,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::TXT;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5404,8 +5651,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::TXT;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5429,8 +5677,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::TXT;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_DNS_TIMED_OUT));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5454,8 +5703,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::TXT;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5479,8 +5729,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::TXT;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_DNS_MALFORMED_RESPONSE));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5501,8 +5752,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::TXT;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_DNS_MALFORMED_RESPONSE));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5524,8 +5776,9 @@
parameters.dns_query_type = DnsQueryType::TXT;
// Responses for the wrong type should be ignored.
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("ok", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("ok", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5556,8 +5809,9 @@
parameters.source = HostResolverSource::DNS;
parameters.dns_query_type = DnsQueryType::TXT;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetHostnameResults());
@@ -5588,8 +5842,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::PTR;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5614,8 +5869,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::PTR;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("8.8.8.8", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("8.8.8.8", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5643,8 +5899,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::PTR;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5668,8 +5925,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::PTR;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5693,8 +5951,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::PTR;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_DNS_TIMED_OUT));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5718,8 +5977,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::PTR;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5743,8 +6003,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::PTR;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_DNS_MALFORMED_RESPONSE));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5765,8 +6026,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::PTR;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_DNS_MALFORMED_RESPONSE));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5788,8 +6050,9 @@
parameters.dns_query_type = DnsQueryType::PTR;
// Responses for the wrong type should be ignored.
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("ok", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("ok", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5814,8 +6077,9 @@
parameters.source = HostResolverSource::DNS;
parameters.dns_query_type = DnsQueryType::PTR;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5843,8 +6107,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::SRV;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5886,8 +6151,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::SRV;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5915,8 +6181,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::SRV;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5940,8 +6207,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::SRV;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5965,8 +6233,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::SRV;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_DNS_TIMED_OUT));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -5990,8 +6259,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::SRV;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -6015,8 +6285,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::SRV;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_DNS_MALFORMED_RESPONSE));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -6037,8 +6308,9 @@
HostResolver::ResolveHostParameters parameters;
parameters.dns_query_type = DnsQueryType::SRV;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_DNS_MALFORMED_RESPONSE));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -6060,8 +6332,9 @@
parameters.dns_query_type = DnsQueryType::SRV;
// Responses for the wrong type should be ignored.
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("ok", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("ok", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -6090,8 +6363,9 @@
parameters.source = HostResolverSource::DNS;
parameters.dns_query_type = DnsQueryType::SRV;
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 108), NetLogWithSource(), parameters));
+ ResolveHostResponseHelper response(
+ resolver_->CreateRequest(HostPortPair("host", 108), NetLogWithSource(),
+ parameters, request_context_.get()));
EXPECT_THAT(response.result_error(), IsOk());
EXPECT_FALSE(response.request()->GetAddressResults());
EXPECT_FALSE(response.request()->GetTextResults());
@@ -6116,24 +6390,4 @@
HostPortPair("google.com", 5)));
}
-TEST_F(HostResolverManagerDnsTest, SetRequestContext) {
- URLRequestContext context;
-
- MockDnsClientRuleList rules;
- rules.emplace_back("host", dns_protocol::kTypeA, SecureDnsMode::AUTOMATIC,
- MockDnsClientRule::Result(MockDnsClientRule::OK),
- false /* delay */, &context);
- rules.emplace_back("host", dns_protocol::kTypeAAAA, SecureDnsMode::AUTOMATIC,
- MockDnsClientRule::Result(MockDnsClientRule::OK),
- false /* delay */, &context);
-
- CreateResolver();
- resolver_->SetRequestContext(&context);
- UseMockDnsClient(CreateValidDnsConfig(), std::move(rules));
-
- ResolveHostResponseHelper response(resolver_->CreateRequest(
- HostPortPair("host", 109), NetLogWithSource(), base::nullopt));
- EXPECT_THAT(response.result_error(), IsOk());
-}
-
} // namespace net
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 6e09c7b..bbf6e3e 100644
--- a/net/url_request/http_with_dns_over_https_unittest.cc
+++ b/net/url_request/http_with_dns_over_https_unittest.cc
@@ -71,7 +71,6 @@
config.dns_over_https_servers.emplace_back(url.spec(), true /* use_post */);
dns_client->SetConfig(config);
resolver_->SetRequestContext(&request_context_);
- resolver_->GetManagerForTesting()->SetRequestContext(&request_context_);
resolver_->SetProcParamsForTesting(
ProcTaskParams(new TestHostResolverProc(), 1));
resolver_->SetDnsClientForTesting(std::move(dns_client));
diff --git a/services/network/network_service.cc b/services/network/network_service.cc
index 7a8cae3f..ab8671b 100644
--- a/services/network/network_service.cc
+++ b/services/network/network_service.cc
@@ -458,27 +458,13 @@
return;
}
- for (auto* network_context : network_contexts_) {
- if (!network_context->IsPrimaryNetworkContext())
- continue;
-
- host_resolver_manager_->SetRequestContext(
- network_context->url_request_context());
-
- net::DnsConfigOverrides overrides;
- overrides.dns_over_https_servers.emplace();
- for (const auto& doh_server : *dns_over_https_servers) {
- overrides.dns_over_https_servers.value().emplace_back(
- doh_server->server_template, doh_server->use_post);
- }
- host_resolver_manager_->SetDnsConfigOverrides(overrides);
-
- return;
+ net::DnsConfigOverrides overrides;
+ overrides.dns_over_https_servers.emplace();
+ for (const auto& doh_server : *dns_over_https_servers) {
+ overrides.dns_over_https_servers.value().emplace_back(
+ doh_server->server_template, doh_server->use_post);
}
-
- // Execution should generally not reach this line, but could run into races
- // with teardown, or restarting a crashed network process, that could
- // theoretically result in reaching it.
+ host_resolver_manager_->SetDnsConfigOverrides(overrides);
}
void NetworkService::DisableQuic() {
@@ -691,6 +677,16 @@
}
void NetworkService::DestroyNetworkContexts() {
+ // If DNS over HTTPS is enabled, the HostResolver is currently using
+ // NetworkContexts to do DNS lookups, so need to tell the HostResolver
+ // to stop using DNS over HTTPS before destroying any NetworkContexts.
+ // The SetDnsConfigOverrides() call will will fail any in-progress DNS
+ // lookups, but only if there are current config overrides (which there will
+ // be if DNS over HTTPS is currently enabled).
+ if (host_resolver_manager_) {
+ host_resolver_manager_->SetDnsConfigOverrides(net::DnsConfigOverrides());
+ }
+
// Delete NetworkContexts. If there's a primary NetworkContext, it must be
// deleted after all other NetworkContexts, to avoid use-after-frees.
for (auto it = owned_network_contexts_.begin();
@@ -701,17 +697,6 @@
owned_network_contexts_.erase(last);
}
- // If DNS over HTTPS is enabled, the HostResolver is currently using the
- // primary NetworkContext to do DNS lookups, so need to tell the HostResolver
- // to stop using DNS over HTTPS before destroying the primary NetworkContext.
- // The SetDnsConfigOverrides() call will will fail any in-progress DNS
- // lookups, but only if there are current config overrides (which there will
- // be if DNS over HTTPS is currently enabled).
- if (host_resolver_manager_) {
- host_resolver_manager_->SetDnsConfigOverrides(net::DnsConfigOverrides());
- host_resolver_manager_->SetRequestContext(nullptr);
- }
-
DCHECK_LE(owned_network_contexts_.size(), 1u);
owned_network_contexts_.clear();
}
diff --git a/services/network/network_service_unittest.cc b/services/network/network_service_unittest.cc
index 6cf7f7b..68d6e1d4 100644
--- a/services/network/network_service_unittest.cc
+++ b/services/network/network_service_unittest.cc
@@ -550,51 +550,6 @@
service()->host_resolver_manager()->GetDnsOverHttpsServersForTesting());
}
-// Make sure that enabling DNS over HTTP without a primary NetworkContext fails.
-TEST_F(NetworkServiceTest,
- DnsOverHttpsEnableDoesNothingWithoutPrimaryNetworkContext) {
- // HostResolver::GetDnsClientForTesting() returns nullptr if the stub resolver
- // is disabled.
- EXPECT_FALSE(service()->host_resolver_manager()->GetDnsConfigAsValue());
-
- // Try to enable DnsClient and DNS over HTTPS. Only the first should take
- // effect.
- std::vector<mojom::DnsOverHttpsServerPtr> dns_over_https_servers;
- mojom::DnsOverHttpsServerPtr dns_over_https_server =
- mojom::DnsOverHttpsServer::New();
- dns_over_https_server->server_template = "https://foo/{?dns}";
- dns_over_https_servers.emplace_back(std::move(dns_over_https_server));
- service()->ConfigureStubHostResolver(true /* stub_resolver_enabled */,
- std::move(dns_over_https_servers));
- // DnsClient is enabled.
- EXPECT_TRUE(service()->host_resolver_manager()->GetDnsConfigAsValue());
- // DNS over HTTPS is not.
- EXPECT_FALSE(
- service()->host_resolver_manager()->GetDnsOverHttpsServersForTesting());
-
- // Create a NetworkContext that is not the primary one.
- mojom::NetworkContextPtr network_context;
- service()->CreateNetworkContext(mojo::MakeRequest(&network_context),
- CreateContextParams());
- // There should be no change in host resolver state.
- EXPECT_TRUE(service()->host_resolver_manager()->GetDnsConfigAsValue());
- EXPECT_FALSE(
- service()->host_resolver_manager()->GetDnsOverHttpsServersForTesting());
-
- // Try to enable DNS over HTTPS again, which should not work, since there's
- // still no primary NetworkContext.
- dns_over_https_servers.clear();
- dns_over_https_server = mojom::DnsOverHttpsServer::New();
- dns_over_https_server->server_template = "https://foo2/{?dns}";
- dns_over_https_servers.emplace_back(std::move(dns_over_https_server));
- service()->ConfigureStubHostResolver(true /* stub_resolver_enabled */,
- std::move(dns_over_https_servers));
- // There should be no change in host resolver state.
- EXPECT_TRUE(service()->host_resolver_manager()->GetDnsConfigAsValue());
- EXPECT_FALSE(
- service()->host_resolver_manager()->GetDnsOverHttpsServersForTesting());
-}
-
#endif // !defined(OS_IOS)
// |ntlm_v2_enabled| is only supported on POSIX platforms.