Apply the SecureDnsMode to cache lookups for all query sources.

Previously the SecureDnsMode only affected cache lookups for queries
for which DnsTasks were permitted.

Bug: 985589
Change-Id: I4b7379fd623bc7f6568e05d3207f46eb74e76a92
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1754526
Reviewed-by: Eric Orth <[email protected]>
Commit-Queue: Katharine Daly <[email protected]>
Cr-Commit-Position: refs/heads/master@{#687476}
diff --git a/net/dns/host_resolver_manager_unittest.cc b/net/dns/host_resolver_manager_unittest.cc
index 7756612..bb39bd3 100644
--- a/net/dns/host_resolver_manager_unittest.cc
+++ b/net/dns/host_resolver_manager_unittest.cc
@@ -5168,6 +5168,62 @@
   EXPECT_TRUE(!!cache_result);
 }
 
+TEST_F(HostResolverManagerDnsTest, SecureDnsMode_Secure_Local_CacheMiss) {
+  ChangeDnsConfig(CreateValidDnsConfig());
+  DnsConfigOverrides overrides;
+  overrides.secure_dns_mode = DnsConfig::SecureDnsMode::SECURE;
+  resolver_->SetDnsConfigOverrides(overrides);
+
+  HostResolver::ResolveHostParameters source_none_parameters;
+  source_none_parameters.source = HostResolverSource::LOCAL_ONLY;
+
+  // Populate cache with an insecure entry.
+  HostCache::Key cached_insecure_key =
+      HostCache::Key("automatic", DnsQueryType::UNSPECIFIED,
+                     0 /* host_resolver_flags */, HostResolverSource::ANY);
+  IPEndPoint kExpectedInsecureIP = CreateExpected("192.168.1.102", 80);
+  PopulateCache(cached_insecure_key, kExpectedInsecureIP);
+
+  // NONE query expected to complete synchronously with a cache miss since
+  // the insecure cache should not be checked.
+  ResolveHostResponseHelper cache_miss_request(resolver_->CreateRequest(
+      HostPortPair("automatic", 80), NetLogWithSource(), source_none_parameters,
+      request_context_.get(), host_cache_.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());
+  EXPECT_FALSE(cache_miss_request.request()->GetStaleInfo());
+}
+
+TEST_F(HostResolverManagerDnsTest, SecureDnsMode_Secure_Local_CacheHit) {
+  ChangeDnsConfig(CreateValidDnsConfig());
+  DnsConfigOverrides overrides;
+  overrides.secure_dns_mode = DnsConfig::SecureDnsMode::SECURE;
+  resolver_->SetDnsConfigOverrides(overrides);
+
+  HostResolver::ResolveHostParameters source_none_parameters;
+  source_none_parameters.source = HostResolverSource::LOCAL_ONLY;
+
+  // Populate cache with a secure entry.
+  HostCache::Key cached_secure_key =
+      HostCache::Key("secure", DnsQueryType::UNSPECIFIED,
+                     0 /* host_resolver_flags */, HostResolverSource::ANY);
+  cached_secure_key.secure = true;
+  IPEndPoint kExpectedSecureIP = CreateExpected("192.168.1.103", 80);
+  PopulateCache(cached_secure_key, kExpectedSecureIP);
+
+  // NONE query expected to complete synchronously with a cache hit from the
+  // secure cache.
+  ResolveHostResponseHelper response_cached(resolver_->CreateRequest(
+      HostPortPair("secure", 80), NetLogWithSource(), base::nullopt,
+      request_context_.get(), host_cache_.get()));
+  EXPECT_TRUE(response_cached.complete());
+  EXPECT_THAT(response_cached.result_error(), IsOk());
+  EXPECT_THAT(
+      response_cached.request()->GetAddressResults().value().endpoints(),
+      testing::ElementsAre(kExpectedSecureIP));
+}
+
 // Test the case where only a single transaction slot is available.
 TEST_F(HostResolverManagerDnsTest, SerialResolver) {
   CreateSerialResolver();