| // 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_HTTP_HTTP_NETWORK_SESSION_H_ |
| #define NET_HTTP_HTTP_NETWORK_SESSION_H_ |
| #pragma once |
| |
| #include <set> |
| #include "base/memory/ref_counted.h" |
| #include "base/threading/non_thread_safe.h" |
| #include "net/base/host_port_pair.h" |
| #include "net/base/host_resolver.h" |
| #include "net/base/ssl_client_auth_cache.h" |
| #include "net/http/http_alternate_protocols.h" |
| #include "net/http/http_auth_cache.h" |
| #include "net/http/http_stream_factory.h" |
| #include "net/socket/client_socket_pool_manager.h" |
| #include "net/spdy/spdy_session_pool.h" |
| #include "net/spdy/spdy_settings_storage.h" |
| |
| class Value; |
| |
| namespace net { |
| |
| class CertVerifier; |
| class ClientSocketFactory; |
| class DnsCertProvenanceChecker; |
| class DnsRRResolver; |
| class HostResolver; |
| class HttpAuthHandlerFactory; |
| class HttpNetworkSessionPeer; |
| class HttpProxyClientSocketPool; |
| class HttpResponseBodyDrainer; |
| class NetLog; |
| class NetworkDelegate; |
| class ProxyService; |
| class SSLConfigService; |
| class SSLHostInfoFactory; |
| |
| // This class holds session objects used by HttpNetworkTransaction objects. |
| class HttpNetworkSession : public base::RefCounted<HttpNetworkSession>, |
| public base::NonThreadSafe { |
| public: |
| struct Params { |
| Params() |
| : client_socket_factory(NULL), |
| host_resolver(NULL), |
| cert_verifier(NULL), |
| dnsrr_resolver(NULL), |
| dns_cert_checker(NULL), |
| proxy_service(NULL), |
| ssl_host_info_factory(NULL), |
| ssl_config_service(NULL), |
| http_auth_handler_factory(NULL), |
| network_delegate(NULL), |
| net_log(NULL) {} |
| |
| ClientSocketFactory* client_socket_factory; |
| HostResolver* host_resolver; |
| CertVerifier* cert_verifier; |
| DnsRRResolver* dnsrr_resolver; |
| DnsCertProvenanceChecker* dns_cert_checker; |
| ProxyService* proxy_service; |
| SSLHostInfoFactory* ssl_host_info_factory; |
| SSLConfigService* ssl_config_service; |
| HttpAuthHandlerFactory* http_auth_handler_factory; |
| NetworkDelegate* network_delegate; |
| NetLog* net_log; |
| }; |
| |
| explicit HttpNetworkSession(const Params& params); |
| |
| HttpAuthCache* http_auth_cache() { return &http_auth_cache_; } |
| SSLClientAuthCache* ssl_client_auth_cache() { |
| return &ssl_client_auth_cache_; |
| } |
| |
| void AddResponseDrainer(HttpResponseBodyDrainer* drainer); |
| |
| void RemoveResponseDrainer(HttpResponseBodyDrainer* drainer); |
| |
| const HttpAlternateProtocols& alternate_protocols() const { |
| return alternate_protocols_; |
| } |
| HttpAlternateProtocols* mutable_alternate_protocols() { |
| return &alternate_protocols_; |
| } |
| |
| TransportClientSocketPool* transport_socket_pool() { |
| return socket_pool_manager_.transport_socket_pool(); |
| } |
| |
| SSLClientSocketPool* ssl_socket_pool() { |
| return socket_pool_manager_.ssl_socket_pool(); |
| } |
| |
| SOCKSClientSocketPool* GetSocketPoolForSOCKSProxy( |
| const HostPortPair& socks_proxy) { |
| return socket_pool_manager_.GetSocketPoolForSOCKSProxy(socks_proxy); |
| } |
| |
| HttpProxyClientSocketPool* GetSocketPoolForHTTPProxy( |
| const HostPortPair& http_proxy) { |
| return socket_pool_manager_.GetSocketPoolForHTTPProxy(http_proxy); |
| } |
| |
| SSLClientSocketPool* GetSocketPoolForSSLWithProxy( |
| const HostPortPair& proxy_server) { |
| return socket_pool_manager_.GetSocketPoolForSSLWithProxy(proxy_server); |
| } |
| |
| CertVerifier* cert_verifier() { return cert_verifier_; } |
| ProxyService* proxy_service() { return proxy_service_; } |
| SSLConfigService* ssl_config_service() { return ssl_config_service_; } |
| SpdySessionPool* spdy_session_pool() { return &spdy_session_pool_; } |
| HttpAuthHandlerFactory* http_auth_handler_factory() { |
| return http_auth_handler_factory_; |
| } |
| NetworkDelegate* network_delegate() { |
| return network_delegate_; |
| } |
| |
| HttpStreamFactory* http_stream_factory() { |
| return http_stream_factory_.get(); |
| } |
| |
| NetLog* net_log() { |
| return net_log_; |
| } |
| |
| // Creates a Value summary of the state of the socket pools. The caller is |
| // responsible for deleting the returned value. |
| Value* SocketPoolInfoToValue() const { |
| return socket_pool_manager_.SocketPoolInfoToValue(); |
| } |
| |
| // Creates a Value summary of the state of the SPDY sessions. The caller is |
| // responsible for deleting the returned value. |
| Value* SpdySessionPoolInfoToValue() const; |
| |
| void CloseAllConnections() { |
| socket_pool_manager_.FlushSocketPools(); |
| spdy_session_pool_.CloseCurrentSessions(); |
| } |
| |
| void CloseIdleConnections() { |
| socket_pool_manager_.CloseIdleSockets(); |
| spdy_session_pool_.CloseIdleSessions(); |
| } |
| |
| |
| private: |
| friend class base::RefCounted<HttpNetworkSession>; |
| friend class HttpNetworkSessionPeer; |
| |
| ~HttpNetworkSession(); |
| |
| NetLog* const net_log_; |
| NetworkDelegate* const network_delegate_; |
| CertVerifier* const cert_verifier_; |
| HttpAuthHandlerFactory* const http_auth_handler_factory_; |
| |
| // Not const since it's modified by HttpNetworkSessionPeer for testing. |
| scoped_refptr<ProxyService> proxy_service_; |
| const scoped_refptr<SSLConfigService> ssl_config_service_; |
| |
| HttpAuthCache http_auth_cache_; |
| SSLClientAuthCache ssl_client_auth_cache_; |
| HttpAlternateProtocols alternate_protocols_; |
| ClientSocketPoolManager socket_pool_manager_; |
| SpdySessionPool spdy_session_pool_; |
| scoped_ptr<HttpStreamFactory> http_stream_factory_; |
| std::set<HttpResponseBodyDrainer*> response_drainers_; |
| }; |
| |
| } // namespace net |
| |
| #endif // NET_HTTP_HTTP_NETWORK_SESSION_H_ |