Chromium Code Reviews| Index: net/http/http_network_session.h |
| diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h |
| index 04bd6ec241cf0ab0f0709188f6f361ee21a2d65a..8184e99f5b63e263f4baa203cf5ade60fd74526a 100644 |
| --- a/net/http/http_network_session.h |
| +++ b/net/http/http_network_session.h |
| @@ -1,222 +1,253 @@ |
| -// 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 "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/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 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; |
| - 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; |
| - 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; |
| - } |
| - |
| - 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_; |
| - |
| - 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 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; |
|
Ryan Hamilton
2014/05/22 17:30:45
I would have expected this method to return a cons
|
| + |
| + // 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_ |