From 51c07140c9533c09f348d9fc7dfe5aea6341e618 Mon Sep 17 00:00:00 2001
From: "agl@chromium.org"
 <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Thu, 7 Oct 2010 15:18:58 +0000
Subject: net: plumb DnsRRResolver from IOThread to HttpNetworkSession.

This patch gets us most of the way. The next patch finishes plumbing
into the SSL client socket pool.

BUG=none
TEST=none

http://codereview.chromium.org/3533013

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@61789 0039d316-1c4b-4281-b951-d872f2087c98
---
 chrome/browser/io_thread.cc                       | 2 ++
 chrome/browser/io_thread.h                        | 2 ++
 chrome/browser/net/chrome_url_request_context.cc  | 3 +++
 chrome/browser/net/chrome_url_request_context.h   | 3 +++
 chrome/browser/net/connection_tester.cc           | 8 ++++++--
 chrome/service/net/service_url_request_context.cc | 4 ++++
 chrome/test/plugin/plugin_test.cpp                | 1 +
 7 files changed, 21 insertions(+), 2 deletions(-)

(limited to 'chrome')

diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index 2b55f6e..b76e895 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/net/passive_log_collector.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/net/url_fetcher.h"
+#include "net/base/dnsrr_resolver.h"
 #include "net/base/mapped_host_resolver.h"
 #include "net/base/host_cache.h"
 #include "net/base/host_resolver.h"
@@ -171,6 +172,7 @@ void IOThread::Init() {
 
   globals_->host_resolver.reset(
       CreateGlobalHostResolver(globals_->net_log.get()));
+  globals_->dnsrr_resolver.reset(new net::DnsRRResolver);
   globals_->http_auth_handler_factory.reset(CreateDefaultAuthHandlerFactory(
       globals_->host_resolver.get()));
 }
diff --git a/chrome/browser/io_thread.h b/chrome/browser/io_thread.h
index a51d515..9485e0b 100644
--- a/chrome/browser/io_thread.h
+++ b/chrome/browser/io_thread.h
@@ -24,6 +24,7 @@ class Predictor;
 }  // namespace chrome_browser_net
 
 namespace net {
+class DnsRRResolver;
 class HttpAuthHandlerFactory;
 class URLSecurityManager;
 }  // namespace net
@@ -33,6 +34,7 @@ class IOThread : public BrowserProcessSubThread {
   struct Globals {
     scoped_ptr<ChromeNetLog> net_log;
     scoped_ptr<net::HostResolver> host_resolver;
+    scoped_ptr<net::DnsRRResolver> dnsrr_resolver;
     scoped_ptr<net::HttpAuthHandlerFactory> http_auth_handler_factory;
     scoped_ptr<net::URLSecurityManager> url_security_manager;
     ChromeNetworkDelegate network_delegate;
diff --git a/chrome/browser/net/chrome_url_request_context.cc b/chrome/browser/net/chrome_url_request_context.cc
index 5819148..79a29c1 100644
--- a/chrome/browser/net/chrome_url_request_context.cc
+++ b/chrome/browser/net/chrome_url_request_context.cc
@@ -272,6 +272,7 @@ ChromeURLRequestContext* FactoryForOriginal::Create() {
       ChromeThread::GetMessageLoopProxyForThread(ChromeThread::CACHE));
   net::HttpCache* cache =
       new net::HttpCache(context->host_resolver(),
+                         context->dnsrr_resolver(),
                          context->proxy_service(),
                          context->ssl_config_service(),
                          context->http_auth_handler_factory(),
@@ -404,6 +405,7 @@ ChromeURLRequestContext* FactoryForOffTheRecord::Create() {
 
   net::HttpCache* cache =
       new net::HttpCache(context->host_resolver(),
+                         context->dnsrr_resolver(),
                          context->proxy_service(),
                          context->ssl_config_service(),
                          context->http_auth_handler_factory(),
@@ -499,6 +501,7 @@ ChromeURLRequestContext* FactoryForMedia::Create() {
     // If original HttpCache doesn't exist, simply construct one with a whole
     // new set of network stack.
     cache = new net::HttpCache(main_context->host_resolver(),
+                               main_context->dnsrr_resolver(),
                                main_context->proxy_service(),
                                main_context->ssl_config_service(),
                                main_context->http_auth_handler_factory(),
diff --git a/chrome/browser/net/chrome_url_request_context.h b/chrome/browser/net/chrome_url_request_context.h
index eccf823..183ad4a 100644
--- a/chrome/browser/net/chrome_url_request_context.h
+++ b/chrome/browser/net/chrome_url_request_context.h
@@ -127,6 +127,9 @@ class ChromeURLRequestContext : public URLRequestContext {
   void set_host_resolver(net::HostResolver* resolver) {
     host_resolver_ = resolver;
   }
+  void set_dnsrr_resolver(net::DnsRRResolver* dnsrr_resolver) {
+    dnsrr_resolver_ = dnsrr_resolver;
+  }
   void set_http_transaction_factory(net::HttpTransactionFactory* factory) {
     http_transaction_factory_ = factory;
   }
diff --git a/chrome/browser/net/connection_tester.cc b/chrome/browser/net/connection_tester.cc
index 0ed9f94..91d6afe 100644
--- a/chrome/browser/net/connection_tester.cc
+++ b/chrome/browser/net/connection_tester.cc
@@ -12,6 +12,7 @@
 #include "chrome/browser/importer/firefox_proxy_settings.h"
 #include "chrome/common/chrome_switches.h"
 #include "net/base/cookie_monster.h"
+#include "net/base/dnsrr_resolver.h"
 #include "net/base/host_resolver.h"
 #include "net/base/host_resolver_impl.h"
 #include "net/base/io_buffer.h"
@@ -53,13 +54,15 @@ class ExperimentURLRequestContext : public URLRequestContext {
 
     // The rest of the dependencies are standard, and don't depend on the
     // experiment being run.
+    dnsrr_resolver_ = new net::DnsRRResolver;
     ftp_transaction_factory_ = new net::FtpNetworkLayer(host_resolver_);
     ssl_config_service_ = new net::SSLConfigServiceDefaults;
     http_auth_handler_factory_ = net::HttpAuthHandlerFactory::CreateDefault(
         host_resolver_);
     http_transaction_factory_ = new net::HttpCache(
-        net::HttpNetworkLayer::CreateFactory(host_resolver_, proxy_service_,
-            ssl_config_service_, http_auth_handler_factory_, NULL, NULL),
+        net::HttpNetworkLayer::CreateFactory(host_resolver_, dnsrr_resolver_,
+            proxy_service_, ssl_config_service_, http_auth_handler_factory_,
+            NULL, NULL),
         net::HttpCache::DefaultBackend::InMemory(0));
     // In-memory cookie store.
     cookie_store_ = new net::CookieMonster(NULL, NULL);
@@ -72,6 +75,7 @@ class ExperimentURLRequestContext : public URLRequestContext {
     delete ftp_transaction_factory_;
     delete http_transaction_factory_;
     delete http_auth_handler_factory_;
+    delete dnsrr_resolver_;
     delete host_resolver_;
   }
 
diff --git a/chrome/service/net/service_url_request_context.cc b/chrome/service/net/service_url_request_context.cc
index 9455c00..2b55d0c 100644
--- a/chrome/service/net/service_url_request_context.cc
+++ b/chrome/service/net/service_url_request_context.cc
@@ -7,6 +7,7 @@
 #include "chrome/service/service_process.h"
 #include "net/base/cookie_monster.h"
 #include "net/base/cookie_policy.h"
+#include "net/base/dnsrr_resolver.h"
 #include "net/base/host_resolver.h"
 #include "net/base/ssl_config_service_defaults.h"
 #include "net/ftp/ftp_network_layer.h"
@@ -35,12 +36,14 @@ ServiceURLRequestContext::ServiceURLRequestContext() {
   proxy_service_ =
       net::ProxyService::Create(
           proxy_config_service, false, 0u, this, NULL, NULL);
+  dnsrr_resolver_ = new net::DnsRRResolver;
   ftp_transaction_factory_ = new net::FtpNetworkLayer(host_resolver_);
   ssl_config_service_ = new net::SSLConfigServiceDefaults;
   http_auth_handler_factory_ = net::HttpAuthHandlerFactory::CreateDefault(
       host_resolver_);
   http_transaction_factory_ = new net::HttpCache(
       net::HttpNetworkLayer::CreateFactory(host_resolver_,
+                                           dnsrr_resolver_,
                                            proxy_service_,
                                            ssl_config_service_,
                                            http_auth_handler_factory_,
@@ -57,4 +60,5 @@ ServiceURLRequestContext::~ServiceURLRequestContext() {
   delete ftp_transaction_factory_;
   delete http_transaction_factory_;
   delete http_auth_handler_factory_;
+  delete dnsrr_resolver_;
 }
diff --git a/chrome/test/plugin/plugin_test.cpp b/chrome/test/plugin/plugin_test.cpp
index 0907816..92c3832 100644
--- a/chrome/test/plugin/plugin_test.cpp
+++ b/chrome/test/plugin/plugin_test.cpp
@@ -235,6 +235,7 @@ class PluginInstallerDownloadTest
           host_resolver_);
       http_transaction_factory_ = new net::HttpCache(
           net::HttpNetworkLayer::CreateFactory(host_resolver_,
+                                               NULL /* dnsrr_resolver */,
                                                proxy_service_,
                                                ssl_config_service_,
                                                http_auth_handler_factory_,
-- 
cgit v1.1