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

Side by Side Diff: net/socket/client_socket_pool_manager.h

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 unified diff | Download patch
« no previous file with comments | « net/net.gyp ('k') | net/socket/client_socket_pool_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // ClientSocketPoolManager manages access to all ClientSocketPools. It's a 5 // ClientSocketPoolManager manages access to all ClientSocketPools. It's a
6 // simple container for all of them. Most importantly, it handles the lifetime 6 // simple container for all of them. Most importantly, it handles the lifetime
7 // and destruction order properly. 7 // and destruction order properly.
8 8
9 #ifndef NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_H_ 9 #ifndef NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_H_
10 #define NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_H_ 10 #define NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_H_
11 #pragma once 11 #pragma once
12 12
13 #include <map>
14 #include "base/basictypes.h"
15 #include "base/memory/ref_counted.h"
16 #include "base/memory/scoped_ptr.h"
17 #include "base/stl_util.h"
18 #include "base/template_util.h"
19 #include "base/threading/non_thread_safe.h"
20 #include "net/base/cert_database.h"
21 #include "net/base/completion_callback.h" 13 #include "net/base/completion_callback.h"
22 #include "net/base/net_export.h" 14 #include "net/base/net_export.h"
23 #include "net/base/request_priority.h" 15 #include "net/base/request_priority.h"
24 #include "net/socket/client_socket_pool_histograms.h"
25 16
26 class GURL; 17 class GURL;
27 18
28 namespace base { 19 namespace base {
29 class Value; 20 class Value;
30 } 21 }
31 22
32 namespace net { 23 namespace net {
33 24
34 class BoundNetLog; 25 class BoundNetLog;
35 class CertVerifier;
36 class ClientSocketFactory;
37 class ClientSocketHandle; 26 class ClientSocketHandle;
38 class ClientSocketPoolHistograms; 27 class HostPortPair;
39 class DnsCertProvenanceChecker;
40 class DnsRRResolver;
41 class HttpNetworkSession; 28 class HttpNetworkSession;
29 class HttpProxyClientSocketPool;
42 class HttpRequestHeaders; 30 class HttpRequestHeaders;
43 class HostPortPair;
44 class HttpProxyClientSocketPool;
45 class HostResolver;
46 class NetLog;
47 class OriginBoundCertService;
48 class ProxyInfo; 31 class ProxyInfo;
49 class ProxyService; 32 class TransportClientSocketPool;
50 class SOCKSClientSocketPool; 33 class SOCKSClientSocketPool;
51 class SSLClientSocketPool; 34 class SSLClientSocketPool;
52 class SSLConfigService;
53 class SSLHostInfoFactory;
54 class TransportClientSocketPool;
55 35
56 struct SSLConfig; 36 struct SSLConfig;
57 37
58 // This should rather be a simple constant but Windows shared libs doesn't 38 // This should rather be a simple constant but Windows shared libs doesn't
59 // really offer much flexiblity in exporting contants. 39 // really offer much flexiblity in exporting contants.
60 enum DefaultMaxValues { kDefaultMaxSocketsPerProxyServer = 32 }; 40 enum DefaultMaxValues { kDefaultMaxSocketsPerProxyServer = 32 };
61 41
62 namespace internal { 42 class NET_EXPORT_PRIVATE ClientSocketPoolManager {
63
64 // A helper class for auto-deleting Values in the destructor.
65 template <typename Key, typename Value>
66 class OwnedPoolMap : public std::map<Key, Value> {
67 public: 43 public:
68 OwnedPoolMap() { 44 ClientSocketPoolManager();
69 COMPILE_ASSERT(base::is_pointer<Value>::value,
70 value_must_be_a_pointer);
71 }
72
73 ~OwnedPoolMap() {
74 STLDeleteValues(this);
75 }
76 };
77
78 } // namespace internal
79
80 class ClientSocketPoolManager : public base::NonThreadSafe,
81 public CertDatabase::Observer {
82 public:
83 ClientSocketPoolManager(NetLog* net_log,
84 ClientSocketFactory* socket_factory,
85 HostResolver* host_resolver,
86 CertVerifier* cert_verifier,
87 OriginBoundCertService* origin_bound_cert_service,
88 DnsRRResolver* dnsrr_resolver,
89 DnsCertProvenanceChecker* dns_cert_checker,
90 SSLHostInfoFactory* ssl_host_info_factory,
91 ProxyService* proxy_service,
92 SSLConfigService* ssl_config_service);
93 virtual ~ClientSocketPoolManager(); 45 virtual ~ClientSocketPoolManager();
94 46
95 void FlushSocketPools();
96 void CloseIdleSockets();
97
98 TransportClientSocketPool* transport_socket_pool() {
99 return transport_socket_pool_.get();
100 }
101
102 SSLClientSocketPool* ssl_socket_pool() { return ssl_socket_pool_.get(); }
103
104 SOCKSClientSocketPool* GetSocketPoolForSOCKSProxy(
105 const HostPortPair& socks_proxy);
106
107 HttpProxyClientSocketPool* GetSocketPoolForHTTPProxy(
108 const HostPortPair& http_proxy);
109
110 SSLClientSocketPool* GetSocketPoolForSSLWithProxy(
111 const HostPortPair& proxy_server);
112
113 // The setter methods below affect only newly created socket pools after the 47 // The setter methods below affect only newly created socket pools after the
114 // methods are called. Normally they should be called at program startup 48 // methods are called. Normally they should be called at program startup
115 // before any ClientSocketPoolManager is created. 49 // before any ClientSocketPoolManagerImpl is created.
116 NET_EXPORT static void set_max_sockets_per_pool(int socket_count); 50 static int max_sockets_per_pool();
117 NET_EXPORT static int max_sockets_per_group(); 51 static void set_max_sockets_per_pool(int socket_count);
118 NET_EXPORT static void set_max_sockets_per_group(int socket_count);
119 NET_EXPORT static void set_max_sockets_per_proxy_server(int socket_count);
120 52
121 // A helper method that uses the passed in proxy information to initialize a 53 static int max_sockets_per_group();
122 // ClientSocketHandle with the relevant socket pool. Use this method for 54 static void set_max_sockets_per_group(int socket_count);
123 // HTTP/HTTPS requests. |ssl_config_for_origin| is only used if the request
124 // uses SSL and |ssl_config_for_proxy| is used if the proxy server is HTTPS.
125 static int InitSocketHandleForHttpRequest(
126 const GURL& request_url,
127 const HttpRequestHeaders& request_extra_headers,
128 int request_load_flags,
129 RequestPriority request_priority,
130 HttpNetworkSession* session,
131 const ProxyInfo& proxy_info,
132 bool force_spdy_over_ssl,
133 bool want_spdy_over_npn,
134 const SSLConfig& ssl_config_for_origin,
135 const SSLConfig& ssl_config_for_proxy,
136 const BoundNetLog& net_log,
137 ClientSocketHandle* socket_handle,
138 OldCompletionCallback* callback);
139 55
140 // A helper method that uses the passed in proxy information to initialize a 56 static int max_sockets_per_proxy_server();
141 // ClientSocketHandle with the relevant socket pool. Use this method for 57 static void set_max_sockets_per_proxy_server(int socket_count);
142 // a raw socket connection to a host-port pair (that needs to tunnel through
143 // the proxies).
144 NET_EXPORT static int InitSocketHandleForRawConnect(
145 const HostPortPair& host_port_pair,
146 HttpNetworkSession* session,
147 const ProxyInfo& proxy_info,
148 const SSLConfig& ssl_config_for_origin,
149 const SSLConfig& ssl_config_for_proxy,
150 const BoundNetLog& net_log,
151 ClientSocketHandle* socket_handle,
152 OldCompletionCallback* callback);
153 58
154 // Similar to InitSocketHandleForHttpRequest except that it initiates the 59 virtual void FlushSocketPools() = 0;
155 // desired number of preconnect streams from the relevant socket pool. 60 virtual void CloseIdleSockets() = 0;
156 static int PreconnectSocketsForHttpRequest( 61 virtual TransportClientSocketPool* GetTransportSocketPool() = 0;
157 const GURL& request_url, 62 virtual SSLClientSocketPool* GetSSLSocketPool() = 0;
158 const HttpRequestHeaders& request_extra_headers, 63 virtual SOCKSClientSocketPool* GetSocketPoolForSOCKSProxy(
159 int request_load_flags, 64 const HostPortPair& socks_proxy) = 0;
160 RequestPriority request_priority, 65 virtual HttpProxyClientSocketPool* GetSocketPoolForHTTPProxy(
161 HttpNetworkSession* session, 66 const HostPortPair& http_proxy) = 0;
162 const ProxyInfo& proxy_info, 67 virtual SSLClientSocketPool* GetSocketPoolForSSLWithProxy(
163 bool force_spdy_over_ssl, 68 const HostPortPair& proxy_server) = 0;
164 bool want_spdy_over_npn,
165 const SSLConfig& ssl_config_for_origin,
166 const SSLConfig& ssl_config_for_proxy,
167 const BoundNetLog& net_log,
168 int num_preconnect_streams);
169
170 // Creates a Value summary of the state of the socket pools. The caller is 69 // Creates a Value summary of the state of the socket pools. The caller is
171 // responsible for deleting the returned value. 70 // responsible for deleting the returned value.
172 base::Value* SocketPoolInfoToValue() const; 71 virtual base::Value* SocketPoolInfoToValue() const = 0;
72 };
173 73
174 // CertDatabase::Observer methods: 74 // A helper method that uses the passed in proxy information to initialize a
175 virtual void OnUserCertAdded(const X509Certificate* cert) OVERRIDE; 75 // ClientSocketHandle with the relevant socket pool. Use this method for
176 virtual void OnCertTrustChanged(const X509Certificate* cert) OVERRIDE; 76 // HTTP/HTTPS requests. |ssl_config_for_origin| is only used if the request
77 // uses SSL and |ssl_config_for_proxy| is used if the proxy server is HTTPS.
78 int InitSocketHandleForHttpRequest(
79 const GURL& request_url,
80 const HttpRequestHeaders& request_extra_headers,
81 int request_load_flags,
82 RequestPriority request_priority,
83 HttpNetworkSession* session,
84 const ProxyInfo& proxy_info,
85 bool force_spdy_over_ssl,
86 bool want_spdy_over_npn,
87 const SSLConfig& ssl_config_for_origin,
88 const SSLConfig& ssl_config_for_proxy,
89 const BoundNetLog& net_log,
90 ClientSocketHandle* socket_handle,
91 OldCompletionCallback* callback);
177 92
178 private: 93 // A helper method that uses the passed in proxy information to initialize a
179 friend class HttpNetworkSessionPeer; 94 // ClientSocketHandle with the relevant socket pool. Use this method for
95 // a raw socket connection to a host-port pair (that needs to tunnel through
96 // the proxies).
97 NET_EXPORT int InitSocketHandleForRawConnect(
98 const HostPortPair& host_port_pair,
99 HttpNetworkSession* session,
100 const ProxyInfo& proxy_info,
101 const SSLConfig& ssl_config_for_origin,
102 const SSLConfig& ssl_config_for_proxy,
103 const BoundNetLog& net_log,
104 ClientSocketHandle* socket_handle,
105 OldCompletionCallback* callback);
180 106
181 typedef internal::OwnedPoolMap<HostPortPair, TransportClientSocketPool*> 107 // Similar to InitSocketHandleForHttpRequest except that it initiates the
182 TransportSocketPoolMap; 108 // desired number of preconnect streams from the relevant socket pool.
183 typedef internal::OwnedPoolMap<HostPortPair, SOCKSClientSocketPool*> 109 int PreconnectSocketsForHttpRequest(
184 SOCKSSocketPoolMap; 110 const GURL& request_url,
185 typedef internal::OwnedPoolMap<HostPortPair, HttpProxyClientSocketPool*> 111 const HttpRequestHeaders& request_extra_headers,
186 HTTPProxySocketPoolMap; 112 int request_load_flags,
187 typedef internal::OwnedPoolMap<HostPortPair, SSLClientSocketPool*> 113 RequestPriority request_priority,
188 SSLSocketPoolMap; 114 HttpNetworkSession* session,
189 115 const ProxyInfo& proxy_info,
190 NetLog* const net_log_; 116 bool force_spdy_over_ssl,
191 ClientSocketFactory* const socket_factory_; 117 bool want_spdy_over_npn,
192 HostResolver* const host_resolver_; 118 const SSLConfig& ssl_config_for_origin,
193 CertVerifier* const cert_verifier_; 119 const SSLConfig& ssl_config_for_proxy,
194 OriginBoundCertService* const origin_bound_cert_service_; 120 const BoundNetLog& net_log,
195 DnsRRResolver* const dnsrr_resolver_; 121 int num_preconnect_streams);
196 DnsCertProvenanceChecker* const dns_cert_checker_;
197 SSLHostInfoFactory* const ssl_host_info_factory_;
198 ProxyService* const proxy_service_;
199 const scoped_refptr<SSLConfigService> ssl_config_service_;
200
201 // Note: this ordering is important.
202
203 ClientSocketPoolHistograms transport_pool_histograms_;
204 scoped_ptr<TransportClientSocketPool> transport_socket_pool_;
205
206 ClientSocketPoolHistograms ssl_pool_histograms_;
207 scoped_ptr<SSLClientSocketPool> ssl_socket_pool_;
208
209 ClientSocketPoolHistograms transport_for_socks_pool_histograms_;
210 TransportSocketPoolMap transport_socket_pools_for_socks_proxies_;
211
212 ClientSocketPoolHistograms socks_pool_histograms_;
213 SOCKSSocketPoolMap socks_socket_pools_;
214
215 ClientSocketPoolHistograms transport_for_http_proxy_pool_histograms_;
216 TransportSocketPoolMap transport_socket_pools_for_http_proxies_;
217
218 ClientSocketPoolHistograms transport_for_https_proxy_pool_histograms_;
219 TransportSocketPoolMap transport_socket_pools_for_https_proxies_;
220
221 ClientSocketPoolHistograms ssl_for_https_proxy_pool_histograms_;
222 SSLSocketPoolMap ssl_socket_pools_for_https_proxies_;
223
224 ClientSocketPoolHistograms http_proxy_pool_histograms_;
225 HTTPProxySocketPoolMap http_proxy_socket_pools_;
226
227 ClientSocketPoolHistograms ssl_socket_pool_for_proxies_histograms_;
228 SSLSocketPoolMap ssl_socket_pools_for_proxies_;
229
230 DISALLOW_COPY_AND_ASSIGN(ClientSocketPoolManager);
231 };
232 122
233 } // namespace net 123 } // namespace net
234 124
235 #endif // NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_H_ 125 #endif // NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_H_
OLDNEW
« no previous file with comments | « net/net.gyp ('k') | net/socket/client_socket_pool_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698