diff options
Diffstat (limited to 'net/socket/client_socket_pool_manager_impl.h')
-rw-r--r-- | net/socket/client_socket_pool_manager_impl.h | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/net/socket/client_socket_pool_manager_impl.h b/net/socket/client_socket_pool_manager_impl.h new file mode 100644 index 0000000..554cfcb --- /dev/null +++ b/net/socket/client_socket_pool_manager_impl.h @@ -0,0 +1,152 @@ +// 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. + +#ifndef NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_IMPL_H_ +#define NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_IMPL_H_ +#pragma once + +#include <map> +#include "base/basictypes.h" +#include "base/compiler_specific.h" +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "base/stl_util.h" +#include "base/template_util.h" +#include "base/threading/non_thread_safe.h" +#include "net/base/cert_database.h" +#include "net/socket/client_socket_pool_histograms.h" +#include "net/socket/client_socket_pool_manager.h" + +namespace net { + +class CertVerifier; +class ClientSocketFactory; +class ClientSocketPoolHistograms; +class DnsCertProvenanceChecker; +class DnsRRResolver; +class HttpProxyClientSocketPool; +class HostResolver; +class NetLog; +class OriginBoundCertService; +class ProxyService; +class SOCKSClientSocketPool; +class SSLClientSocketPool; +class SSLConfigService; +class SSLHostInfoFactory; +class TransportClientSocketPool; + +namespace internal { + +// A helper class for auto-deleting Values in the destructor. +template <typename Key, typename Value> +class OwnedPoolMap : public std::map<Key, Value> { + public: + OwnedPoolMap() { + COMPILE_ASSERT(base::is_pointer<Value>::value, + value_must_be_a_pointer); + } + + ~OwnedPoolMap() { + STLDeleteValues(this); + } +}; + +} // namespace internal + +class ClientSocketPoolManagerImpl : public base::NonThreadSafe, + public ClientSocketPoolManager, + public CertDatabase::Observer { + public: + ClientSocketPoolManagerImpl(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); + virtual ~ClientSocketPoolManagerImpl(); + + virtual void FlushSocketPools() OVERRIDE; + virtual void CloseIdleSockets() OVERRIDE; + + virtual TransportClientSocketPool* GetTransportSocketPool() OVERRIDE; + + virtual SSLClientSocketPool* GetSSLSocketPool() OVERRIDE; + + virtual SOCKSClientSocketPool* GetSocketPoolForSOCKSProxy( + const HostPortPair& socks_proxy) OVERRIDE; + + virtual HttpProxyClientSocketPool* GetSocketPoolForHTTPProxy( + const HostPortPair& http_proxy) OVERRIDE; + + virtual SSLClientSocketPool* GetSocketPoolForSSLWithProxy( + const HostPortPair& proxy_server) OVERRIDE; + + // Creates a Value summary of the state of the socket pools. The caller is + // responsible for deleting the returned value. + virtual base::Value* SocketPoolInfoToValue() const OVERRIDE; + + // CertDatabase::Observer methods: + virtual void OnUserCertAdded(const X509Certificate* cert) OVERRIDE; + virtual void OnCertTrustChanged(const X509Certificate* cert) OVERRIDE; + + private: + typedef internal::OwnedPoolMap<HostPortPair, TransportClientSocketPool*> + TransportSocketPoolMap; + typedef internal::OwnedPoolMap<HostPortPair, SOCKSClientSocketPool*> + SOCKSSocketPoolMap; + typedef internal::OwnedPoolMap<HostPortPair, HttpProxyClientSocketPool*> + HTTPProxySocketPoolMap; + typedef internal::OwnedPoolMap<HostPortPair, SSLClientSocketPool*> + SSLSocketPoolMap; + + NetLog* const net_log_; + ClientSocketFactory* const socket_factory_; + HostResolver* const host_resolver_; + CertVerifier* const cert_verifier_; + OriginBoundCertService* const origin_bound_cert_service_; + DnsRRResolver* const dnsrr_resolver_; + DnsCertProvenanceChecker* const dns_cert_checker_; + SSLHostInfoFactory* const ssl_host_info_factory_; + ProxyService* const proxy_service_; + const scoped_refptr<SSLConfigService> ssl_config_service_; + + // Note: this ordering is important. + + ClientSocketPoolHistograms transport_pool_histograms_; + scoped_ptr<TransportClientSocketPool> transport_socket_pool_; + + ClientSocketPoolHistograms ssl_pool_histograms_; + scoped_ptr<SSLClientSocketPool> ssl_socket_pool_; + + ClientSocketPoolHistograms transport_for_socks_pool_histograms_; + TransportSocketPoolMap transport_socket_pools_for_socks_proxies_; + + ClientSocketPoolHistograms socks_pool_histograms_; + SOCKSSocketPoolMap socks_socket_pools_; + + ClientSocketPoolHistograms transport_for_http_proxy_pool_histograms_; + TransportSocketPoolMap transport_socket_pools_for_http_proxies_; + + ClientSocketPoolHistograms transport_for_https_proxy_pool_histograms_; + TransportSocketPoolMap transport_socket_pools_for_https_proxies_; + + ClientSocketPoolHistograms ssl_for_https_proxy_pool_histograms_; + SSLSocketPoolMap ssl_socket_pools_for_https_proxies_; + + ClientSocketPoolHistograms http_proxy_pool_histograms_; + HTTPProxySocketPoolMap http_proxy_socket_pools_; + + ClientSocketPoolHistograms ssl_socket_pool_for_proxies_histograms_; + SSLSocketPoolMap ssl_socket_pools_for_proxies_; + + DISALLOW_COPY_AND_ASSIGN(ClientSocketPoolManagerImpl); +}; + +} // namespace net + +#endif // NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_IMPL_H_ |