[net/dns] Treat Name Resolution Policy Table as unhandled option.

Also, conservatively assume that non-empty NRPT or unknown DnsConfig could mean
DirectAccess is used, and disable IPv6 probing in that case.

BUG=259792

Review URL: https://chromiumcodereview.appspot.com/23522036

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@223595 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/dns/host_resolver_impl.cc b/net/dns/host_resolver_impl.cc
index 52c6f93..90b7d36 100644
--- a/net/dns/host_resolver_impl.cc
+++ b/net/dns/host_resolver_impl.cc
@@ -1799,6 +1799,7 @@
       received_dns_config_(false),
       num_dns_failures_(0),
       probe_ipv6_support_(true),
+      use_local_ipv6_(false),
       resolved_known_ipv6_hostname_(false),
       additional_resolver_flags_(0),
       fallback_to_proctask_(true) {
@@ -1824,12 +1825,12 @@
   EnsureDnsReloaderInit();
 #endif
 
-  // TODO(szym): Remove when received_dns_config_ is removed, once
-  // http://crbug.com/137914 is resolved.
   {
     DnsConfig dns_config;
     NetworkChangeNotifier::GetDnsConfig(&dns_config);
     received_dns_config_ = dns_config.IsValid();
+    // Conservatively assume local IPv6 is needed when DnsConfig is not valid.
+    use_local_ipv6_ = !dns_config.IsValid() || dns_config.use_local_ipv6;
   }
 
   fallback_to_proctask_ = !ConfigureAsyncDnsNoFallbackFieldTrial();
@@ -2142,7 +2143,7 @@
   AddressFamily effective_address_family = info.address_family();
 
   if (info.address_family() == ADDRESS_FAMILY_UNSPECIFIED) {
-    if (probe_ipv6_support_) {
+    if (probe_ipv6_support_ && !use_local_ipv6_) {
       base::TimeTicks start_time = base::TimeTicks::Now();
       // Google DNS address.
       const uint8 kIPv6Address[] =
@@ -2266,6 +2267,8 @@
 
   // TODO(szym): Remove once http://crbug.com/137914 is resolved.
   received_dns_config_ = dns_config.IsValid();
+  // Conservatively assume local IPv6 is needed when DnsConfig is not valid.
+  use_local_ipv6_ = !dns_config.IsValid() || dns_config.use_local_ipv6;
 
   num_dns_failures_ = 0;