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 |