Index: chrome/browser/io_thread.cc |
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc |
index f4f92ba73875f912d09753d4f83b6b0fb0c17507..f1cb24b4aa3be7679b4f2da16d45a2b93c69438d 100644 |
--- a/chrome/browser/io_thread.cc |
+++ b/chrome/browser/io_thread.cc |
@@ -21,6 +21,7 @@ |
#include "chrome/browser/net/passive_log_collector.h" |
#include "chrome/browser/net/predictor_api.h" |
#include "chrome/common/chrome_switches.h" |
+#include "chrome/common/net/raw_host_resolver_proc.h" |
#include "chrome/common/net/url_fetcher.h" |
#include "net/base/dnsrr_resolver.h" |
#include "net/base/host_cache.h" |
@@ -87,8 +88,24 @@ net::HostResolver* CreateGlobalHostResolver(net::NetLog* net_log) { |
parallelism = 20; |
} |
+ // Use the specified DNS server for doing raw resolutions if requested |
+ // from the command-line. |
+ scoped_refptr<net::HostResolverProc> resolver_proc; |
+ if (command_line.HasSwitch(switches::kDnsServer)) { |
+ std::string dns_ip_string = |
+ command_line.GetSwitchValueASCII(switches::kDnsServer); |
+ net::IPAddressNumber dns_ip_number; |
+ if (net::ParseIPLiteralToNumber(dns_ip_string, &dns_ip_number)) { |
+ resolver_proc = |
+ new chrome_common_net::RawHostResolverProc(dns_ip_number, NULL); |
+ } else { |
+ LOG(ERROR) << "Invalid IP address specified for --dns-server: " |
+ << dns_ip_string; |
+ } |
+ } |
+ |
net::HostResolver* global_host_resolver = |
- net::CreateSystemHostResolver(parallelism, net_log); |
+ net::CreateSystemHostResolver(parallelism, resolver_proc.get(), net_log); |
// Determine if we should disable IPv6 support. |
if (!command_line.HasSwitch(switches::kEnableIPv6)) { |