Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Unified Diff: net/socket/client_socket_pool_manager.cc

Issue 8572041: Make ClientSocketPoolManager into an interface. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix some straggler renames. Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/socket/client_socket_pool_manager.h ('k') | net/socket/client_socket_pool_manager_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/socket/client_socket_pool_manager.cc
diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc
index b47c3e5affdd89e6a14416bde88876c57b3f50d8..219747d121e9883351570706b091e49344b382fa 100644
--- a/net/socket/client_socket_pool_manager.cc
+++ b/net/socket/client_socket_pool_manager.cc
@@ -1,10 +1,6 @@
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-//
-// ClientSocketPoolManager manages access to all ClientSocketPools. It's a
-// simple container for all of them. Most importantly, it handles the lifetime
-// and destruction order properly.
#include "net/socket/client_socket_pool_manager.h"
@@ -12,15 +8,12 @@
#include "base/logging.h"
#include "base/stringprintf.h"
-#include "base/values.h"
-#include "net/base/ssl_config_service.h"
+#include "net/base/load_flags.h"
#include "net/http/http_network_session.h"
#include "net/http/http_proxy_client_socket_pool.h"
#include "net/http/http_request_info.h"
-#include "net/proxy/proxy_service.h"
-#include "net/socket/client_socket_factory.h"
+#include "net/proxy/proxy_info.h"
#include "net/socket/client_socket_handle.h"
-#include "net/socket/client_socket_pool_histograms.h"
#include "net/socket/socks_client_socket_pool.h"
#include "net/socket/ssl_client_socket_pool.h"
#include "net/socket/transport_client_socket_pool.h"
@@ -42,20 +35,6 @@ int g_max_sockets_per_group = 6;
// http://crbug.com/44501 for details about proxy server connection limits.
int g_max_sockets_per_proxy_server = kDefaultMaxSocketsPerProxyServer;
-// Appends information about all |socket_pools| to the end of |list|.
-template <class MapType>
-static void AddSocketPoolsToList(ListValue* list,
- const MapType& socket_pools,
- const std::string& type,
- bool include_nested_pools) {
- for (typename MapType::const_iterator it = socket_pools.begin();
- it != socket_pools.end(); it++) {
- list->Append(it->second->GetInfoAsValue(it->first.ToString(),
- type,
- include_nested_pools));
- }
-}
-
// The meat of the implementation for the InitSocketHandleForHttpRequest,
// InitSocketHandleForRawConnect and PreconnectSocketsForHttpRequest methods.
int InitSocketPoolHelper(const GURL& request_url,
@@ -182,7 +161,7 @@ int InitSocketPoolHelper(const GURL& request_url,
want_spdy_over_npn);
SSLClientSocketPool* ssl_pool = NULL;
if (proxy_info.is_direct())
- ssl_pool = session->ssl_socket_pool();
+ ssl_pool = session->GetSSLSocketPool();
else
ssl_pool = session->GetSocketPoolForSSLWithProxy(*proxy_host_port);
@@ -228,7 +207,7 @@ int InitSocketPoolHelper(const GURL& request_url,
DCHECK(proxy_info.is_direct());
- TransportClientSocketPool* pool = session->transport_socket_pool();
+ TransportClientSocketPool* pool = session->GetTransportSocketPool();
if (num_preconnect_streams) {
RequestSocketsForPool(pool, connection_group, tcp_params,
num_preconnect_streams, net_log);
@@ -242,299 +221,12 @@ int InitSocketPoolHelper(const GURL& request_url,
} // namespace
-ClientSocketPoolManager::ClientSocketPoolManager(
- NetLog* net_log,
- ClientSocketFactory* socket_factory,
- HostResolver* host_resolver,
- CertVerifier* cert_verifier,
- OriginBoundCertService* origin_bound_cert_service,
- DnsRRResolver* dnsrr_resolver,
- DnsCertProvenanceChecker* dns_cert_checker,
- SSLHostInfoFactory* ssl_host_info_factory,
- ProxyService* proxy_service,
- SSLConfigService* ssl_config_service)
- : net_log_(net_log),
- socket_factory_(socket_factory),
- host_resolver_(host_resolver),
- cert_verifier_(cert_verifier),
- origin_bound_cert_service_(origin_bound_cert_service),
- 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),
- transport_pool_histograms_("TCP"),
- transport_socket_pool_(new TransportClientSocketPool(
- g_max_sockets_per_pool, g_max_sockets_per_group,
- &transport_pool_histograms_,
- host_resolver,
- socket_factory_,
- net_log)),
- ssl_pool_histograms_("SSL2"),
- ssl_socket_pool_(new SSLClientSocketPool(
- g_max_sockets_per_pool, g_max_sockets_per_group,
- &ssl_pool_histograms_,
- host_resolver,
- cert_verifier,
- origin_bound_cert_service,
- dnsrr_resolver,
- dns_cert_checker,
- ssl_host_info_factory,
- socket_factory,
- transport_socket_pool_.get(),
- NULL /* no socks proxy */,
- NULL /* no http proxy */,
- ssl_config_service,
- net_log)),
- transport_for_socks_pool_histograms_("TCPforSOCKS"),
- socks_pool_histograms_("SOCK"),
- transport_for_http_proxy_pool_histograms_("TCPforHTTPProxy"),
- transport_for_https_proxy_pool_histograms_("TCPforHTTPSProxy"),
- ssl_for_https_proxy_pool_histograms_("SSLforHTTPSProxy"),
- http_proxy_pool_histograms_("HTTPProxy"),
- ssl_socket_pool_for_proxies_histograms_("SSLForProxies") {
- CertDatabase::AddObserver(this);
-}
-
-ClientSocketPoolManager::~ClientSocketPoolManager() {
- CertDatabase::RemoveObserver(this);
-}
-
-void ClientSocketPoolManager::FlushSocketPools() {
- // Flush the highest level pools first, since higher level pools may release
- // stuff to the lower level pools.
-
- for (SSLSocketPoolMap::const_iterator it =
- ssl_socket_pools_for_proxies_.begin();
- it != ssl_socket_pools_for_proxies_.end();
- ++it)
- it->second->Flush();
-
- for (HTTPProxySocketPoolMap::const_iterator it =
- http_proxy_socket_pools_.begin();
- it != http_proxy_socket_pools_.end();
- ++it)
- it->second->Flush();
-
- for (SSLSocketPoolMap::const_iterator it =
- ssl_socket_pools_for_https_proxies_.begin();
- it != ssl_socket_pools_for_https_proxies_.end();
- ++it)
- it->second->Flush();
-
- for (TransportSocketPoolMap::const_iterator it =
- transport_socket_pools_for_https_proxies_.begin();
- it != transport_socket_pools_for_https_proxies_.end();
- ++it)
- it->second->Flush();
-
- for (TransportSocketPoolMap::const_iterator it =
- transport_socket_pools_for_http_proxies_.begin();
- it != transport_socket_pools_for_http_proxies_.end();
- ++it)
- it->second->Flush();
-
- for (SOCKSSocketPoolMap::const_iterator it =
- socks_socket_pools_.begin();
- it != socks_socket_pools_.end();
- ++it)
- it->second->Flush();
-
- for (TransportSocketPoolMap::const_iterator it =
- transport_socket_pools_for_socks_proxies_.begin();
- it != transport_socket_pools_for_socks_proxies_.end();
- ++it)
- it->second->Flush();
-
- ssl_socket_pool_->Flush();
- transport_socket_pool_->Flush();
-}
-
-void ClientSocketPoolManager::CloseIdleSockets() {
- // Close sockets in the highest level pools first, since higher level pools'
- // sockets may release stuff to the lower level pools.
- for (SSLSocketPoolMap::const_iterator it =
- ssl_socket_pools_for_proxies_.begin();
- it != ssl_socket_pools_for_proxies_.end();
- ++it)
- it->second->CloseIdleSockets();
-
- for (HTTPProxySocketPoolMap::const_iterator it =
- http_proxy_socket_pools_.begin();
- it != http_proxy_socket_pools_.end();
- ++it)
- it->second->CloseIdleSockets();
-
- for (SSLSocketPoolMap::const_iterator it =
- ssl_socket_pools_for_https_proxies_.begin();
- it != ssl_socket_pools_for_https_proxies_.end();
- ++it)
- it->second->CloseIdleSockets();
-
- for (TransportSocketPoolMap::const_iterator it =
- transport_socket_pools_for_https_proxies_.begin();
- it != transport_socket_pools_for_https_proxies_.end();
- ++it)
- it->second->CloseIdleSockets();
-
- for (TransportSocketPoolMap::const_iterator it =
- transport_socket_pools_for_http_proxies_.begin();
- it != transport_socket_pools_for_http_proxies_.end();
- ++it)
- it->second->CloseIdleSockets();
-
- for (SOCKSSocketPoolMap::const_iterator it =
- socks_socket_pools_.begin();
- it != socks_socket_pools_.end();
- ++it)
- it->second->CloseIdleSockets();
-
- for (TransportSocketPoolMap::const_iterator it =
- transport_socket_pools_for_socks_proxies_.begin();
- it != transport_socket_pools_for_socks_proxies_.end();
- ++it)
- it->second->CloseIdleSockets();
-
- ssl_socket_pool_->CloseIdleSockets();
- transport_socket_pool_->CloseIdleSockets();
-}
-
-SOCKSClientSocketPool* ClientSocketPoolManager::GetSocketPoolForSOCKSProxy(
- const HostPortPair& socks_proxy) {
- SOCKSSocketPoolMap::const_iterator it = socks_socket_pools_.find(socks_proxy);
- if (it != socks_socket_pools_.end()) {
- DCHECK(ContainsKey(transport_socket_pools_for_socks_proxies_, socks_proxy));
- return it->second;
- }
-
- DCHECK(!ContainsKey(transport_socket_pools_for_socks_proxies_, socks_proxy));
-
- std::pair<TransportSocketPoolMap::iterator, bool> tcp_ret =
- transport_socket_pools_for_socks_proxies_.insert(
- std::make_pair(
- socks_proxy,
- new TransportClientSocketPool(
- g_max_sockets_per_proxy_server, g_max_sockets_per_group,
- &transport_for_socks_pool_histograms_,
- host_resolver_,
- socket_factory_,
- net_log_)));
- DCHECK(tcp_ret.second);
-
- std::pair<SOCKSSocketPoolMap::iterator, bool> ret =
- socks_socket_pools_.insert(
- std::make_pair(socks_proxy, new SOCKSClientSocketPool(
- g_max_sockets_per_proxy_server, g_max_sockets_per_group,
- &socks_pool_histograms_,
- host_resolver_,
- tcp_ret.first->second,
- net_log_)));
-
- return ret.first->second;
-}
-
-HttpProxyClientSocketPool* ClientSocketPoolManager::GetSocketPoolForHTTPProxy(
- const HostPortPair& http_proxy) {
- HTTPProxySocketPoolMap::const_iterator it =
- http_proxy_socket_pools_.find(http_proxy);
- if (it != http_proxy_socket_pools_.end()) {
- DCHECK(ContainsKey(transport_socket_pools_for_http_proxies_, http_proxy));
- DCHECK(ContainsKey(transport_socket_pools_for_https_proxies_, http_proxy));
- DCHECK(ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy));
- return it->second;
- }
-
- DCHECK(!ContainsKey(transport_socket_pools_for_http_proxies_, http_proxy));
- DCHECK(!ContainsKey(transport_socket_pools_for_https_proxies_, http_proxy));
- DCHECK(!ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy));
-
- std::pair<TransportSocketPoolMap::iterator, bool> tcp_http_ret =
- transport_socket_pools_for_http_proxies_.insert(
- std::make_pair(
- http_proxy,
- new TransportClientSocketPool(
- g_max_sockets_per_proxy_server, g_max_sockets_per_group,
- &transport_for_http_proxy_pool_histograms_,
- host_resolver_,
- socket_factory_,
- net_log_)));
- DCHECK(tcp_http_ret.second);
-
- std::pair<TransportSocketPoolMap::iterator, bool> tcp_https_ret =
- transport_socket_pools_for_https_proxies_.insert(
- std::make_pair(
- http_proxy,
- new TransportClientSocketPool(
- g_max_sockets_per_proxy_server, g_max_sockets_per_group,
- &transport_for_https_proxy_pool_histograms_,
- host_resolver_,
- socket_factory_,
- net_log_)));
- DCHECK(tcp_https_ret.second);
-
- std::pair<SSLSocketPoolMap::iterator, bool> ssl_https_ret =
- ssl_socket_pools_for_https_proxies_.insert(
- std::make_pair(
- http_proxy,
- new SSLClientSocketPool(
- g_max_sockets_per_proxy_server, g_max_sockets_per_group,
- &ssl_for_https_proxy_pool_histograms_,
- host_resolver_,
- cert_verifier_,
- origin_bound_cert_service_,
- dnsrr_resolver_,
- dns_cert_checker_,
- ssl_host_info_factory_,
- socket_factory_,
- tcp_https_ret.first->second /* https proxy */,
- NULL /* no socks proxy */,
- NULL /* no http proxy */,
- ssl_config_service_, net_log_)));
- DCHECK(tcp_https_ret.second);
-
- std::pair<HTTPProxySocketPoolMap::iterator, bool> ret =
- http_proxy_socket_pools_.insert(
- std::make_pair(
- http_proxy,
- new HttpProxyClientSocketPool(
- g_max_sockets_per_proxy_server, g_max_sockets_per_group,
- &http_proxy_pool_histograms_,
- host_resolver_,
- tcp_http_ret.first->second,
- ssl_https_ret.first->second,
- net_log_)));
-
- return ret.first->second;
-}
+ClientSocketPoolManager::ClientSocketPoolManager() {}
+ClientSocketPoolManager::~ClientSocketPoolManager() {}
-SSLClientSocketPool* ClientSocketPoolManager::GetSocketPoolForSSLWithProxy(
- const HostPortPair& proxy_server) {
- SSLSocketPoolMap::const_iterator it =
- ssl_socket_pools_for_proxies_.find(proxy_server);
- if (it != ssl_socket_pools_for_proxies_.end())
- return it->second;
-
- SSLClientSocketPool* new_pool = new SSLClientSocketPool(
- g_max_sockets_per_proxy_server, g_max_sockets_per_group,
- &ssl_pool_histograms_,
- host_resolver_,
- cert_verifier_,
- origin_bound_cert_service_,
- dnsrr_resolver_,
- dns_cert_checker_,
- ssl_host_info_factory_,
- socket_factory_,
- NULL, /* no tcp pool, we always go through a proxy */
- GetSocketPoolForSOCKSProxy(proxy_server),
- GetSocketPoolForHTTPProxy(proxy_server),
- ssl_config_service_,
- net_log_);
-
- std::pair<SSLSocketPoolMap::iterator, bool> ret =
- ssl_socket_pools_for_proxies_.insert(std::make_pair(proxy_server,
- new_pool));
-
- return ret.first->second;
+// static
+int ClientSocketPoolManager::max_sockets_per_pool() {
+ return g_max_sockets_per_pool;
}
// static
@@ -562,6 +254,11 @@ void ClientSocketPoolManager::set_max_sockets_per_group(int socket_count) {
}
// static
+int ClientSocketPoolManager::max_sockets_per_proxy_server() {
+ return g_max_sockets_per_proxy_server;
+}
+
+// static
void ClientSocketPoolManager::set_max_sockets_per_proxy_server(
int socket_count) {
DCHECK_LT(0, socket_count);
@@ -572,55 +269,7 @@ void ClientSocketPoolManager::set_max_sockets_per_proxy_server(
g_max_sockets_per_proxy_server = socket_count;
}
-Value* ClientSocketPoolManager::SocketPoolInfoToValue() const {
- ListValue* list = new ListValue();
- list->Append(transport_socket_pool_->GetInfoAsValue("transport_socket_pool",
- "transport_socket_pool",
- false));
- // Third parameter is false because |ssl_socket_pool_| uses
- // |transport_socket_pool_| internally, and do not want to add it a second
- // time.
- list->Append(ssl_socket_pool_->GetInfoAsValue("ssl_socket_pool",
- "ssl_socket_pool",
- false));
- AddSocketPoolsToList(list,
- http_proxy_socket_pools_,
- "http_proxy_socket_pool",
- true);
- AddSocketPoolsToList(list,
- socks_socket_pools_,
- "socks_socket_pool",
- true);
-
- // Third parameter is false because |ssl_socket_pools_for_proxies_| use
- // socket pools in |http_proxy_socket_pools_| and |socks_socket_pools_|.
- AddSocketPoolsToList(list,
- ssl_socket_pools_for_proxies_,
- "ssl_socket_pool_for_proxies",
- false);
- return list;
-}
-
-void ClientSocketPoolManager::OnUserCertAdded(const X509Certificate* cert) {
- FlushSocketPools();
-}
-
-void ClientSocketPoolManager::OnCertTrustChanged(const X509Certificate* cert) {
- // We should flush the socket pools if we removed trust from a
- // cert, because a previously trusted server may have become
- // untrusted.
- //
- // We should not flush the socket pools if we added trust to a
- // cert.
- //
- // Since the OnCertTrustChanged method doesn't tell us what
- // kind of trust change it is, we have to flush the socket
- // pools to be safe.
- FlushSocketPools();
-}
-
-// static
-int ClientSocketPoolManager::InitSocketHandleForHttpRequest(
+int InitSocketHandleForHttpRequest(
const GURL& request_url,
const HttpRequestHeaders& request_extra_headers,
int request_load_flags,
@@ -652,8 +301,7 @@ int ClientSocketPoolManager::InitSocketHandleForHttpRequest(
callback);
}
-// static
-int ClientSocketPoolManager::InitSocketHandleForRawConnect(
+int InitSocketHandleForRawConnect(
const HostPortPair& host_port_pair,
HttpNetworkSession* session,
const ProxyInfo& proxy_info,
@@ -686,8 +334,7 @@ int ClientSocketPoolManager::InitSocketHandleForRawConnect(
callback);
}
-// static
-int ClientSocketPoolManager::PreconnectSocketsForHttpRequest(
+int PreconnectSocketsForHttpRequest(
const GURL& request_url,
const HttpRequestHeaders& request_extra_headers,
int request_load_flags,
@@ -717,5 +364,4 @@ int ClientSocketPoolManager::PreconnectSocketsForHttpRequest(
NULL);
}
-
} // namespace net
« no previous file with comments | « net/socket/client_socket_pool_manager.h ('k') | net/socket/client_socket_pool_manager_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698