Chromium Code Reviews| 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 |