OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/http/http_network_session.h" | 5 #include "net/http/http_network_session.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/debug/stack_trace.h" | 10 #include "base/debug/stack_trace.h" |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
73 testing_fixed_http_port(0), | 73 testing_fixed_http_port(0), |
74 testing_fixed_https_port(0), | 74 testing_fixed_https_port(0), |
75 force_spdy_single_domain(false), | 75 force_spdy_single_domain(false), |
76 enable_spdy_compression(true), | 76 enable_spdy_compression(true), |
77 enable_spdy_ping_based_connection_checking(true), | 77 enable_spdy_ping_based_connection_checking(true), |
78 spdy_default_protocol(kProtoUnknown), | 78 spdy_default_protocol(kProtoUnknown), |
79 spdy_stream_initial_recv_window_size(0), | 79 spdy_stream_initial_recv_window_size(0), |
80 spdy_initial_max_concurrent_streams(0), | 80 spdy_initial_max_concurrent_streams(0), |
81 spdy_max_concurrent_streams_limit(0), | 81 spdy_max_concurrent_streams_limit(0), |
82 time_func(&base::TimeTicks::Now), | 82 time_func(&base::TimeTicks::Now), |
83 force_spdy_over_ssl(true), | |
84 force_spdy_always(false), | |
85 use_alternate_protocols(false), | |
83 enable_quic(false), | 86 enable_quic(false), |
84 enable_quic_https(false), | 87 enable_quic_https(false), |
85 enable_quic_port_selection(true), | 88 enable_quic_port_selection(true), |
86 enable_quic_pacing(false), | 89 enable_quic_pacing(false), |
87 enable_quic_time_based_loss_detection(false), | 90 enable_quic_time_based_loss_detection(false), |
88 enable_quic_persist_server_info(false), | 91 enable_quic_persist_server_info(false), |
89 quic_clock(NULL), | 92 quic_clock(NULL), |
90 quic_random(NULL), | 93 quic_random(NULL), |
91 quic_max_packet_length(kDefaultMaxPacketSize), | 94 quic_max_packet_length(kDefaultMaxPacketSize), |
92 enable_user_alternate_protocol_ports(false), | 95 enable_user_alternate_protocol_ports(false), |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
139 params.time_func, | 142 params.time_func, |
140 params.trusted_spdy_proxy), | 143 params.trusted_spdy_proxy), |
141 http_stream_factory_(new HttpStreamFactoryImpl(this, false)), | 144 http_stream_factory_(new HttpStreamFactoryImpl(this, false)), |
142 http_stream_factory_for_websocket_( | 145 http_stream_factory_for_websocket_( |
143 new HttpStreamFactoryImpl(this, true)), | 146 new HttpStreamFactoryImpl(this, true)), |
144 params_(params) { | 147 params_(params) { |
145 DCHECK(proxy_service_); | 148 DCHECK(proxy_service_); |
146 DCHECK(ssl_config_service_.get()); | 149 DCHECK(ssl_config_service_.get()); |
147 CHECK(http_server_properties_); | 150 CHECK(http_server_properties_); |
148 | 151 |
152 for (int i = ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION; | |
Ryan Hamilton
2014/05/22 17:30:45
nit: I think you'll need to use size_t here (or so
mmenke
2014/05/22 20:12:16
I'm pretty sure enums are signed on all platforms.
| |
153 i <= ALTERNATE_PROTOCOL_MAXIMUM_VALID_VERSION; ++i) { | |
154 enabled_protocols_[i - ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION] = false; | |
155 } | |
156 | |
157 // TODO(rtenneti): bug 116575 - consider combining the NextProto and | |
158 // AlternateProtocol. | |
159 for (std::vector<NextProto>::const_iterator it = params_.next_protos.begin(); | |
160 it != params_.next_protos.end(); ++it) { | |
161 NextProto proto = *it; | |
162 | |
163 // Add the protocol to the TLS next protocol list, except for QUIC | |
164 // since it uses UDP. | |
165 if (proto != kProtoQUIC1SPDY3) { | |
166 next_protos_.push_back(SSLClientSocket::NextProtoToString(proto)); | |
167 } | |
168 | |
169 // Enable the corresponding alternate protocol, except for HTTP | |
170 // which has not corresponding alternative. | |
171 if (proto != kProtoHTTP11) { | |
172 AlternateProtocol alternate = AlternateProtocolFromNextProto(proto); | |
173 if (!IsAlternateProtocolValid(alternate)) { | |
174 NOTREACHED() << "Invalid next proto: " << proto; | |
175 continue; | |
176 } | |
177 enabled_protocols_[alternate - ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION] = | |
178 true; | |
179 } | |
180 } | |
181 | |
149 if (HpackHuffmanAggregator::UseAggregator()) { | 182 if (HpackHuffmanAggregator::UseAggregator()) { |
150 huffman_aggregator_.reset(new HpackHuffmanAggregator()); | 183 huffman_aggregator_.reset(new HpackHuffmanAggregator()); |
151 } | 184 } |
152 } | 185 } |
153 | 186 |
154 HttpNetworkSession::~HttpNetworkSession() { | 187 HttpNetworkSession::~HttpNetworkSession() { |
155 STLDeleteElements(&response_drainers_); | 188 STLDeleteElements(&response_drainers_); |
156 spdy_session_pool_.CloseAllSessions(); | 189 spdy_session_pool_.CloseAllSessions(); |
157 } | 190 } |
158 | 191 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
230 spdy_session_pool_.CloseCurrentSessions(ERR_ABORTED); | 263 spdy_session_pool_.CloseCurrentSessions(ERR_ABORTED); |
231 quic_stream_factory_.CloseAllSessions(ERR_ABORTED); | 264 quic_stream_factory_.CloseAllSessions(ERR_ABORTED); |
232 } | 265 } |
233 | 266 |
234 void HttpNetworkSession::CloseIdleConnections() { | 267 void HttpNetworkSession::CloseIdleConnections() { |
235 normal_socket_pool_manager_->CloseIdleSockets(); | 268 normal_socket_pool_manager_->CloseIdleSockets(); |
236 websocket_socket_pool_manager_->CloseIdleSockets(); | 269 websocket_socket_pool_manager_->CloseIdleSockets(); |
237 spdy_session_pool_.CloseCurrentIdleSessions(); | 270 spdy_session_pool_.CloseCurrentIdleSessions(); |
238 } | 271 } |
239 | 272 |
273 bool HttpNetworkSession::IsProtocolEnabled(AlternateProtocol protocol) const { | |
274 DCHECK(IsAlternateProtocolValid(protocol)); | |
275 return enabled_protocols_[ | |
276 protocol - ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION]; | |
277 } | |
278 | |
279 void HttpNetworkSession::GetNextProtos( | |
280 std::vector<std::string>* next_protos) const { | |
281 if (HttpStreamFactory::spdy_enabled()) { | |
282 *next_protos = next_protos_; | |
283 } else { | |
284 next_protos->clear(); | |
285 } | |
mmenke
2014/05/22 14:51:12
Note: This is a behavior change: It used to be w
mmenke
2014/05/22 14:51:12
Another behavior change: If spdy is disabled and
Ryan Hamilton
2014/05/22 17:30:45
Oh, I see. That explains why this method doesn't s
mmenke
2014/05/22 20:12:16
Yea, I thought this option was cleaner than having
| |
286 } | |
287 | |
288 bool HttpNetworkSession::HasSpdyExclusion( | |
289 HostPortPair host_port_pair) const { | |
290 return params_.forced_spdy_exclusions.find(host_port_pair) != | |
291 params_.forced_spdy_exclusions.end(); | |
292 } | |
293 | |
240 ClientSocketPoolManager* HttpNetworkSession::GetSocketPoolManager( | 294 ClientSocketPoolManager* HttpNetworkSession::GetSocketPoolManager( |
241 SocketPoolType pool_type) { | 295 SocketPoolType pool_type) { |
242 switch (pool_type) { | 296 switch (pool_type) { |
243 case NORMAL_SOCKET_POOL: | 297 case NORMAL_SOCKET_POOL: |
244 return normal_socket_pool_manager_.get(); | 298 return normal_socket_pool_manager_.get(); |
245 case WEBSOCKET_SOCKET_POOL: | 299 case WEBSOCKET_SOCKET_POOL: |
246 return websocket_socket_pool_manager_.get(); | 300 return websocket_socket_pool_manager_.get(); |
247 default: | 301 default: |
248 NOTREACHED(); | 302 NOTREACHED(); |
249 break; | 303 break; |
250 } | 304 } |
251 return NULL; | 305 return NULL; |
252 } | 306 } |
253 | 307 |
254 } // namespace net | 308 } // namespace net |
OLD | NEW |