|  | // Copyright (c) 2012 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. | 
|  |  | 
|  | #ifndef NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_H_ | 
|  | #define NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_H_ | 
|  |  | 
|  | #include "net/base/completion_callback.h" | 
|  | #include "net/base/net_export.h" | 
|  | #include "net/base/request_priority.h" | 
|  | #include "net/http/http_network_session.h" | 
|  |  | 
|  | class GURL; | 
|  |  | 
|  | namespace base { | 
|  | class Value; | 
|  | } | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | typedef base::Callback<int(const AddressList&, const BoundNetLog& net_log)> | 
|  | OnHostResolutionCallback; | 
|  |  | 
|  | class BoundNetLog; | 
|  | class ClientSocketHandle; | 
|  | class HostPortPair; | 
|  | class HttpNetworkSession; | 
|  | class HttpProxyClientSocketPool; | 
|  | class HttpRequestHeaders; | 
|  | class ProxyInfo; | 
|  | class TransportClientSocketPool; | 
|  | class SOCKSClientSocketPool; | 
|  | class SSLClientSocketPool; | 
|  |  | 
|  | struct SSLConfig; | 
|  |  | 
|  | // This should rather be a simple constant but Windows shared libs doesn't | 
|  | // really offer much flexiblity in exporting contants. | 
|  | enum DefaultMaxValues { kDefaultMaxSocketsPerProxyServer = 32 }; | 
|  |  | 
|  | class NET_EXPORT_PRIVATE ClientSocketPoolManager { | 
|  | public: | 
|  | ClientSocketPoolManager(); | 
|  | virtual ~ClientSocketPoolManager(); | 
|  |  | 
|  | // The setter methods below affect only newly created socket pools after the | 
|  | // methods are called. Normally they should be called at program startup | 
|  | // before any ClientSocketPoolManagerImpl is created. | 
|  | static int max_sockets_per_pool(HttpNetworkSession::SocketPoolType pool_type); | 
|  | static void set_max_sockets_per_pool( | 
|  | HttpNetworkSession::SocketPoolType pool_type, | 
|  | int socket_count); | 
|  |  | 
|  | static int max_sockets_per_group( | 
|  | HttpNetworkSession::SocketPoolType pool_type); | 
|  | static void set_max_sockets_per_group( | 
|  | HttpNetworkSession::SocketPoolType pool_type, | 
|  | int socket_count); | 
|  |  | 
|  | static int max_sockets_per_proxy_server( | 
|  | HttpNetworkSession::SocketPoolType pool_type); | 
|  | static void set_max_sockets_per_proxy_server( | 
|  | HttpNetworkSession::SocketPoolType pool_type, | 
|  | int socket_count); | 
|  |  | 
|  | virtual void FlushSocketPoolsWithError(int error) = 0; | 
|  | virtual void CloseIdleSockets() = 0; | 
|  | virtual TransportClientSocketPool* GetTransportSocketPool() = 0; | 
|  | virtual SSLClientSocketPool* GetSSLSocketPool() = 0; | 
|  | virtual SOCKSClientSocketPool* GetSocketPoolForSOCKSProxy( | 
|  | const HostPortPair& socks_proxy) = 0; | 
|  | virtual HttpProxyClientSocketPool* GetSocketPoolForHTTPProxy( | 
|  | const HostPortPair& http_proxy) = 0; | 
|  | virtual SSLClientSocketPool* GetSocketPoolForSSLWithProxy( | 
|  | const HostPortPair& proxy_server) = 0; | 
|  | // 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 = 0; | 
|  | }; | 
|  |  | 
|  | // A helper method that uses the passed in proxy information to initialize a | 
|  | // ClientSocketHandle with the relevant socket pool. Use this method for | 
|  | // HTTP/HTTPS requests. |ssl_config_for_origin| is only used if the request | 
|  | // uses SSL and |ssl_config_for_proxy| is used if the proxy server is HTTPS. | 
|  | // |resolution_callback| will be invoked after the the hostname is | 
|  | // resolved.  If |resolution_callback| does not return OK, then the | 
|  | // connection will be aborted with that value. | 
|  | int InitSocketHandleForHttpRequest( | 
|  | const GURL& request_url, | 
|  | const HttpRequestHeaders& request_extra_headers, | 
|  | int request_load_flags, | 
|  | RequestPriority request_priority, | 
|  | HttpNetworkSession* session, | 
|  | const ProxyInfo& proxy_info, | 
|  | bool force_spdy_over_ssl, | 
|  | bool want_spdy_over_npn, | 
|  | const SSLConfig& ssl_config_for_origin, | 
|  | const SSLConfig& ssl_config_for_proxy, | 
|  | const BoundNetLog& net_log, | 
|  | ClientSocketHandle* socket_handle, | 
|  | const OnHostResolutionCallback& resolution_callback, | 
|  | const CompletionCallback& callback); | 
|  |  | 
|  | // A helper method that uses the passed in proxy information to initialize a | 
|  | // ClientSocketHandle with the relevant socket pool. Use this method for | 
|  | // a raw socket connection to a host-port pair (that needs to tunnel through | 
|  | // the proxies). | 
|  | NET_EXPORT int InitSocketHandleForRawConnect( | 
|  | const HostPortPair& host_port_pair, | 
|  | HttpNetworkSession* session, | 
|  | const ProxyInfo& proxy_info, | 
|  | const SSLConfig& ssl_config_for_origin, | 
|  | const SSLConfig& ssl_config_for_proxy, | 
|  | const BoundNetLog& net_log, | 
|  | ClientSocketHandle* socket_handle, | 
|  | const CompletionCallback& callback); | 
|  |  | 
|  | // Similar to InitSocketHandleForHttpRequest except that it initiates the | 
|  | // desired number of preconnect streams from the relevant socket pool. | 
|  | int PreconnectSocketsForHttpRequest( | 
|  | const GURL& request_url, | 
|  | const HttpRequestHeaders& request_extra_headers, | 
|  | int request_load_flags, | 
|  | RequestPriority request_priority, | 
|  | HttpNetworkSession* session, | 
|  | const ProxyInfo& proxy_info, | 
|  | bool force_spdy_over_ssl, | 
|  | bool want_spdy_over_npn, | 
|  | const SSLConfig& ssl_config_for_origin, | 
|  | const SSLConfig& ssl_config_for_proxy, | 
|  | const BoundNetLog& net_log, | 
|  | int num_preconnect_streams); | 
|  |  | 
|  | }  // namespace net | 
|  |  | 
|  | #endif  // NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_H_ |