| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef NET_HTTP_HTTP_NETWORK_SESSION_H_ | |
| 6 #define NET_HTTP_HTTP_NETWORK_SESSION_H_ | |
| 7 | |
| 8 #include <set> | |
| 9 #include <string> | |
| 10 #include <vector> | |
| 11 | |
| 12 #include "base/basictypes.h" | |
| 13 #include "base/memory/ref_counted.h" | |
| 14 #include "base/memory/weak_ptr.h" | |
| 15 #include "base/threading/non_thread_safe.h" | |
| 16 #include "net/base/host_port_pair.h" | |
| 17 #include "net/base/net_export.h" | |
| 18 #include "net/dns/host_resolver.h" | |
| 19 #include "net/http/http_auth_cache.h" | |
| 20 #include "net/http/http_stream_factory.h" | |
| 21 #include "net/quic/quic_stream_factory.h" | |
| 22 #include "net/socket/next_proto.h" | |
| 23 #include "net/spdy/spdy_session_pool.h" | |
| 24 #include "net/ssl/ssl_client_auth_cache.h" | |
| 25 | |
| 26 namespace base { | |
| 27 class Value; | |
| 28 } | |
| 29 | |
| 30 namespace net { | |
| 31 | |
| 32 class CertPolicyEnforcer; | |
| 33 class CertVerifier; | |
| 34 class ChannelIDService; | |
| 35 class ClientSocketFactory; | |
| 36 class ClientSocketPoolManager; | |
| 37 class CTVerifier; | |
| 38 class HostResolver; | |
| 39 class HpackHuffmanAggregator; | |
| 40 class HttpAuthHandlerFactory; | |
| 41 class HttpNetworkSessionPeer; | |
| 42 class HttpProxyClientSocketPool; | |
| 43 class HttpResponseBodyDrainer; | |
| 44 class HttpServerProperties; | |
| 45 class NetLog; | |
| 46 class NetworkDelegate; | |
| 47 class ProxyDelegate; | |
| 48 class ProxyService; | |
| 49 class QuicClock; | |
| 50 class QuicCryptoClientStreamFactory; | |
| 51 class QuicServerInfoFactory; | |
| 52 class SOCKSClientSocketPool; | |
| 53 class SSLClientSocketPool; | |
| 54 class SSLConfigService; | |
| 55 class TransportClientSocketPool; | |
| 56 class TransportSecurityState; | |
| 57 | |
| 58 // This class holds session objects used by HttpNetworkTransaction objects. | |
| 59 class NET_EXPORT HttpNetworkSession | |
| 60 : public base::RefCounted<HttpNetworkSession>, | |
| 61 NON_EXPORTED_BASE(public base::NonThreadSafe) { | |
| 62 public: | |
| 63 struct NET_EXPORT Params { | |
| 64 Params(); | |
| 65 ~Params(); | |
| 66 | |
| 67 ClientSocketFactory* client_socket_factory; | |
| 68 HostResolver* host_resolver; | |
| 69 CertVerifier* cert_verifier; | |
| 70 CertPolicyEnforcer* cert_policy_enforcer; | |
| 71 ChannelIDService* channel_id_service; | |
| 72 TransportSecurityState* transport_security_state; | |
| 73 CTVerifier* cert_transparency_verifier; | |
| 74 ProxyService* proxy_service; | |
| 75 std::string ssl_session_cache_shard; | |
| 76 SSLConfigService* ssl_config_service; | |
| 77 HttpAuthHandlerFactory* http_auth_handler_factory; | |
| 78 NetworkDelegate* network_delegate; | |
| 79 base::WeakPtr<HttpServerProperties> http_server_properties; | |
| 80 NetLog* net_log; | |
| 81 HostMappingRules* host_mapping_rules; | |
| 82 bool enable_ssl_connect_job_waiting; | |
| 83 bool ignore_certificate_errors; | |
| 84 bool use_stale_while_revalidate; | |
| 85 uint16 testing_fixed_http_port; | |
| 86 uint16 testing_fixed_https_port; | |
| 87 bool enable_tcp_fast_open_for_ssl; | |
| 88 | |
| 89 bool force_spdy_single_domain; | |
| 90 bool enable_spdy_compression; | |
| 91 bool enable_spdy_ping_based_connection_checking; | |
| 92 NextProto spdy_default_protocol; | |
| 93 // The protocols supported by NPN (next protocol negotiation) during the | |
| 94 // SSL handshake as well as by HTTP Alternate-Protocol. | |
| 95 // TODO(mmenke): This is currently empty by default, and alternate | |
| 96 // protocols are disabled. We should use some reasonable | |
| 97 // defaults. | |
| 98 NextProtoVector next_protos; | |
| 99 size_t spdy_stream_initial_recv_window_size; | |
| 100 size_t spdy_initial_max_concurrent_streams; | |
| 101 size_t spdy_max_concurrent_streams_limit; | |
| 102 SpdySessionPool::TimeFunc time_func; | |
| 103 std::string trusted_spdy_proxy; | |
| 104 // Controls whether or not ssl is used when in SPDY mode. | |
| 105 bool force_spdy_over_ssl; | |
| 106 // Controls whether or not SPDY is used without NPN. | |
| 107 bool force_spdy_always; | |
| 108 // URLs to exclude from forced SPDY. | |
| 109 std::set<HostPortPair> forced_spdy_exclusions; | |
| 110 // Noe: Using this in the case of NPN for HTTP only results in the browser | |
| 111 // trying SSL and then falling back to http. | |
| 112 bool use_alternate_protocols; | |
| 113 double alternate_protocol_probability_threshold; | |
| 114 | |
| 115 bool enable_quic; | |
| 116 bool enable_quic_port_selection; | |
| 117 bool quic_always_require_handshake_confirmation; | |
| 118 bool quic_disable_connection_pooling; | |
| 119 int quic_load_server_info_timeout_ms; | |
| 120 float quic_load_server_info_timeout_srtt_multiplier; | |
| 121 bool quic_enable_truncated_connection_ids; | |
| 122 bool quic_enable_connection_racing; | |
| 123 HostPortPair origin_to_force_quic_on; | |
| 124 QuicClock* quic_clock; // Will be owned by QuicStreamFactory. | |
| 125 QuicRandom* quic_random; | |
| 126 size_t quic_max_packet_length; | |
| 127 std::string quic_user_agent_id; | |
| 128 bool enable_user_alternate_protocol_ports; | |
| 129 QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory; | |
| 130 QuicVersionVector quic_supported_versions; | |
| 131 QuicTagVector quic_connection_options; | |
| 132 ProxyDelegate* proxy_delegate; | |
| 133 }; | |
| 134 | |
| 135 enum SocketPoolType { | |
| 136 NORMAL_SOCKET_POOL, | |
| 137 WEBSOCKET_SOCKET_POOL, | |
| 138 NUM_SOCKET_POOL_TYPES | |
| 139 }; | |
| 140 | |
| 141 explicit HttpNetworkSession(const Params& params); | |
| 142 | |
| 143 HttpAuthCache* http_auth_cache() { return &http_auth_cache_; } | |
| 144 SSLClientAuthCache* ssl_client_auth_cache() { | |
| 145 return &ssl_client_auth_cache_; | |
| 146 } | |
| 147 | |
| 148 void AddResponseDrainer(HttpResponseBodyDrainer* drainer); | |
| 149 | |
| 150 void RemoveResponseDrainer(HttpResponseBodyDrainer* drainer); | |
| 151 | |
| 152 TransportClientSocketPool* GetTransportSocketPool(SocketPoolType pool_type); | |
| 153 SSLClientSocketPool* GetSSLSocketPool(SocketPoolType pool_type); | |
| 154 SOCKSClientSocketPool* GetSocketPoolForSOCKSProxy( | |
| 155 SocketPoolType pool_type, | |
| 156 const HostPortPair& socks_proxy); | |
| 157 HttpProxyClientSocketPool* GetSocketPoolForHTTPProxy( | |
| 158 SocketPoolType pool_type, | |
| 159 const HostPortPair& http_proxy); | |
| 160 SSLClientSocketPool* GetSocketPoolForSSLWithProxy( | |
| 161 SocketPoolType pool_type, | |
| 162 const HostPortPair& proxy_server); | |
| 163 | |
| 164 CertVerifier* cert_verifier() { return cert_verifier_; } | |
| 165 ProxyService* proxy_service() { return proxy_service_; } | |
| 166 SSLConfigService* ssl_config_service() { return ssl_config_service_.get(); } | |
| 167 SpdySessionPool* spdy_session_pool() { return &spdy_session_pool_; } | |
| 168 QuicStreamFactory* quic_stream_factory() { return &quic_stream_factory_; } | |
| 169 HttpAuthHandlerFactory* http_auth_handler_factory() { | |
| 170 return http_auth_handler_factory_; | |
| 171 } | |
| 172 NetworkDelegate* network_delegate() { | |
| 173 return network_delegate_; | |
| 174 } | |
| 175 base::WeakPtr<HttpServerProperties> http_server_properties() { | |
| 176 return http_server_properties_; | |
| 177 } | |
| 178 HttpStreamFactory* http_stream_factory() { | |
| 179 return http_stream_factory_.get(); | |
| 180 } | |
| 181 HttpStreamFactory* http_stream_factory_for_websocket() { | |
| 182 return http_stream_factory_for_websocket_.get(); | |
| 183 } | |
| 184 NetLog* net_log() { | |
| 185 return net_log_; | |
| 186 } | |
| 187 HpackHuffmanAggregator* huffman_aggregator() { | |
| 188 return huffman_aggregator_.get(); | |
| 189 } | |
| 190 | |
| 191 // Creates a Value summary of the state of the socket pools. The caller is | |
| 192 // responsible for deleting the returned value. | |
| 193 base::Value* SocketPoolInfoToValue() const; | |
| 194 | |
| 195 // Creates a Value summary of the state of the SPDY sessions. The caller is | |
| 196 // responsible for deleting the returned value. | |
| 197 base::Value* SpdySessionPoolInfoToValue() const; | |
| 198 | |
| 199 // Creates a Value summary of the state of the QUIC sessions and | |
| 200 // configuration. The caller is responsible for deleting the returned value. | |
| 201 base::Value* QuicInfoToValue() const; | |
| 202 | |
| 203 void CloseAllConnections(); | |
| 204 void CloseIdleConnections(); | |
| 205 | |
| 206 // Returns the original Params used to construct this session. | |
| 207 const Params& params() const { return params_; } | |
| 208 | |
| 209 bool IsProtocolEnabled(AlternateProtocol protocol) const; | |
| 210 | |
| 211 // Populates |*next_protos| with protocols. | |
| 212 void GetNextProtos(NextProtoVector* next_protos) const; | |
| 213 | |
| 214 // Convenience function for searching through |params_| for | |
| 215 // |forced_spdy_exclusions|. | |
| 216 bool HasSpdyExclusion(HostPortPair host_port_pair) const; | |
| 217 | |
| 218 private: | |
| 219 friend class base::RefCounted<HttpNetworkSession>; | |
| 220 friend class HttpNetworkSessionPeer; | |
| 221 | |
| 222 ~HttpNetworkSession(); | |
| 223 | |
| 224 ClientSocketPoolManager* GetSocketPoolManager(SocketPoolType pool_type); | |
| 225 | |
| 226 NetLog* const net_log_; | |
| 227 NetworkDelegate* const network_delegate_; | |
| 228 const base::WeakPtr<HttpServerProperties> http_server_properties_; | |
| 229 CertVerifier* const cert_verifier_; | |
| 230 HttpAuthHandlerFactory* const http_auth_handler_factory_; | |
| 231 | |
| 232 // Not const since it's modified by HttpNetworkSessionPeer for testing. | |
| 233 ProxyService* proxy_service_; | |
| 234 const scoped_refptr<SSLConfigService> ssl_config_service_; | |
| 235 | |
| 236 HttpAuthCache http_auth_cache_; | |
| 237 SSLClientAuthCache ssl_client_auth_cache_; | |
| 238 scoped_ptr<ClientSocketPoolManager> normal_socket_pool_manager_; | |
| 239 scoped_ptr<ClientSocketPoolManager> websocket_socket_pool_manager_; | |
| 240 QuicStreamFactory quic_stream_factory_; | |
| 241 SpdySessionPool spdy_session_pool_; | |
| 242 scoped_ptr<HttpStreamFactory> http_stream_factory_; | |
| 243 scoped_ptr<HttpStreamFactory> http_stream_factory_for_websocket_; | |
| 244 std::set<HttpResponseBodyDrainer*> response_drainers_; | |
| 245 | |
| 246 // TODO(jgraettinger): Remove when Huffman collection is complete. | |
| 247 scoped_ptr<HpackHuffmanAggregator> huffman_aggregator_; | |
| 248 | |
| 249 NextProtoVector next_protos_; | |
| 250 bool enabled_protocols_[NUM_VALID_ALTERNATE_PROTOCOLS]; | |
| 251 | |
| 252 Params params_; | |
| 253 }; | |
| 254 | |
| 255 } // namespace net | |
| 256 | |
| 257 #endif // NET_HTTP_HTTP_NETWORK_SESSION_H_ | |
| OLD | NEW |