OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_IMPL_H_ | |
6 #define NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_IMPL_H_ | |
7 | |
8 #include <map> | |
9 #include "base/basictypes.h" | |
10 #include "base/compiler_specific.h" | |
11 #include "base/memory/ref_counted.h" | |
12 #include "base/memory/scoped_ptr.h" | |
13 #include "base/stl_util.h" | |
14 #include "base/template_util.h" | |
15 #include "base/threading/non_thread_safe.h" | |
16 #include "net/cert/cert_database.h" | |
17 #include "net/http/http_network_session.h" | |
18 #include "net/socket/client_socket_pool_histograms.h" | |
19 #include "net/socket/client_socket_pool_manager.h" | |
20 | |
21 namespace net { | |
22 | |
23 class CertVerifier; | |
24 class ChannelIDService; | |
25 class ClientSocketFactory; | |
26 class ClientSocketPoolHistograms; | |
27 class CTVerifier; | |
28 class HttpProxyClientSocketPool; | |
29 class HostResolver; | |
30 class NetLog; | |
31 class SOCKSClientSocketPool; | |
32 class SSLClientSocketPool; | |
33 class SSLConfigService; | |
34 class TransportClientSocketPool; | |
35 class TransportSecurityState; | |
36 | |
37 namespace internal { | |
38 | |
39 // A helper class for auto-deleting Values in the destructor. | |
40 template <typename Key, typename Value> | |
41 class OwnedPoolMap : public std::map<Key, Value> { | |
42 public: | |
43 OwnedPoolMap() { | |
44 static_assert(base::is_pointer<Value>::value, "value must be a pointer"); | |
45 } | |
46 | |
47 ~OwnedPoolMap() { | |
48 STLDeleteValues(this); | |
49 } | |
50 }; | |
51 | |
52 } // namespace internal | |
53 | |
54 class ClientSocketPoolManagerImpl : public base::NonThreadSafe, | |
55 public ClientSocketPoolManager, | |
56 public CertDatabase::Observer { | |
57 public: | |
58 ClientSocketPoolManagerImpl(NetLog* net_log, | |
59 ClientSocketFactory* socket_factory, | |
60 HostResolver* host_resolver, | |
61 CertVerifier* cert_verifier, | |
62 ChannelIDService* channel_id_service, | |
63 TransportSecurityState* transport_security_state, | |
64 CTVerifier* cert_transparency_verifier, | |
65 CertPolicyEnforcer* cert_policy_enforcer, | |
66 const std::string& ssl_session_cache_shard, | |
67 SSLConfigService* ssl_config_service, | |
68 bool enable_ssl_connect_job_waiting, | |
69 HttpNetworkSession::SocketPoolType pool_type); | |
70 ~ClientSocketPoolManagerImpl() override; | |
71 | |
72 void FlushSocketPoolsWithError(int error) override; | |
73 void CloseIdleSockets() override; | |
74 | |
75 TransportClientSocketPool* GetTransportSocketPool() override; | |
76 | |
77 SSLClientSocketPool* GetSSLSocketPool() override; | |
78 | |
79 SOCKSClientSocketPool* GetSocketPoolForSOCKSProxy( | |
80 const HostPortPair& socks_proxy) override; | |
81 | |
82 HttpProxyClientSocketPool* GetSocketPoolForHTTPProxy( | |
83 const HostPortPair& http_proxy) override; | |
84 | |
85 SSLClientSocketPool* GetSocketPoolForSSLWithProxy( | |
86 const HostPortPair& proxy_server) override; | |
87 | |
88 // Creates a Value summary of the state of the socket pools. The caller is | |
89 // responsible for deleting the returned value. | |
90 base::Value* SocketPoolInfoToValue() const override; | |
91 | |
92 // CertDatabase::Observer methods: | |
93 void OnCertAdded(const X509Certificate* cert) override; | |
94 void OnCACertChanged(const X509Certificate* cert) override; | |
95 | |
96 private: | |
97 typedef internal::OwnedPoolMap<HostPortPair, TransportClientSocketPool*> | |
98 TransportSocketPoolMap; | |
99 typedef internal::OwnedPoolMap<HostPortPair, SOCKSClientSocketPool*> | |
100 SOCKSSocketPoolMap; | |
101 typedef internal::OwnedPoolMap<HostPortPair, HttpProxyClientSocketPool*> | |
102 HTTPProxySocketPoolMap; | |
103 typedef internal::OwnedPoolMap<HostPortPair, SSLClientSocketPool*> | |
104 SSLSocketPoolMap; | |
105 | |
106 NetLog* const net_log_; | |
107 ClientSocketFactory* const socket_factory_; | |
108 HostResolver* const host_resolver_; | |
109 CertVerifier* const cert_verifier_; | |
110 ChannelIDService* const channel_id_service_; | |
111 TransportSecurityState* const transport_security_state_; | |
112 CTVerifier* const cert_transparency_verifier_; | |
113 CertPolicyEnforcer* const cert_policy_enforcer_; | |
114 const std::string ssl_session_cache_shard_; | |
115 const scoped_refptr<SSLConfigService> ssl_config_service_; | |
116 bool enable_ssl_connect_job_waiting_; | |
117 const HttpNetworkSession::SocketPoolType pool_type_; | |
118 | |
119 // Note: this ordering is important. | |
120 | |
121 ClientSocketPoolHistograms transport_pool_histograms_; | |
122 scoped_ptr<TransportClientSocketPool> transport_socket_pool_; | |
123 | |
124 ClientSocketPoolHistograms ssl_pool_histograms_; | |
125 scoped_ptr<SSLClientSocketPool> ssl_socket_pool_; | |
126 | |
127 ClientSocketPoolHistograms transport_for_socks_pool_histograms_; | |
128 TransportSocketPoolMap transport_socket_pools_for_socks_proxies_; | |
129 | |
130 ClientSocketPoolHistograms socks_pool_histograms_; | |
131 SOCKSSocketPoolMap socks_socket_pools_; | |
132 | |
133 ClientSocketPoolHistograms transport_for_http_proxy_pool_histograms_; | |
134 TransportSocketPoolMap transport_socket_pools_for_http_proxies_; | |
135 | |
136 ClientSocketPoolHistograms transport_for_https_proxy_pool_histograms_; | |
137 TransportSocketPoolMap transport_socket_pools_for_https_proxies_; | |
138 | |
139 ClientSocketPoolHistograms ssl_for_https_proxy_pool_histograms_; | |
140 SSLSocketPoolMap ssl_socket_pools_for_https_proxies_; | |
141 | |
142 ClientSocketPoolHistograms http_proxy_pool_histograms_; | |
143 HTTPProxySocketPoolMap http_proxy_socket_pools_; | |
144 | |
145 ClientSocketPoolHistograms ssl_socket_pool_for_proxies_histograms_; | |
146 SSLSocketPoolMap ssl_socket_pools_for_proxies_; | |
147 | |
148 DISALLOW_COPY_AND_ASSIGN(ClientSocketPoolManagerImpl); | |
149 }; | |
150 | |
151 } // namespace net | |
152 | |
153 #endif // NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_IMPL_H_ | |
OLD | NEW |