diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-28 06:33:58 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-28 06:33:58 +0000 |
commit | 57cb0f76bceab5f05f3d14a23e764795b476f3d3 (patch) | |
tree | a8c549a7c8e18f1e581cfba2ee78bca33699abf9 | |
parent | d8397a8c9673136fe1deae24367b989e97f54bfb (diff) | |
download | chromium_src-57cb0f76bceab5f05f3d14a23e764795b476f3d3.zip chromium_src-57cb0f76bceab5f05f3d14a23e764795b476f3d3.tar.gz chromium_src-57cb0f76bceab5f05f3d14a23e764795b476f3d3.tar.bz2 |
Simplify HttpCache/HttpNetworkLayer/HttpNetworkSession interaction.
Eliminate lazy initialization of HttpNetworkSession in HttpNetworkLayer.
* This eliminates the need to update parameters for HttpNetworkLayer, it just takes a HttpNetworkSession.
* It is OK to eliminate lazy initialization since these variables are cheap.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/6402002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72931 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/io_thread.cc | 9 | ||||
-rw-r--r-- | chrome/browser/net/chrome_url_request_context.cc | 53 | ||||
-rw-r--r-- | chrome/browser/net/connection_tester.cc | 24 | ||||
-rw-r--r-- | chrome/browser/net/connection_tester_unittest.cc | 15 | ||||
-rw-r--r-- | chrome/browser/policy/device_management_service.cc | 5 | ||||
-rw-r--r-- | chrome/browser/sync/glue/http_bridge.cc | 2 | ||||
-rw-r--r-- | chrome/service/net/service_url_request_context.cc | 30 | ||||
-rw-r--r-- | chrome/test/plugin/plugin_test.cpp | 30 | ||||
-rw-r--r-- | chrome_frame/metrics_service.cc | 31 | ||||
-rw-r--r-- | chrome_frame/test/test_server_test.cc | 8 | ||||
-rw-r--r-- | net/http/http_cache.cc | 27 | ||||
-rw-r--r-- | net/http/http_cache.h | 2 | ||||
-rw-r--r-- | net/http/http_network_layer.cc | 127 | ||||
-rw-r--r-- | net/http/http_network_layer.h | 67 | ||||
-rw-r--r-- | net/http/http_network_layer_unittest.cc | 142 | ||||
-rw-r--r-- | net/proxy/proxy_script_fetcher_impl_unittest.cc | 49 | ||||
-rw-r--r-- | net/spdy/spdy_test_util.cc | 29 | ||||
-rw-r--r-- | net/tools/fetch/fetch_client.cc | 35 | ||||
-rw-r--r-- | net/url_request/url_request_test_util.cc | 27 |
19 files changed, 297 insertions, 415 deletions
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc index 8141719..d5af8f0 100644 --- a/chrome/browser/io_thread.cc +++ b/chrome/browser/io_thread.cc @@ -38,6 +38,7 @@ #include "net/http/http_auth_filter.h" #include "net/http/http_auth_handler_factory.h" #include "net/http/http_network_layer.h" +#include "net/http/http_network_session.h" #if defined(USE_NSS) #include "net/ocsp/nss_ocsp.h" #endif // defined(USE_NSS) @@ -333,20 +334,22 @@ void IOThread::Init() { // For the ProxyScriptFetcher, we use a direct ProxyService. globals_->proxy_script_fetcher_proxy_service = net::ProxyService::CreateDirectWithNetLog(net_log_); - globals_->proxy_script_fetcher_http_transaction_factory.reset( - new net::HttpNetworkLayer( - globals_->client_socket_factory, + scoped_refptr<net::HttpNetworkSession> network_session( + new net::HttpNetworkSession( globals_->host_resolver.get(), globals_->cert_verifier.get(), globals_->dnsrr_resolver.get(), NULL /* dns_cert_checker */, NULL /* ssl_host_info_factory */, globals_->proxy_script_fetcher_proxy_service.get(), + globals_->client_socket_factory, globals_->ssl_config_service.get(), new net::SpdySessionPool(globals_->ssl_config_service.get()), globals_->http_auth_handler_factory.get(), &globals_->network_delegate, net_log_)); + globals_->proxy_script_fetcher_http_transaction_factory.reset( + new net::HttpNetworkLayer(network_session)); scoped_refptr<net::URLRequestContext> proxy_script_fetcher_context = ConstructProxyScriptFetcherContext(globals_, net_log_); diff --git a/chrome/browser/net/chrome_url_request_context.cc b/chrome/browser/net/chrome_url_request_context.cc index d3850df..dc6853a 100644 --- a/chrome/browser/net/chrome_url_request_context.cc +++ b/chrome/browser/net/chrome_url_request_context.cc @@ -281,17 +281,17 @@ ChromeURLRequestContext* FactoryForOriginal::Create() { net::HttpCache::DefaultBackend* backend = new net::HttpCache::DefaultBackend( net::DISK_CACHE, disk_cache_path_, cache_size_, BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE)); - net::HttpCache* cache = - new net::HttpCache(context->host_resolver(), - context->cert_verifier(), - context->dnsrr_resolver(), - context->dns_cert_checker(), - context->proxy_service(), - context->ssl_config_service(), - context->http_auth_handler_factory(), - &io_thread_globals->network_delegate, - io_thread()->net_log(), - backend); + net::HttpCache* cache = new net::HttpCache( + context->host_resolver(), + context->cert_verifier(), + context->dnsrr_resolver(), + context->dns_cert_checker(), + context->proxy_service(), + context->ssl_config_service(), + context->http_auth_handler_factory(), + &io_thread_globals->network_delegate, + io_thread()->net_log(), + backend); bool record_mode = chrome::kRecordModeEnabled && command_line.HasSwitch(switches::kRecordMode); @@ -491,35 +491,8 @@ ChromeURLRequestContext* FactoryForMedia::Create() { net::HttpCache* main_cache = main_context->http_transaction_factory()->GetCache(); - net::HttpCache* cache; - if (main_cache) { - // Try to reuse HttpNetworkSession in the main context, assuming that - // HttpTransactionFactory (network_layer()) of HttpCache is implemented - // by HttpNetworkLayer so we can reuse HttpNetworkSession within it. This - // assumption will be invalid if the original HttpCache is constructed with - // HttpCache(HttpTransactionFactory*, BackendFactory*) constructor. - net::HttpNetworkLayer* main_network_layer = - static_cast<net::HttpNetworkLayer*>(main_cache->network_layer()); - cache = new net::HttpCache(main_network_layer->GetSession(), backend); - // TODO(eroman): Since this is poaching the session from the main - // context, it should hold a reference to that context preventing the - // session from getting deleted. - } else { - // If original HttpCache doesn't exist, simply construct one with a whole - // new set of network stack. - cache = new net::HttpCache( - io_thread_globals->host_resolver.get(), - io_thread_globals->cert_verifier.get(), - io_thread_globals->dnsrr_resolver.get(), - NULL /* dns_cert_checker */, - main_context->proxy_service(), - main_context->ssl_config_service(), - io_thread_globals->http_auth_handler_factory.get(), - &io_thread_globals->network_delegate, - io_thread()->net_log(), - backend); - } - + net::HttpNetworkSession* network_session = main_cache->GetSession(); + net::HttpCache* cache = new net::HttpCache(network_session, backend); context->set_http_transaction_factory(cache); context->set_net_log(io_thread()->net_log()); diff --git a/chrome/browser/net/connection_tester.cc b/chrome/browser/net/connection_tester.cc index d68a169..f0f7efe 100644 --- a/chrome/browser/net/connection_tester.cc +++ b/chrome/browser/net/connection_tester.cc @@ -25,9 +25,11 @@ #include "net/ftp/ftp_network_layer.h" #include "net/http/http_auth_handler_factory.h" #include "net/http/http_cache.h" -#include "net/http/http_network_layer.h" +#include "net/http/http_network_session.h" #include "net/proxy/proxy_config_service_fixed.h" #include "net/proxy/proxy_script_fetcher_impl.h" +#include "net/socket/client_socket_factory.h" +#include "net/spdy/spdy_session_pool.h" #include "net/url_request/url_request.h" #include "net/url_request/url_request_context.h" @@ -67,12 +69,22 @@ class ExperimentURLRequestContext : public net::URLRequestContext { ssl_config_service_ = new net::SSLConfigServiceDefaults; http_auth_handler_factory_ = net::HttpAuthHandlerFactory::CreateDefault( host_resolver_); + scoped_refptr<net::HttpNetworkSession> network_session( + new net::HttpNetworkSession( + host_resolver_, + cert_verifier_, + dnsrr_resolver_, + NULL /* dns_cert_checker */, + NULL /* ssl_host_info_factory */, + proxy_service_, + net::ClientSocketFactory::GetDefaultFactory(), + ssl_config_service_, + new net::SpdySessionPool(NULL), + http_auth_handler_factory_, + NULL /* network_delegate */, + NULL /* net_log */)); http_transaction_factory_ = new net::HttpCache( - net::HttpNetworkLayer::CreateFactory(host_resolver_, cert_verifier_, - dnsrr_resolver_, NULL /* dns_cert_checker */, - NULL /* ssl_host_info_factory */, proxy_service_, - ssl_config_service_, http_auth_handler_factory_, NULL, NULL), - NULL /* net_log */, + network_session, net::HttpCache::DefaultBackend::InMemory(0)); // In-memory cookie store. cookie_store_ = new net::CookieMonster(NULL, NULL); diff --git a/chrome/browser/net/connection_tester_unittest.cc b/chrome/browser/net/connection_tester_unittest.cc index 8eecd81..f08daf4 100644 --- a/chrome/browser/net/connection_tester_unittest.cc +++ b/chrome/browser/net/connection_tester_unittest.cc @@ -14,6 +14,7 @@ #include "net/ftp/ftp_network_layer.h" #include "net/http/http_auth_handler_factory.h" #include "net/http/http_network_layer.h" +#include "net/http/http_network_session.h" #include "net/proxy/proxy_config_service_fixed.h" #include "net/socket/client_socket_factory.h" #include "net/spdy/spdy_session_pool.h" @@ -117,20 +118,22 @@ class ConnectionTesterTest : public PlatformTest { proxy_service_ = net::ProxyService::CreateDirect(); proxy_script_fetcher_context_->set_proxy_service(proxy_service_); ssl_config_service_ = net::SSLConfigService::CreateSystemSSLConfigService(); - http_transaction_factory_.reset( - new net::HttpNetworkLayer( - client_socket_factory_, + scoped_refptr<net::HttpNetworkSession> network_session( + new net::HttpNetworkSession( &host_resolver_, &cert_verifier_, &dnsrr_resolver_, - NULL /* DNS cert provenance checker */, + NULL /* dns_cert_checker */, NULL /* ssl_host_info_factory */, proxy_service_.get(), + client_socket_factory_, ssl_config_service_, new net::SpdySessionPool(ssl_config_service_), &http_auth_handler_factory_, - NULL /* NetworkDelegate */, - NULL /* NetLog */)); + NULL /* network_delegate */, + NULL /* net_log */)); + http_transaction_factory_.reset( + new net::HttpNetworkLayer(network_session)); proxy_script_fetcher_context_->set_http_transaction_factory( http_transaction_factory_.get()); // In-memory cookie store. diff --git a/chrome/browser/policy/device_management_service.cc b/chrome/browser/policy/device_management_service.cc index e29d21a..a2f6bc7 100644 --- a/chrome/browser/policy/device_management_service.cc +++ b/chrome/browser/policy/device_management_service.cc @@ -48,8 +48,9 @@ DeviceManagementRequestContext::DeviceManagementRequestContext( ssl_config_service_ = base_context->ssl_config_service(); // Share the http session. - http_transaction_factory_ = net::HttpNetworkLayer::CreateFactory( - base_context->http_transaction_factory()->GetSession()); + http_transaction_factory_ = + new net::HttpNetworkLayer( + base_context->http_transaction_factory()->GetSession()); // No cookies, please. cookie_store_ = new net::CookieMonster(NULL, NULL); diff --git a/chrome/browser/sync/glue/http_bridge.cc b/chrome/browser/sync/glue/http_bridge.cc index 265a044..b51975c 100644 --- a/chrome/browser/sync/glue/http_bridge.cc +++ b/chrome/browser/sync/glue/http_bridge.cc @@ -87,7 +87,7 @@ HttpBridge::RequestContext::RequestContext( net::HttpNetworkSession* session = baseline_context->http_transaction_factory()->GetSession(); DCHECK(session); - http_transaction_factory_ = net::HttpNetworkLayer::CreateFactory(session); + http_transaction_factory_ = new net::HttpNetworkLayer(session); // TODO(timsteele): We don't currently listen for pref changes of these // fields or CookiePolicy; I'm not sure we want to strictly follow the diff --git a/chrome/service/net/service_url_request_context.cc b/chrome/service/net/service_url_request_context.cc index e655489..41a9f35 100644 --- a/chrome/service/net/service_url_request_context.cc +++ b/chrome/service/net/service_url_request_context.cc @@ -22,7 +22,9 @@ #include "net/ftp/ftp_network_layer.h" #include "net/http/http_auth_handler_factory.h" #include "net/http/http_cache.h" -#include "net/http/http_network_layer.h" +#include "net/http/http_network_session.h" +#include "net/socket/client_socket_factory.h" +#include "net/spdy/spdy_session_pool.h" #include "net/proxy/proxy_service.h" namespace { @@ -124,18 +126,22 @@ ServiceURLRequestContext::ServiceURLRequestContext( ssl_config_service_ = new net::SSLConfigServiceDefaults; http_auth_handler_factory_ = net::HttpAuthHandlerFactory::CreateDefault( host_resolver_); + scoped_refptr<net::HttpNetworkSession> network_session( + new net::HttpNetworkSession( + host_resolver_, + cert_verifier_, + dnsrr_resolver_, + NULL /* dns_cert_checker */, + NULL /* ssl_host_info_factory */, + proxy_service_, + net::ClientSocketFactory::GetDefaultFactory(), + ssl_config_service_, + new net::SpdySessionPool(NULL), + http_auth_handler_factory_, + NULL /* network_delegate */, + NULL /* net_log */)); http_transaction_factory_ = new net::HttpCache( - net::HttpNetworkLayer::CreateFactory(host_resolver_, - cert_verifier_, - dnsrr_resolver_, - NULL /* dns_cert_checker */, - NULL /* ssl_host_info_factory */, - proxy_service_, - ssl_config_service_, - http_auth_handler_factory_, - NULL /* network_delegate */, - NULL /* net_log */), - NULL /* net_log */, + network_session, net::HttpCache::DefaultBackend::InMemory(0)); // In-memory cookie store. cookie_store_ = new net::CookieMonster(NULL, NULL); diff --git a/chrome/test/plugin/plugin_test.cpp b/chrome/test/plugin/plugin_test.cpp index ace16bc..34a9de3a 100644 --- a/chrome/test/plugin/plugin_test.cpp +++ b/chrome/test/plugin/plugin_test.cpp @@ -45,7 +45,9 @@ #include "net/base/ssl_config_service_defaults.h" #include "net/http/http_auth_handler_factory.h" #include "net/http/http_cache.h" -#include "net/http/http_network_layer.h" +#include "net/http/http_network_session.h" +#include "net/socket/client_socket_factory.h" +#include "net/spdy/spdy_session_pool.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_status.h" #include "third_party/npapi/bindings/npapi.h" @@ -284,18 +286,22 @@ class PluginInstallerDownloadTest ssl_config_service_ = new net::SSLConfigServiceDefaults; http_auth_handler_factory_ = net::HttpAuthHandlerFactory::CreateDefault( host_resolver_); + scoped_refptr<net::HttpNetworkSession> network_session( + new net::HttpNetworkSession( + host_resolver_, + cert_verifier_, + NULL /* dnsrr_resolver */, + NULL /* dns_cert_checker */, + NULL /* ssl_host_info_factory */, + proxy_service_, + net::ClientSocketFactory::GetDefaultFactory(), + ssl_config_service_, + new net::SpdySessionPool(NULL), + http_auth_handler_factory_, + network_delegate_, + NULL /* net_log */)); http_transaction_factory_ = new net::HttpCache( - net::HttpNetworkLayer::CreateFactory(host_resolver_, - cert_verifier_, - NULL /* dnsrr_resolver */, - NULL /* dns_cert_checker */, - NULL /* ssl_host_info_factory */, - proxy_service_, - ssl_config_service_, - http_auth_handler_factory_, - network_delegate_, - NULL), - NULL /* net_log */, + network_session, net::HttpCache::DefaultBackend::InMemory(0)); } diff --git a/chrome_frame/metrics_service.cc b/chrome_frame/metrics_service.cc index 3f22ae5..deb5f20 100644 --- a/chrome_frame/metrics_service.cc +++ b/chrome_frame/metrics_service.cc @@ -79,7 +79,9 @@ #include "net/base/upload_data.h" #include "net/http/http_auth_handler_factory.h" #include "net/http/http_cache.h" -#include "net/http/http_network_layer.h" +#include "net/http/http_network_session.h" +#include "net/socket/client_socket_factory.h" +#include "net/spdy/spdy_session_pool.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_status.h" @@ -178,18 +180,23 @@ class ChromeFrameUploadRequestContext : public net::URLRequestContext { supported_schemes, url_security_manager_.get(), host_resolver_, std::string(), false, false); + scoped_refptr<net::HttpNetworkSession> network_session = + new net::HttpNetworkSession( + host_resolver_, + cert_verifier_, + NULL /* dnsrr_resolver */, + NULL /* dns_cert_checker*/, + NULL /* ssl_host_info_factory */, + proxy_service_, + net::ClientSocketFactory::GetDefaultFactory(), + ssl_config_service_, + new net::SpdySessionPool(ssl_config_service_), + http_auth_handler_factory_, + network_delegate_, + NULL); + http_transaction_factory_ = new net::HttpCache( - net::HttpNetworkLayer::CreateFactory(host_resolver_, - cert_verifier_, - NULL /* dnsrr_resovler */, - NULL /* dns_cert_checker*/, - NULL /* ssl_host_info */, - proxy_service_, - ssl_config_service_, - http_auth_handler_factory_, - network_delegate_, - NULL), - NULL /* net_log */, + network_session, net::HttpCache::DefaultBackend::InMemory(0)); } diff --git a/chrome_frame/test/test_server_test.cc b/chrome_frame/test/test_server_test.cc index 1355471..d45222d 100644 --- a/chrome_frame/test/test_server_test.cc +++ b/chrome_frame/test/test_server_test.cc @@ -14,7 +14,10 @@ #include "net/disk_cache/disk_cache.h" #include "net/http/http_auth_handler_factory.h" #include "net/http/http_cache.h" +#include "net/http/http_network_session.h" #include "net/proxy/proxy_service.h" +#include "net/socket/client_socket_factory.h" +#include "net/spdy/spdy_session_pool.h" #include "net/url_request/url_request.h" #include "net/url_request/url_request_test_util.h" #include "testing/gtest/include/gtest/gtest.h" @@ -70,18 +73,19 @@ class URLRequestTestContext : public net::URLRequestContext { http_auth_handler_factory_ = net::HttpAuthHandlerFactory::CreateDefault( host_resolver_); http_transaction_factory_ = new net::HttpCache( - net::HttpNetworkLayer::CreateFactory( + new net::HttpNetworkSession( host_resolver_, cert_verifier_, NULL /* dnsrr_resolver */, NULL /* dns_cert_checker */, NULL /* ssl_host_info_factory */, proxy_service_, + net::ClientSocketFactory::GetDefaultFactory(), ssl_config_service_, + new net::SpdySessionPool(ssl_config_service_), http_auth_handler_factory_, NULL /* network_delegate */, NULL /* net_log */), - NULL /* net_log */, net::HttpCache::DefaultBackend::InMemory(0)); // In-memory cookie store. cookie_store_ = new net::CookieMonster(NULL, NULL); diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc index 3ef5a7b7..1690e55 100644 --- a/net/http/http_cache.cc +++ b/net/http/http_cache.cc @@ -33,6 +33,7 @@ #include "net/http/http_response_headers.h" #include "net/http/http_response_info.h" #include "net/http/http_util.h" +#include "net/socket/client_socket_factory.h" #include "net/socket/ssl_host_info.h" #include "net/spdy/spdy_session_pool.h" @@ -278,7 +279,6 @@ class HttpCache::SSLHostInfoFactoryAdaptor : public SSLHostInfoFactory { }; //----------------------------------------------------------------------------- - HttpCache::HttpCache(HostResolver* host_resolver, CertVerifier* cert_verifier, DnsRRResolver* dnsrr_resolver, @@ -295,21 +295,34 @@ HttpCache::HttpCache(HostResolver* host_resolver, mode_(NORMAL), ssl_host_info_factory_(new SSLHostInfoFactoryAdaptor( ALLOW_THIS_IN_INITIALIZER_LIST(this))), - network_layer_(HttpNetworkLayer::CreateFactory(host_resolver, - cert_verifier, dnsrr_resolver, dns_cert_checker_, - ssl_host_info_factory_.get(), - proxy_service, ssl_config_service, - http_auth_handler_factory, network_delegate, net_log)), + network_layer_( + new HttpNetworkLayer( + new HttpNetworkSession( + host_resolver, + cert_verifier, + dnsrr_resolver, + dns_cert_checker_, + ssl_host_info_factory_.get(), + proxy_service, + ClientSocketFactory::GetDefaultFactory(), + ssl_config_service, + new SpdySessionPool(ssl_config_service), + http_auth_handler_factory, + network_delegate, + net_log))), ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)) { } + HttpCache::HttpCache(HttpNetworkSession* session, BackendFactory* backend_factory) : net_log_(session->net_log()), backend_factory_(backend_factory), building_backend_(false), mode_(NORMAL), - network_layer_(HttpNetworkLayer::CreateFactory(session)), + ssl_host_info_factory_(new SSLHostInfoFactoryAdaptor( + ALLOW_THIS_IN_INITIALIZER_LIST(this))), + network_layer_(new HttpNetworkLayer(session)), ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)) { } diff --git a/net/http/http_cache.h b/net/http/http_cache.h index b431ee6..563ed17 100644 --- a/net/http/http_cache.h +++ b/net/http/http_cache.h @@ -131,7 +131,7 @@ class HttpCache : public HttpTransactionFactory, // The disk cache is initialized lazily (by CreateTransaction) in this case. // Provide an existing HttpNetworkSession, the cache can construct a // network layer with a shared HttpNetworkSession in order for multiple - // network layers to share information (e.g. authenication data). The + // network layers to share information (e.g. authentication data). The // HttpCache takes ownership of the |backend_factory|. HttpCache(HttpNetworkSession* session, BackendFactory* backend_factory); diff --git a/net/http/http_network_layer.cc b/net/http/http_network_layer.cc index 975e75c..293f8ec 100644 --- a/net/http/http_network_layer.cc +++ b/net/http/http_network_layer.cc @@ -18,81 +18,8 @@ namespace net { //----------------------------------------------------------------------------- - -HttpNetworkLayer::HttpNetworkLayer( - ClientSocketFactory* socket_factory, - HostResolver* host_resolver, - CertVerifier* cert_verifier, - DnsRRResolver* dnsrr_resolver, - DnsCertProvenanceChecker* dns_cert_checker, - SSLHostInfoFactory* ssl_host_info_factory, - ProxyService* proxy_service, - SSLConfigService* ssl_config_service, - HttpAuthHandlerFactory* http_auth_handler_factory, - HttpNetworkDelegate* network_delegate, - NetLog* net_log) - : socket_factory_(socket_factory), - host_resolver_(host_resolver), - cert_verifier_(cert_verifier), - dnsrr_resolver_(dnsrr_resolver), - dns_cert_checker_(dns_cert_checker), - ssl_host_info_factory_(ssl_host_info_factory), - proxy_service_(proxy_service), - ssl_config_service_(ssl_config_service), - session_(NULL), - spdy_session_pool_(NULL), - http_auth_handler_factory_(http_auth_handler_factory), - network_delegate_(network_delegate), - net_log_(net_log), - suspended_(false) { - DCHECK(proxy_service_); - DCHECK(ssl_config_service_.get()); -} - -HttpNetworkLayer::HttpNetworkLayer( - ClientSocketFactory* socket_factory, - HostResolver* host_resolver, - CertVerifier* cert_verifier, - DnsRRResolver* dnsrr_resolver, - DnsCertProvenanceChecker* dns_cert_checker, - SSLHostInfoFactory* ssl_host_info_factory, - ProxyService* proxy_service, - SSLConfigService* ssl_config_service, - SpdySessionPool* spdy_session_pool, - HttpAuthHandlerFactory* http_auth_handler_factory, - HttpNetworkDelegate* network_delegate, - NetLog* net_log) - : socket_factory_(socket_factory), - host_resolver_(host_resolver), - cert_verifier_(cert_verifier), - dnsrr_resolver_(dnsrr_resolver), - dns_cert_checker_(dns_cert_checker), - ssl_host_info_factory_(ssl_host_info_factory), - proxy_service_(proxy_service), - ssl_config_service_(ssl_config_service), - session_(NULL), - spdy_session_pool_(spdy_session_pool), - http_auth_handler_factory_(http_auth_handler_factory), - network_delegate_(network_delegate), - net_log_(net_log), - suspended_(false) { - DCHECK(proxy_service_); - DCHECK(ssl_config_service_.get()); -} - HttpNetworkLayer::HttpNetworkLayer(HttpNetworkSession* session) - : socket_factory_(ClientSocketFactory::GetDefaultFactory()), - host_resolver_(NULL), - cert_verifier_(NULL), - dnsrr_resolver_(NULL), - dns_cert_checker_(NULL), - ssl_host_info_factory_(NULL), - ssl_config_service_(NULL), - session_(session), - spdy_session_pool_(NULL), - http_auth_handler_factory_(NULL), - network_delegate_(NULL), - net_log_(NULL), + : session_(session), suspended_(false) { DCHECK(session_.get()); } @@ -104,29 +31,6 @@ HttpNetworkLayer::~HttpNetworkLayer() { // static HttpTransactionFactory* HttpNetworkLayer::CreateFactory( - HostResolver* host_resolver, - CertVerifier* cert_verifier, - DnsRRResolver* dnsrr_resolver, - DnsCertProvenanceChecker* dns_cert_checker, - SSLHostInfoFactory* ssl_host_info_factory, - ProxyService* proxy_service, - SSLConfigService* ssl_config_service, - HttpAuthHandlerFactory* http_auth_handler_factory, - HttpNetworkDelegate* network_delegate, - NetLog* net_log) { - DCHECK(proxy_service); - - return new HttpNetworkLayer(ClientSocketFactory::GetDefaultFactory(), - host_resolver, cert_verifier, dnsrr_resolver, - dns_cert_checker, - ssl_host_info_factory, proxy_service, - ssl_config_service, http_auth_handler_factory, - network_delegate, - net_log); -} - -// static -HttpTransactionFactory* HttpNetworkLayer::CreateFactory( HttpNetworkSession* session) { DCHECK(session); @@ -242,35 +146,6 @@ HttpCache* HttpNetworkLayer::GetCache() { } HttpNetworkSession* HttpNetworkLayer::GetSession() { - if (!session_) { - DCHECK(proxy_service_); - if (!spdy_session_pool_.get()) - spdy_session_pool_.reset(new SpdySessionPool(ssl_config_service_)); - session_ = new HttpNetworkSession( - host_resolver_, - cert_verifier_, - dnsrr_resolver_, - dns_cert_checker_, - ssl_host_info_factory_, - proxy_service_, - socket_factory_, - ssl_config_service_, - spdy_session_pool_.release(), - http_auth_handler_factory_, - network_delegate_, - net_log_); - // These were just temps for lazy-initializing HttpNetworkSession. - host_resolver_ = NULL; - cert_verifier_ = NULL; - dnsrr_resolver_ = NULL; - dns_cert_checker_ = NULL; - ssl_host_info_factory_ = NULL; - proxy_service_ = NULL; - socket_factory_ = NULL; - http_auth_handler_factory_ = NULL; - net_log_ = NULL; - network_delegate_ = NULL; - } return session_; } diff --git a/net/http/http_network_layer.h b/net/http/http_network_layer.h index 963ebee..da92761 100644 --- a/net/http/http_network_layer.h +++ b/net/http/http_network_layer.h @@ -32,52 +32,10 @@ class SSLHostInfoFactory; class HttpNetworkLayer : public HttpTransactionFactory, public base::NonThreadSafe { public: - // |socket_factory|, |proxy_service|, |host_resolver|, etc. must remain - // valid for the lifetime of HttpNetworkLayer. - // TODO(wtc): we only need the next constructor. - HttpNetworkLayer(ClientSocketFactory* socket_factory, - HostResolver* host_resolver, - CertVerifier* cert_verifier, - DnsRRResolver* dnsrr_resolver, - DnsCertProvenanceChecker* dns_cert_checker, - SSLHostInfoFactory* ssl_host_info_factory, - ProxyService* proxy_service, - SSLConfigService* ssl_config_service, - HttpAuthHandlerFactory* http_auth_handler_factory, - HttpNetworkDelegate* network_delegate, - NetLog* net_log); - HttpNetworkLayer( - ClientSocketFactory* socket_factory, - HostResolver* host_resolver, - CertVerifier* cert_verifier, - DnsRRResolver* dnsrr_resolver, - DnsCertProvenanceChecker* dns_cert_checker, - SSLHostInfoFactory* ssl_host_info_factory, - ProxyService* proxy_service, - SSLConfigService* ssl_config_service, - SpdySessionPool* spdy_session_pool, - HttpAuthHandlerFactory* http_auth_handler_factory, - HttpNetworkDelegate* network_delegate, - NetLog* net_log); - // Construct a HttpNetworkLayer with an existing HttpNetworkSession which // contains a valid ProxyService. explicit HttpNetworkLayer(HttpNetworkSession* session); - ~HttpNetworkLayer(); - - // This function hides the details of how a network layer gets instantiated - // and allows other implementations to be substituted. - static HttpTransactionFactory* CreateFactory( - HostResolver* host_resolver, - CertVerifier* cert_verifier, - DnsRRResolver* dnsrr_resolver, - DnsCertProvenanceChecker* dns_cert_checker, - SSLHostInfoFactory* ssl_host_info_factory, - ProxyService* proxy_service, - SSLConfigService* ssl_config_service, - HttpAuthHandlerFactory* http_auth_handler_factory, - HttpNetworkDelegate* network_delegate, - NetLog* net_log); + virtual ~HttpNetworkLayer(); // Create a transaction factory that instantiate a network layer over an // existing network session. Network session contains some valuable @@ -104,28 +62,7 @@ class HttpNetworkLayer : public HttpTransactionFactory, virtual void Suspend(bool suspend); private: - // The factory we will use to create network sockets. - ClientSocketFactory* socket_factory_; - - // The host resolver, proxy service, etc. that will be used when lazily - // creating |session_|. - HostResolver* host_resolver_; - CertVerifier* cert_verifier_; - DnsRRResolver* dnsrr_resolver_; - DnsCertProvenanceChecker* dns_cert_checker_; - SSLHostInfoFactory* ssl_host_info_factory_; - scoped_refptr<ProxyService> proxy_service_; - - // The SSL config service being used for the session. - scoped_refptr<SSLConfigService> ssl_config_service_; - - scoped_refptr<HttpNetworkSession> session_; - scoped_ptr<SpdySessionPool> spdy_session_pool_; - - HttpAuthHandlerFactory* http_auth_handler_factory_; - HttpNetworkDelegate* network_delegate_; - NetLog* net_log_; - + const scoped_refptr<HttpNetworkSession> session_; bool suspended_; }; diff --git a/net/http/http_network_layer_unittest.cc b/net/http/http_network_layer_unittest.cc index 2720c10..f76ffbb 100644 --- a/net/http/http_network_layer_unittest.cc +++ b/net/http/http_network_layer_unittest.cc @@ -7,9 +7,11 @@ #include "net/base/net_log.h" #include "net/base/ssl_config_service_defaults.h" #include "net/http/http_network_layer.h" +#include "net/http/http_network_session.h" #include "net/http/http_transaction_unittest.h" #include "net/proxy/proxy_service.h" #include "net/socket/socket_test_util.h" +#include "net/spdy/spdy_session_pool.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" @@ -21,115 +23,127 @@ class HttpNetworkLayerTest : public PlatformTest { }; TEST_F(HttpNetworkLayerTest, CreateAndDestroy) { + MockClientSocketFactory mock_socket_factory; MockHostResolver host_resolver; - net::CertVerifier cert_verifier; - net::HttpNetworkLayer factory( - NULL, - &host_resolver, - &cert_verifier, - NULL /* dnsrr_resolver */, - NULL /* dns_cert_checker */, - NULL /* ssl_host_info_factory */, - net::ProxyService::CreateDirect(), - new net::SSLConfigServiceDefaults, - NULL, - NULL, - NULL); - - scoped_ptr<net::HttpTransaction> trans; + CertVerifier cert_verifier; + scoped_refptr<HttpNetworkSession> network_session( + new HttpNetworkSession( + &host_resolver, + &cert_verifier, + NULL /* dnsrr_resolver */, + NULL /* dns_cert_checker */, + NULL /* ssl_host_info_factory */, + ProxyService::CreateDirect(), + &mock_socket_factory, + new SSLConfigServiceDefaults, + new SpdySessionPool(NULL), + NULL, + NULL, + NULL)); + + HttpNetworkLayer factory(network_session); + + scoped_ptr<HttpTransaction> trans; int rv = factory.CreateTransaction(&trans); - EXPECT_EQ(net::OK, rv); + EXPECT_EQ(OK, rv); EXPECT_TRUE(trans.get() != NULL); } TEST_F(HttpNetworkLayerTest, Suspend) { + MockClientSocketFactory mock_socket_factory; MockHostResolver host_resolver; - net::CertVerifier cert_verifier; - net::HttpNetworkLayer factory( - NULL, - &host_resolver, - &cert_verifier, - NULL /* dnsrr_resolver */, - NULL /* dns_cert_checker */, - NULL /* ssl_host_info_factory */, - net::ProxyService::CreateDirect(), - new net::SSLConfigServiceDefaults, - NULL, - NULL, - NULL); - - scoped_ptr<net::HttpTransaction> trans; + CertVerifier cert_verifier; + scoped_refptr<HttpNetworkSession> network_session( + new HttpNetworkSession( + &host_resolver, + &cert_verifier, + NULL /* dnsrr_resolver */, + NULL /* dns_cert_checker */, + NULL /* ssl_host_info_factory */, + ProxyService::CreateDirect(), + &mock_socket_factory, + new SSLConfigServiceDefaults, + new SpdySessionPool(NULL), + NULL, + NULL, + NULL)); + HttpNetworkLayer factory(network_session); + + scoped_ptr<HttpTransaction> trans; int rv = factory.CreateTransaction(&trans); - EXPECT_EQ(net::OK, rv); + EXPECT_EQ(OK, rv); trans.reset(); factory.Suspend(true); rv = factory.CreateTransaction(&trans); - EXPECT_EQ(net::ERR_NETWORK_IO_SUSPENDED, rv); + EXPECT_EQ(ERR_NETWORK_IO_SUSPENDED, rv); ASSERT_TRUE(trans == NULL); factory.Suspend(false); rv = factory.CreateTransaction(&trans); - EXPECT_EQ(net::OK, rv); + EXPECT_EQ(OK, rv); } TEST_F(HttpNetworkLayerTest, GET) { - net::MockClientSocketFactory mock_socket_factory; - net::MockRead data_reads[] = { - net::MockRead("HTTP/1.0 200 OK\r\n\r\n"), - net::MockRead("hello world"), - net::MockRead(false, net::OK), + MockClientSocketFactory mock_socket_factory; + MockRead data_reads[] = { + MockRead("HTTP/1.0 200 OK\r\n\r\n"), + MockRead("hello world"), + MockRead(false, OK), }; - net::MockWrite data_writes[] = { - net::MockWrite("GET / HTTP/1.1\r\n" + MockWrite data_writes[] = { + MockWrite("GET / HTTP/1.1\r\n" "Host: www.google.com\r\n" "Connection: keep-alive\r\n" "User-Agent: Foo/1.0\r\n\r\n"), }; - net::StaticSocketDataProvider data(data_reads, arraysize(data_reads), + StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); mock_socket_factory.AddSocketDataProvider(&data); MockHostResolver host_resolver; - net::CertVerifier cert_verifier; - net::HttpNetworkLayer factory( - &mock_socket_factory, - &host_resolver, - &cert_verifier, - NULL /* dnsrr_resolver */, - NULL /* dns_cert_checker */, - NULL /* ssl_host_info_factory */, - net::ProxyService::CreateDirect(), - new net::SSLConfigServiceDefaults, - NULL, - NULL, - NULL); + CertVerifier cert_verifier; + scoped_refptr<HttpNetworkSession> network_session( + new HttpNetworkSession( + &host_resolver, + &cert_verifier, + NULL /* dnsrr_resolver */, + NULL /* dns_cert_checker */, + NULL /* ssl_host_info_factory */, + ProxyService::CreateDirect(), + &mock_socket_factory, + new SSLConfigServiceDefaults, + new SpdySessionPool(NULL), + NULL, + NULL, + NULL)); + HttpNetworkLayer factory(network_session); TestCompletionCallback callback; - scoped_ptr<net::HttpTransaction> trans; + scoped_ptr<HttpTransaction> trans; int rv = factory.CreateTransaction(&trans); - EXPECT_EQ(net::OK, rv); + EXPECT_EQ(OK, rv); - net::HttpRequestInfo request_info; + HttpRequestInfo request_info; request_info.url = GURL("http://www.google.com/"); request_info.method = "GET"; - request_info.extra_headers.SetHeader(net::HttpRequestHeaders::kUserAgent, + request_info.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, "Foo/1.0"); - request_info.load_flags = net::LOAD_NORMAL; + request_info.load_flags = LOAD_NORMAL; - rv = trans->Start(&request_info, &callback, net::BoundNetLog()); - if (rv == net::ERR_IO_PENDING) + rv = trans->Start(&request_info, &callback, BoundNetLog()); + if (rv == ERR_IO_PENDING) rv = callback.WaitForResult(); - ASSERT_EQ(net::OK, rv); + ASSERT_EQ(OK, rv); std::string contents; rv = ReadTransaction(trans.get(), &contents); - EXPECT_EQ(net::OK, rv); + EXPECT_EQ(OK, rv); EXPECT_EQ("hello world", contents); } diff --git a/net/proxy/proxy_script_fetcher_impl_unittest.cc b/net/proxy/proxy_script_fetcher_impl_unittest.cc index 4a96071..ae751eb 100644 --- a/net/proxy/proxy_script_fetcher_impl_unittest.cc +++ b/net/proxy/proxy_script_fetcher_impl_unittest.cc @@ -15,14 +15,21 @@ #include "net/base/test_completion_callback.h" #include "net/disk_cache/disk_cache.h" #include "net/http/http_cache.h" +#include "net/http/http_network_session.h" +#include "net/socket/client_socket_factory.h" +#include "net/spdy/spdy_session_pool.h" #include "net/url_request/url_request_test_util.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" +namespace net { + // TODO(eroman): // - Test canceling an outstanding request. // - Test deleting ProxyScriptFetcher while a request is in progress. +namespace { + const FilePath::CharType kDocRoot[] = FILE_PATH_LITERAL("net/data/proxy_script_fetcher_unittest"); @@ -32,23 +39,34 @@ struct FetchResult { }; // A non-mock URL request which can access http:// and file:// urls. -class RequestContext : public net::URLRequestContext { +class RequestContext : public URLRequestContext { public: RequestContext() { - net::ProxyConfig no_proxy; + ProxyConfig no_proxy; host_resolver_ = - net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism, + CreateSystemHostResolver(HostResolver::kDefaultParallelism, NULL, NULL); - cert_verifier_ = new net::CertVerifier; - proxy_service_ = net::ProxyService::CreateFixed(no_proxy); - ssl_config_service_ = new net::SSLConfigServiceDefaults; - - http_transaction_factory_ = new net::HttpCache( - net::HttpNetworkLayer::CreateFactory(host_resolver_, cert_verifier_, - NULL, NULL, NULL, proxy_service_, ssl_config_service_, NULL, NULL, - NULL), - NULL, - net::HttpCache::DefaultBackend::InMemory(0)); + cert_verifier_ = new CertVerifier; + proxy_service_ = ProxyService::CreateFixed(no_proxy); + ssl_config_service_ = new SSLConfigServiceDefaults; + + scoped_refptr<HttpNetworkSession> network_session( + new HttpNetworkSession( + host_resolver_, + cert_verifier_, + NULL /* dnsrr_resolver */, + NULL /* dns_cert_checker */, + NULL /* ssl_host_info_factory */, + proxy_service_, + ClientSocketFactory::GetDefaultFactory(), + ssl_config_service_, + new SpdySessionPool(NULL), + NULL, + NULL, + NULL)); + http_transaction_factory_ = new HttpCache( + network_session, + HttpCache::DefaultBackend::InMemory(0)); } private: @@ -59,9 +77,6 @@ class RequestContext : public net::URLRequestContext { } }; -// Required to be in net namespace by FRIEND_TEST. -namespace net { - // Get a file:// url relative to net/data/proxy/proxy_script_fetcher_unittest. GURL GetTestFileUrl(const std::string& relpath) { FilePath path; @@ -73,6 +88,8 @@ GURL GetTestFileUrl(const std::string& relpath) { return GURL(base_url.spec() + "/" + relpath); } +} // namespace + class ProxyScriptFetcherImplTest : public PlatformTest { public: ProxyScriptFetcherImplTest() diff --git a/net/spdy/spdy_test_util.cc b/net/spdy/spdy_test_util.cc index 07a5980..e7bde0a 100644 --- a/net/spdy/spdy_test_util.cc +++ b/net/spdy/spdy_test_util.cc @@ -9,6 +9,7 @@ #include "base/basictypes.h" #include "base/string_number_conversions.h" #include "base/string_util.h" +#include "net/http/http_network_session.h" #include "net/http/http_network_transaction.h" #include "net/spdy/spdy_framer.h" @@ -924,20 +925,22 @@ SpdyURLRequestContext::SpdyURLRequestContext() { ssl_config_service_ = new SSLConfigServiceDefaults; http_auth_handler_factory_ = HttpAuthHandlerFactory::CreateDefault( host_resolver_); + scoped_refptr<HttpNetworkSession> network_session( + new HttpNetworkSession( + host_resolver_, + cert_verifier_, + NULL /* dnsrr_resolver */, + NULL /* dns_cert_checker */, + NULL /* ssl_host_info_factory */, + proxy_service_, + &socket_factory_, + ssl_config_service_, + new SpdySessionPool(NULL), + http_auth_handler_factory_, + network_delegate_, + NULL /* net_log */)); http_transaction_factory_ = new HttpCache( - new HttpNetworkLayer(&socket_factory_, - host_resolver_, - cert_verifier_, - NULL /* dnsrr_resolver */, - NULL /* dns_cert_checker */, - NULL /* ssl_host_info_factory */, - proxy_service_, - ssl_config_service_, - new SpdySessionPool(NULL), - http_auth_handler_factory_, - network_delegate_, - NULL), - NULL /* net_log */, + network_session, HttpCache::DefaultBackend::InMemory(0)); } diff --git a/net/tools/fetch/fetch_client.cc b/net/tools/fetch/fetch_client.cc index 0d9682f..8ba7534 100644 --- a/net/tools/fetch/fetch_client.cc +++ b/net/tools/fetch/fetch_client.cc @@ -20,10 +20,12 @@ #include "net/http/http_auth_handler_factory.h" #include "net/http/http_cache.h" #include "net/http/http_network_layer.h" +#include "net/http/http_network_session.h" #include "net/http/http_request_info.h" #include "net/http/http_transaction.h" #include "net/proxy/proxy_service.h" #include "net/socket/client_socket_factory.h" +#include "net/spdy/spdy_session_pool.h" void usage(const char* program_name) { printf("usage: %s --url=<url> [--n=<clients>] [--stats] [--use_cache]\n", @@ -149,24 +151,25 @@ int main(int argc, char**argv) { net::HttpTransactionFactory* factory = NULL; scoped_ptr<net::HttpAuthHandlerFactory> http_auth_handler_factory( net::HttpAuthHandlerFactory::CreateDefault(host_resolver.get())); + scoped_refptr<net::HttpNetworkSession> network_session( + new net::HttpNetworkSession( + host_resolver.get(), + cert_verifier.get(), + NULL /* dnsrr_resolver */, + NULL /* dns_cert_checker */, + NULL /* ssl_host_info_factory */, + proxy_service, + net::ClientSocketFactory::GetDefaultFactory(), + ssl_config_service, + new net::SpdySessionPool(NULL), + http_auth_handler_factory.get(), + NULL, + NULL)); if (use_cache) { - factory = new net::HttpCache(host_resolver.get(), cert_verifier.get(), - NULL, NULL, proxy_service, ssl_config_service, - http_auth_handler_factory.get(), NULL, NULL, - net::HttpCache::DefaultBackend::InMemory(0)); + factory = new net::HttpCache(network_session, + net::HttpCache::DefaultBackend::InMemory(0)); } else { - factory = new net::HttpNetworkLayer( - net::ClientSocketFactory::GetDefaultFactory(), - host_resolver.get(), - cert_verifier.get(), - NULL /* dnsrr_resolver */, - NULL /* dns_cert_checker */, - NULL /* ssl_host_info_factory */, - proxy_service, - ssl_config_service, - http_auth_handler_factory.get(), - NULL, - NULL); + factory = new net::HttpNetworkLayer(network_session); } { diff --git a/net/url_request/url_request_test_util.cc b/net/url_request/url_request_test_util.cc index 099810a..5053f35 100644 --- a/net/url_request/url_request_test_util.cc +++ b/net/url_request/url_request_test_util.cc @@ -7,6 +7,9 @@ #include "base/logging.h" #include "base/message_loop.h" #include "base/threading/thread.h" +#include "net/http/http_network_session.h" +#include "net/socket/client_socket_factory.h" +#include "net/spdy/spdy_session_pool.h" TestCookiePolicy::TestCookiePolicy(int options_bit_mask) : ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)), @@ -110,17 +113,19 @@ void TestURLRequestContext::Init() { http_auth_handler_factory_ = net::HttpAuthHandlerFactory::CreateDefault( host_resolver_); http_transaction_factory_ = new net::HttpCache( - net::HttpNetworkLayer::CreateFactory(host_resolver_, - cert_verifier_, - NULL /* dnsrr_resolver */, - NULL /* dns_cert_checker */, - NULL /* ssl_host_info_factory */, - proxy_service_, - ssl_config_service_, - http_auth_handler_factory_, - network_delegate_, - NULL), - NULL /* net_log */, + new net::HttpNetworkSession( + host_resolver_, + cert_verifier_, + NULL /* dnsrr_resolver */, + NULL /* dns_cert_checker */, + NULL /* ssl_host_info_factory */, + proxy_service_, + net::ClientSocketFactory::GetDefaultFactory(), + ssl_config_service_, + new net::SpdySessionPool(ssl_config_service_), + http_auth_handler_factory_, + network_delegate_, + NULL), net::HttpCache::DefaultBackend::InMemory(0)); // In-memory cookie store. cookie_store_ = new net::CookieMonster(NULL, NULL); |