Index: net/http/http_network_session.h |
diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h |
index 8184e99f5b63e263f4baa203cf5ade60fd74526a..42554c11fafb886f250d26a0ce0680be3da74e75 100644 |
--- a/net/http/http_network_session.h |
+++ b/net/http/http_network_session.h |
@@ -1,253 +1,244 @@ |
-// 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. |
- |
-#ifndef NET_HTTP_HTTP_NETWORK_SESSION_H_ |
-#define NET_HTTP_HTTP_NETWORK_SESSION_H_ |
- |
-#include <set> |
-#include <string> |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/threading/non_thread_safe.h" |
-#include "net/base/host_port_pair.h" |
-#include "net/base/net_export.h" |
-#include "net/dns/host_resolver.h" |
-#include "net/http/http_auth_cache.h" |
-#include "net/http/http_stream_factory.h" |
-#include "net/quic/quic_stream_factory.h" |
-#include "net/socket/next_proto.h" |
-#include "net/spdy/spdy_session_pool.h" |
-#include "net/ssl/ssl_client_auth_cache.h" |
- |
-namespace base { |
-class Value; |
-} |
- |
-namespace net { |
- |
-class CertVerifier; |
-class ClientSocketFactory; |
-class ClientSocketPoolManager; |
-class CTVerifier; |
-class HostResolver; |
-class HpackHuffmanAggregator; |
-class HttpAuthHandlerFactory; |
-class HttpNetworkSessionPeer; |
-class HttpProxyClientSocketPool; |
-class HttpResponseBodyDrainer; |
-class HttpServerProperties; |
-class NetLog; |
-class NetworkDelegate; |
-class ServerBoundCertService; |
-class ProxyService; |
-class QuicClock; |
-class QuicCryptoClientStreamFactory; |
-class QuicServerInfoFactory; |
-class SOCKSClientSocketPool; |
-class SSLClientSocketPool; |
-class SSLConfigService; |
-class TransportClientSocketPool; |
-class TransportSecurityState; |
- |
-// This class holds session objects used by HttpNetworkTransaction objects. |
-class NET_EXPORT HttpNetworkSession |
- : public base::RefCounted<HttpNetworkSession>, |
- NON_EXPORTED_BASE(public base::NonThreadSafe) { |
- public: |
- struct NET_EXPORT Params { |
- Params(); |
- ~Params(); |
- |
- ClientSocketFactory* client_socket_factory; |
- HostResolver* host_resolver; |
- CertVerifier* cert_verifier; |
- ServerBoundCertService* server_bound_cert_service; |
- TransportSecurityState* transport_security_state; |
- CTVerifier* cert_transparency_verifier; |
- ProxyService* proxy_service; |
- std::string ssl_session_cache_shard; |
- SSLConfigService* ssl_config_service; |
- HttpAuthHandlerFactory* http_auth_handler_factory; |
- NetworkDelegate* network_delegate; |
- base::WeakPtr<HttpServerProperties> http_server_properties; |
- NetLog* net_log; |
- HostMappingRules* host_mapping_rules; |
- bool force_http_pipelining; |
- bool ignore_certificate_errors; |
- bool http_pipelining_enabled; |
- uint16 testing_fixed_http_port; |
- uint16 testing_fixed_https_port; |
- |
- bool force_spdy_single_domain; |
- bool enable_spdy_compression; |
- bool enable_spdy_ping_based_connection_checking; |
- NextProto spdy_default_protocol; |
- // The protocols supported by NPN (next protocol negotiation) during the |
- // SSL handshake as well as by HTTP Alternate-Protocol. |
- // TODO(mmenke): This is currently empty by default, and alternate |
- // protocols are disabled. We should use some reasonable |
- // defaults. |
- NextProtoVector next_protos; |
- size_t spdy_stream_initial_recv_window_size; |
- size_t spdy_initial_max_concurrent_streams; |
- size_t spdy_max_concurrent_streams_limit; |
- SpdySessionPool::TimeFunc time_func; |
- std::string trusted_spdy_proxy; |
- // Controls whether or not ssl is used when in SPDY mode. |
- bool force_spdy_over_ssl; |
- // Controls whether or not SPDY is used without NPN. |
- bool force_spdy_always; |
- // URLs to exclude from forced SPDY. |
- std::set<HostPortPair> forced_spdy_exclusions; |
- // Noe: Using this in the case of NPN for HTTP only results in the browser |
- // trying SSL and then falling back to http. |
- bool use_alternate_protocols; |
- |
- bool enable_quic; |
- bool enable_quic_https; |
- bool enable_quic_port_selection; |
- bool enable_quic_pacing; |
- bool enable_quic_time_based_loss_detection; |
- bool enable_quic_persist_server_info; |
- HostPortPair origin_to_force_quic_on; |
- QuicClock* quic_clock; // Will be owned by QuicStreamFactory. |
- QuicRandom* quic_random; |
- size_t quic_max_packet_length; |
- bool enable_user_alternate_protocol_ports; |
- QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory; |
- QuicVersionVector quic_supported_versions; |
- }; |
- |
- enum SocketPoolType { |
- NORMAL_SOCKET_POOL, |
- WEBSOCKET_SOCKET_POOL, |
- NUM_SOCKET_POOL_TYPES |
- }; |
- |
- 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); |
- |
- TransportClientSocketPool* GetTransportSocketPool(SocketPoolType pool_type); |
- SSLClientSocketPool* GetSSLSocketPool(SocketPoolType pool_type); |
- SOCKSClientSocketPool* GetSocketPoolForSOCKSProxy( |
- SocketPoolType pool_type, |
- const HostPortPair& socks_proxy); |
- HttpProxyClientSocketPool* GetSocketPoolForHTTPProxy( |
- SocketPoolType pool_type, |
- const HostPortPair& http_proxy); |
- SSLClientSocketPool* GetSocketPoolForSSLWithProxy( |
- SocketPoolType pool_type, |
- const HostPortPair& proxy_server); |
- |
- CertVerifier* cert_verifier() { return cert_verifier_; } |
- ProxyService* proxy_service() { return proxy_service_; } |
- SSLConfigService* ssl_config_service() { return ssl_config_service_.get(); } |
- SpdySessionPool* spdy_session_pool() { return &spdy_session_pool_; } |
- QuicStreamFactory* quic_stream_factory() { return &quic_stream_factory_; } |
- HttpAuthHandlerFactory* http_auth_handler_factory() { |
- return http_auth_handler_factory_; |
- } |
- NetworkDelegate* network_delegate() { |
- return network_delegate_; |
- } |
- base::WeakPtr<HttpServerProperties> http_server_properties() { |
- return http_server_properties_; |
- } |
- HttpStreamFactory* http_stream_factory() { |
- return http_stream_factory_.get(); |
- } |
- HttpStreamFactory* http_stream_factory_for_websocket() { |
- return http_stream_factory_for_websocket_.get(); |
- } |
- NetLog* net_log() { |
- return net_log_; |
- } |
- HpackHuffmanAggregator* huffman_aggregator() { |
- return huffman_aggregator_.get(); |
- } |
- |
- // Creates a Value summary of the state of the socket pools. The caller is |
- // responsible for deleting the returned value. |
- base::Value* SocketPoolInfoToValue() const; |
- |
- // Creates a Value summary of the state of the SPDY sessions. The caller is |
- // responsible for deleting the returned value. |
- base::Value* SpdySessionPoolInfoToValue() const; |
- |
- // Creates a Value summary of the state of the QUIC sessions and |
- // configuration. The caller is responsible for deleting the returned value. |
- base::Value* QuicInfoToValue() const; |
- |
- void CloseAllConnections(); |
- void CloseIdleConnections(); |
- |
- bool force_http_pipelining() const { return force_http_pipelining_; } |
- |
- // Returns the original Params used to construct this session. |
- const Params& params() const { return params_; } |
- |
- void set_http_pipelining_enabled(bool enable) { |
- params_.http_pipelining_enabled = enable; |
- } |
- |
- bool IsProtocolEnabled(AlternateProtocol protocol) const; |
- |
- void GetNextProtos(std::vector<std::string>* next_protos) const; |
- |
- // Convenience function for searching through |params_| for |
- // |forced_spdy_exclusions|. |
- bool HasSpdyExclusion(HostPortPair host_port_pair) const; |
- |
- private: |
- friend class base::RefCounted<HttpNetworkSession>; |
- friend class HttpNetworkSessionPeer; |
- |
- ~HttpNetworkSession(); |
- |
- ClientSocketPoolManager* GetSocketPoolManager(SocketPoolType pool_type); |
- |
- NetLog* const net_log_; |
- NetworkDelegate* const network_delegate_; |
- const base::WeakPtr<HttpServerProperties> http_server_properties_; |
- CertVerifier* const cert_verifier_; |
- HttpAuthHandlerFactory* const http_auth_handler_factory_; |
- bool force_http_pipelining_; |
- |
- // Not const since it's modified by HttpNetworkSessionPeer for testing. |
- ProxyService* proxy_service_; |
- const scoped_refptr<SSLConfigService> ssl_config_service_; |
- |
- HttpAuthCache http_auth_cache_; |
- SSLClientAuthCache ssl_client_auth_cache_; |
- scoped_ptr<ClientSocketPoolManager> normal_socket_pool_manager_; |
- scoped_ptr<ClientSocketPoolManager> websocket_socket_pool_manager_; |
- QuicStreamFactory quic_stream_factory_; |
- SpdySessionPool spdy_session_pool_; |
- scoped_ptr<HttpStreamFactory> http_stream_factory_; |
- scoped_ptr<HttpStreamFactory> http_stream_factory_for_websocket_; |
- std::set<HttpResponseBodyDrainer*> response_drainers_; |
- |
- // TODO(jgraettinger): Remove when Huffman collection is complete. |
- scoped_ptr<HpackHuffmanAggregator> huffman_aggregator_; |
- |
- std::vector<std::string> next_protos_; |
- bool enabled_protocols_[NUM_VALID_ALTERNATE_PROTOCOLS]; |
- |
- Params params_; |
-}; |
- |
-} // namespace net |
- |
-#endif // NET_HTTP_HTTP_NETWORK_SESSION_H_ |
+// 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. |
+ |
+#ifndef NET_HTTP_HTTP_NETWORK_SESSION_H_ |
+#define NET_HTTP_HTTP_NETWORK_SESSION_H_ |
+ |
+#include <set> |
+#include <string> |
+#include <vector> |
+ |
+#include "base/basictypes.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/threading/non_thread_safe.h" |
+#include "net/base/host_port_pair.h" |
+#include "net/base/net_export.h" |
+#include "net/dns/host_resolver.h" |
+#include "net/http/http_auth_cache.h" |
+#include "net/http/http_stream_factory.h" |
+#include "net/quic/quic_stream_factory.h" |
+#include "net/socket/next_proto.h" |
+#include "net/spdy/spdy_session_pool.h" |
+#include "net/ssl/ssl_client_auth_cache.h" |
+ |
+namespace base { |
+class Value; |
+} |
+ |
+namespace net { |
+ |
+class CertVerifier; |
+class ClientSocketFactory; |
+class ClientSocketPoolManager; |
+class CTVerifier; |
+class HostResolver; |
+class HpackHuffmanAggregator; |
+class HttpAuthHandlerFactory; |
+class HttpNetworkSessionPeer; |
+class HttpProxyClientSocketPool; |
+class HttpResponseBodyDrainer; |
+class HttpServerProperties; |
+class NetLog; |
+class NetworkDelegate; |
+class ServerBoundCertService; |
+class ProxyService; |
+class QuicClock; |
+class QuicCryptoClientStreamFactory; |
+class QuicServerInfoFactory; |
+class SOCKSClientSocketPool; |
+class SSLClientSocketPool; |
+class SSLConfigService; |
+class TransportClientSocketPool; |
+class TransportSecurityState; |
+ |
+// This class holds session objects used by HttpNetworkTransaction objects. |
+class NET_EXPORT HttpNetworkSession |
+ : public base::RefCounted<HttpNetworkSession>, |
+ NON_EXPORTED_BASE(public base::NonThreadSafe) { |
+ public: |
+ struct NET_EXPORT Params { |
+ Params(); |
+ ~Params(); |
+ |
+ ClientSocketFactory* client_socket_factory; |
+ HostResolver* host_resolver; |
+ CertVerifier* cert_verifier; |
+ ServerBoundCertService* server_bound_cert_service; |
+ TransportSecurityState* transport_security_state; |
+ CTVerifier* cert_transparency_verifier; |
+ ProxyService* proxy_service; |
+ std::string ssl_session_cache_shard; |
+ SSLConfigService* ssl_config_service; |
+ HttpAuthHandlerFactory* http_auth_handler_factory; |
+ NetworkDelegate* network_delegate; |
+ base::WeakPtr<HttpServerProperties> http_server_properties; |
+ NetLog* net_log; |
+ HostMappingRules* host_mapping_rules; |
+ bool ignore_certificate_errors; |
+ uint16 testing_fixed_http_port; |
+ uint16 testing_fixed_https_port; |
+ |
+ bool force_spdy_single_domain; |
+ bool enable_spdy_compression; |
+ bool enable_spdy_ping_based_connection_checking; |
+ NextProto spdy_default_protocol; |
+ // The protocols supported by NPN (next protocol negotiation) during the |
+ // SSL handshake as well as by HTTP Alternate-Protocol. |
+ // TODO(mmenke): This is currently empty by default, and alternate |
+ // protocols are disabled. We should use some reasonable |
+ // defaults. |
+ NextProtoVector next_protos; |
+ size_t spdy_stream_initial_recv_window_size; |
+ size_t spdy_initial_max_concurrent_streams; |
+ size_t spdy_max_concurrent_streams_limit; |
+ SpdySessionPool::TimeFunc time_func; |
+ std::string trusted_spdy_proxy; |
+ // Controls whether or not ssl is used when in SPDY mode. |
+ bool force_spdy_over_ssl; |
+ // Controls whether or not SPDY is used without NPN. |
+ bool force_spdy_always; |
+ // URLs to exclude from forced SPDY. |
+ std::set<HostPortPair> forced_spdy_exclusions; |
+ // Noe: Using this in the case of NPN for HTTP only results in the browser |
+ // trying SSL and then falling back to http. |
+ bool use_alternate_protocols; |
+ |
+ bool enable_quic; |
+ bool enable_quic_https; |
+ bool enable_quic_port_selection; |
+ bool enable_quic_pacing; |
+ bool enable_quic_time_based_loss_detection; |
+ bool enable_quic_persist_server_info; |
+ HostPortPair origin_to_force_quic_on; |
+ QuicClock* quic_clock; // Will be owned by QuicStreamFactory. |
+ QuicRandom* quic_random; |
+ size_t quic_max_packet_length; |
+ bool enable_user_alternate_protocol_ports; |
+ QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory; |
+ QuicVersionVector quic_supported_versions; |
+ }; |
+ |
+ enum SocketPoolType { |
+ NORMAL_SOCKET_POOL, |
+ WEBSOCKET_SOCKET_POOL, |
+ NUM_SOCKET_POOL_TYPES |
+ }; |
+ |
+ 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); |
+ |
+ TransportClientSocketPool* GetTransportSocketPool(SocketPoolType pool_type); |
+ SSLClientSocketPool* GetSSLSocketPool(SocketPoolType pool_type); |
+ SOCKSClientSocketPool* GetSocketPoolForSOCKSProxy( |
+ SocketPoolType pool_type, |
+ const HostPortPair& socks_proxy); |
+ HttpProxyClientSocketPool* GetSocketPoolForHTTPProxy( |
+ SocketPoolType pool_type, |
+ const HostPortPair& http_proxy); |
+ SSLClientSocketPool* GetSocketPoolForSSLWithProxy( |
+ SocketPoolType pool_type, |
+ const HostPortPair& proxy_server); |
+ |
+ CertVerifier* cert_verifier() { return cert_verifier_; } |
+ ProxyService* proxy_service() { return proxy_service_; } |
+ SSLConfigService* ssl_config_service() { return ssl_config_service_.get(); } |
+ SpdySessionPool* spdy_session_pool() { return &spdy_session_pool_; } |
+ QuicStreamFactory* quic_stream_factory() { return &quic_stream_factory_; } |
+ HttpAuthHandlerFactory* http_auth_handler_factory() { |
+ return http_auth_handler_factory_; |
+ } |
+ NetworkDelegate* network_delegate() { |
+ return network_delegate_; |
+ } |
+ base::WeakPtr<HttpServerProperties> http_server_properties() { |
+ return http_server_properties_; |
+ } |
+ HttpStreamFactory* http_stream_factory() { |
+ return http_stream_factory_.get(); |
+ } |
+ HttpStreamFactory* http_stream_factory_for_websocket() { |
+ return http_stream_factory_for_websocket_.get(); |
+ } |
+ NetLog* net_log() { |
+ return net_log_; |
+ } |
+ HpackHuffmanAggregator* huffman_aggregator() { |
+ return huffman_aggregator_.get(); |
+ } |
+ |
+ // Creates a Value summary of the state of the socket pools. The caller is |
+ // responsible for deleting the returned value. |
+ base::Value* SocketPoolInfoToValue() const; |
+ |
+ // Creates a Value summary of the state of the SPDY sessions. The caller is |
+ // responsible for deleting the returned value. |
+ base::Value* SpdySessionPoolInfoToValue() const; |
+ |
+ // Creates a Value summary of the state of the QUIC sessions and |
+ // configuration. The caller is responsible for deleting the returned value. |
+ base::Value* QuicInfoToValue() const; |
+ |
+ void CloseAllConnections(); |
+ void CloseIdleConnections(); |
+ |
+ // Returns the original Params used to construct this session. |
+ const Params& params() const { return params_; } |
+ |
+ bool IsProtocolEnabled(AlternateProtocol protocol) const; |
+ |
+ void GetNextProtos(std::vector<std::string>* next_protos) const; |
+ |
+ // Convenience function for searching through |params_| for |
+ // |forced_spdy_exclusions|. |
+ bool HasSpdyExclusion(HostPortPair host_port_pair) const; |
+ |
+ private: |
+ friend class base::RefCounted<HttpNetworkSession>; |
+ friend class HttpNetworkSessionPeer; |
+ |
+ ~HttpNetworkSession(); |
+ |
+ ClientSocketPoolManager* GetSocketPoolManager(SocketPoolType pool_type); |
+ |
+ NetLog* const net_log_; |
+ NetworkDelegate* const network_delegate_; |
+ const base::WeakPtr<HttpServerProperties> http_server_properties_; |
+ CertVerifier* const cert_verifier_; |
+ HttpAuthHandlerFactory* const http_auth_handler_factory_; |
+ |
+ // Not const since it's modified by HttpNetworkSessionPeer for testing. |
+ ProxyService* proxy_service_; |
+ const scoped_refptr<SSLConfigService> ssl_config_service_; |
+ |
+ HttpAuthCache http_auth_cache_; |
+ SSLClientAuthCache ssl_client_auth_cache_; |
+ scoped_ptr<ClientSocketPoolManager> normal_socket_pool_manager_; |
+ scoped_ptr<ClientSocketPoolManager> websocket_socket_pool_manager_; |
+ QuicStreamFactory quic_stream_factory_; |
+ SpdySessionPool spdy_session_pool_; |
+ scoped_ptr<HttpStreamFactory> http_stream_factory_; |
+ scoped_ptr<HttpStreamFactory> http_stream_factory_for_websocket_; |
+ std::set<HttpResponseBodyDrainer*> response_drainers_; |
+ |
+ // TODO(jgraettinger): Remove when Huffman collection is complete. |
+ scoped_ptr<HpackHuffmanAggregator> huffman_aggregator_; |
+ |
+ std::vector<std::string> next_protos_; |
+ bool enabled_protocols_[NUM_VALID_ALTERNATE_PROTOCOLS]; |
+ |
+ Params params_; |
+}; |
+ |
+} // namespace net |
+ |
+#endif // NET_HTTP_HTTP_NETWORK_SESSION_H_ |