| 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 18 matching lines...) Expand all Loading... |
| 29 | 29 |
| 30 namespace { | 30 namespace { |
| 31 | 31 |
| 32 net::ClientSocketPoolManager* CreateSocketPoolManager( | 32 net::ClientSocketPoolManager* CreateSocketPoolManager( |
| 33 net::HttpNetworkSession::SocketPoolType pool_type, | 33 net::HttpNetworkSession::SocketPoolType pool_type, |
| 34 const net::HttpNetworkSession::Params& params) { | 34 const net::HttpNetworkSession::Params& params) { |
| 35 // TODO(yutak): Differentiate WebSocket pool manager and allow more | 35 // TODO(yutak): Differentiate WebSocket pool manager and allow more |
| 36 // simultaneous connections for WebSockets. | 36 // simultaneous connections for WebSockets. |
| 37 return new net::ClientSocketPoolManagerImpl( | 37 return new net::ClientSocketPoolManagerImpl( |
| 38 params.net_log, | 38 params.net_log, |
| 39 params.client_socket_factory ? | 39 params.client_socket_factory |
| 40 params.client_socket_factory : | 40 ? params.client_socket_factory |
| 41 net::ClientSocketFactory::GetDefaultFactory(), | 41 : net::ClientSocketFactory::GetDefaultFactory(), |
| 42 params.host_resolver, | 42 params.host_resolver, |
| 43 params.cert_verifier, | 43 params.cert_verifier, |
| 44 params.server_bound_cert_service, | 44 params.server_bound_cert_service, |
| 45 params.transport_security_state, | 45 params.transport_security_state, |
| 46 params.cert_transparency_verifier, | 46 params.cert_transparency_verifier, |
| 47 params.ssl_session_cache_shard, | 47 params.ssl_session_cache_shard, |
| 48 params.proxy_service, | 48 params.proxy_service, |
| 49 params.ssl_config_service, | 49 params.ssl_config_service, |
| 50 pool_type); | 50 pool_type); |
| 51 } | 51 } |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 enable_quic_time_based_loss_detection(false), | 87 enable_quic_time_based_loss_detection(false), |
| 88 enable_quic_persist_server_info(false), | 88 enable_quic_persist_server_info(false), |
| 89 quic_clock(NULL), | 89 quic_clock(NULL), |
| 90 quic_random(NULL), | 90 quic_random(NULL), |
| 91 quic_max_packet_length(kDefaultMaxPacketSize), | 91 quic_max_packet_length(kDefaultMaxPacketSize), |
| 92 enable_user_alternate_protocol_ports(false), | 92 enable_user_alternate_protocol_ports(false), |
| 93 quic_crypto_client_stream_factory(NULL) { | 93 quic_crypto_client_stream_factory(NULL) { |
| 94 quic_supported_versions.push_back(QUIC_VERSION_16); | 94 quic_supported_versions.push_back(QUIC_VERSION_16); |
| 95 } | 95 } |
| 96 | 96 |
| 97 HttpNetworkSession::Params::~Params() {} | 97 HttpNetworkSession::Params::~Params() { |
| 98 } |
| 98 | 99 |
| 99 // TODO(mbelshe): Move the socket factories into HttpStreamFactory. | 100 // TODO(mbelshe): Move the socket factories into HttpStreamFactory. |
| 100 HttpNetworkSession::HttpNetworkSession(const Params& params) | 101 HttpNetworkSession::HttpNetworkSession(const Params& params) |
| 101 : net_log_(params.net_log), | 102 : net_log_(params.net_log), |
| 102 network_delegate_(params.network_delegate), | 103 network_delegate_(params.network_delegate), |
| 103 http_server_properties_(params.http_server_properties), | 104 http_server_properties_(params.http_server_properties), |
| 104 cert_verifier_(params.cert_verifier), | 105 cert_verifier_(params.cert_verifier), |
| 105 http_auth_handler_factory_(params.http_auth_handler_factory), | 106 http_auth_handler_factory_(params.http_auth_handler_factory), |
| 106 force_http_pipelining_(params.force_http_pipelining), | 107 force_http_pipelining_(params.force_http_pipelining), |
| 107 proxy_service_(params.proxy_service), | 108 proxy_service_(params.proxy_service), |
| 108 ssl_config_service_(params.ssl_config_service), | 109 ssl_config_service_(params.ssl_config_service), |
| 109 normal_socket_pool_manager_( | 110 normal_socket_pool_manager_( |
| 110 CreateSocketPoolManager(NORMAL_SOCKET_POOL, params)), | 111 CreateSocketPoolManager(NORMAL_SOCKET_POOL, params)), |
| 111 websocket_socket_pool_manager_( | 112 websocket_socket_pool_manager_( |
| 112 CreateSocketPoolManager(WEBSOCKET_SOCKET_POOL, params)), | 113 CreateSocketPoolManager(WEBSOCKET_SOCKET_POOL, params)), |
| 113 quic_stream_factory_(params.host_resolver, | 114 quic_stream_factory_( |
| 114 params.client_socket_factory ? | 115 params.host_resolver, |
| 115 params.client_socket_factory : | 116 params.client_socket_factory |
| 116 net::ClientSocketFactory::GetDefaultFactory(), | 117 ? params.client_socket_factory |
| 117 params.http_server_properties, | 118 : net::ClientSocketFactory::GetDefaultFactory(), |
| 118 params.cert_verifier, | 119 params.http_server_properties, |
| 119 params.quic_crypto_client_stream_factory, | 120 params.cert_verifier, |
| 120 params.quic_random ? params.quic_random : | 121 params.quic_crypto_client_stream_factory, |
| 121 QuicRandom::GetInstance(), | 122 params.quic_random ? params.quic_random : QuicRandom::GetInstance(), |
| 122 params.quic_clock ? params. quic_clock : | 123 params.quic_clock ? params.quic_clock : new QuicClock(), |
| 123 new QuicClock(), | 124 params.quic_max_packet_length, |
| 124 params.quic_max_packet_length, | 125 params.quic_supported_versions, |
| 125 params.quic_supported_versions, | 126 params.enable_quic_port_selection, |
| 126 params.enable_quic_port_selection, | 127 params.enable_quic_pacing, |
| 127 params.enable_quic_pacing, | 128 params.enable_quic_time_based_loss_detection), |
| 128 params.enable_quic_time_based_loss_detection), | |
| 129 spdy_session_pool_(params.host_resolver, | 129 spdy_session_pool_(params.host_resolver, |
| 130 params.ssl_config_service, | 130 params.ssl_config_service, |
| 131 params.http_server_properties, | 131 params.http_server_properties, |
| 132 params.force_spdy_single_domain, | 132 params.force_spdy_single_domain, |
| 133 params.enable_spdy_compression, | 133 params.enable_spdy_compression, |
| 134 params.enable_spdy_ping_based_connection_checking, | 134 params.enable_spdy_ping_based_connection_checking, |
| 135 params.spdy_default_protocol, | 135 params.spdy_default_protocol, |
| 136 params.spdy_stream_initial_recv_window_size, | 136 params.spdy_stream_initial_recv_window_size, |
| 137 params.spdy_initial_max_concurrent_streams, | 137 params.spdy_initial_max_concurrent_streams, |
| 138 params.spdy_max_concurrent_streams_limit, | 138 params.spdy_max_concurrent_streams_limit, |
| 139 params.time_func, | 139 params.time_func, |
| 140 params.trusted_spdy_proxy), | 140 params.trusted_spdy_proxy), |
| 141 http_stream_factory_(new HttpStreamFactoryImpl(this, false)), | 141 http_stream_factory_(new HttpStreamFactoryImpl(this, false)), |
| 142 http_stream_factory_for_websocket_( | 142 http_stream_factory_for_websocket_(new HttpStreamFactoryImpl(this, true)), |
| 143 new HttpStreamFactoryImpl(this, true)), | |
| 144 params_(params) { | 143 params_(params) { |
| 145 DCHECK(proxy_service_); | 144 DCHECK(proxy_service_); |
| 146 DCHECK(ssl_config_service_.get()); | 145 DCHECK(ssl_config_service_.get()); |
| 147 CHECK(http_server_properties_); | 146 CHECK(http_server_properties_); |
| 148 | 147 |
| 149 if (HpackHuffmanAggregator::UseAggregator()) { | 148 if (HpackHuffmanAggregator::UseAggregator()) { |
| 150 huffman_aggregator_.reset(new HpackHuffmanAggregator()); | 149 huffman_aggregator_.reset(new HpackHuffmanAggregator()); |
| 151 } | 150 } |
| 152 } | 151 } |
| 153 | 152 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 173 } | 172 } |
| 174 | 173 |
| 175 SSLClientSocketPool* HttpNetworkSession::GetSSLSocketPool( | 174 SSLClientSocketPool* HttpNetworkSession::GetSSLSocketPool( |
| 176 SocketPoolType pool_type) { | 175 SocketPoolType pool_type) { |
| 177 return GetSocketPoolManager(pool_type)->GetSSLSocketPool(); | 176 return GetSocketPoolManager(pool_type)->GetSSLSocketPool(); |
| 178 } | 177 } |
| 179 | 178 |
| 180 SOCKSClientSocketPool* HttpNetworkSession::GetSocketPoolForSOCKSProxy( | 179 SOCKSClientSocketPool* HttpNetworkSession::GetSocketPoolForSOCKSProxy( |
| 181 SocketPoolType pool_type, | 180 SocketPoolType pool_type, |
| 182 const HostPortPair& socks_proxy) { | 181 const HostPortPair& socks_proxy) { |
| 183 return GetSocketPoolManager(pool_type)->GetSocketPoolForSOCKSProxy( | 182 return GetSocketPoolManager(pool_type) |
| 184 socks_proxy); | 183 ->GetSocketPoolForSOCKSProxy(socks_proxy); |
| 185 } | 184 } |
| 186 | 185 |
| 187 HttpProxyClientSocketPool* HttpNetworkSession::GetSocketPoolForHTTPProxy( | 186 HttpProxyClientSocketPool* HttpNetworkSession::GetSocketPoolForHTTPProxy( |
| 188 SocketPoolType pool_type, | 187 SocketPoolType pool_type, |
| 189 const HostPortPair& http_proxy) { | 188 const HostPortPair& http_proxy) { |
| 190 return GetSocketPoolManager(pool_type)->GetSocketPoolForHTTPProxy(http_proxy); | 189 return GetSocketPoolManager(pool_type)->GetSocketPoolForHTTPProxy(http_proxy); |
| 191 } | 190 } |
| 192 | 191 |
| 193 SSLClientSocketPool* HttpNetworkSession::GetSocketPoolForSSLWithProxy( | 192 SSLClientSocketPool* HttpNetworkSession::GetSocketPoolForSSLWithProxy( |
| 194 SocketPoolType pool_type, | 193 SocketPoolType pool_type, |
| 195 const HostPortPair& proxy_server) { | 194 const HostPortPair& proxy_server) { |
| 196 return GetSocketPoolManager(pool_type)->GetSocketPoolForSSLWithProxy( | 195 return GetSocketPoolManager(pool_type) |
| 197 proxy_server); | 196 ->GetSocketPoolForSSLWithProxy(proxy_server); |
| 198 } | 197 } |
| 199 | 198 |
| 200 base::Value* HttpNetworkSession::SocketPoolInfoToValue() const { | 199 base::Value* HttpNetworkSession::SocketPoolInfoToValue() const { |
| 201 // TODO(yutak): Should merge values from normal pools and WebSocket pools. | 200 // TODO(yutak): Should merge values from normal pools and WebSocket pools. |
| 202 return normal_socket_pool_manager_->SocketPoolInfoToValue(); | 201 return normal_socket_pool_manager_->SocketPoolInfoToValue(); |
| 203 } | 202 } |
| 204 | 203 |
| 205 base::Value* HttpNetworkSession::SpdySessionPoolInfoToValue() const { | 204 base::Value* HttpNetworkSession::SpdySessionPoolInfoToValue() const { |
| 206 return spdy_session_pool_.SpdySessionPoolInfoToValue(); | 205 return spdy_session_pool_.SpdySessionPoolInfoToValue(); |
| 207 } | 206 } |
| 208 | 207 |
| 209 base::Value* HttpNetworkSession::QuicInfoToValue() const { | 208 base::Value* HttpNetworkSession::QuicInfoToValue() const { |
| 210 base::DictionaryValue* dict = new base::DictionaryValue(); | 209 base::DictionaryValue* dict = new base::DictionaryValue(); |
| 211 dict->Set("sessions", quic_stream_factory_.QuicStreamFactoryInfoToValue()); | 210 dict->Set("sessions", quic_stream_factory_.QuicStreamFactoryInfoToValue()); |
| 212 dict->SetBoolean("quic_enabled", params_.enable_quic); | 211 dict->SetBoolean("quic_enabled", params_.enable_quic); |
| 213 dict->SetBoolean("quic_enabled_https", params_.enable_quic_https); | 212 dict->SetBoolean("quic_enabled_https", params_.enable_quic_https); |
| 214 dict->SetBoolean("enable_quic_port_selection", | 213 dict->SetBoolean("enable_quic_port_selection", |
| 215 params_.enable_quic_port_selection); | 214 params_.enable_quic_port_selection); |
| 216 dict->SetBoolean("enable_quic_pacing", | 215 dict->SetBoolean("enable_quic_pacing", params_.enable_quic_pacing); |
| 217 params_.enable_quic_pacing); | |
| 218 dict->SetBoolean("enable_quic_time_based_loss_detection", | 216 dict->SetBoolean("enable_quic_time_based_loss_detection", |
| 219 params_.enable_quic_time_based_loss_detection); | 217 params_.enable_quic_time_based_loss_detection); |
| 220 dict->SetBoolean("enable_quic_persist_server_info", | 218 dict->SetBoolean("enable_quic_persist_server_info", |
| 221 params_.enable_quic_persist_server_info); | 219 params_.enable_quic_persist_server_info); |
| 222 dict->SetString("origin_to_force_quic_on", | 220 dict->SetString("origin_to_force_quic_on", |
| 223 params_.origin_to_force_quic_on.ToString()); | 221 params_.origin_to_force_quic_on.ToString()); |
| 224 return dict; | 222 return dict; |
| 225 } | 223 } |
| 226 | 224 |
| 227 void HttpNetworkSession::CloseAllConnections() { | 225 void HttpNetworkSession::CloseAllConnections() { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 245 case WEBSOCKET_SOCKET_POOL: | 243 case WEBSOCKET_SOCKET_POOL: |
| 246 return websocket_socket_pool_manager_.get(); | 244 return websocket_socket_pool_manager_.get(); |
| 247 default: | 245 default: |
| 248 NOTREACHED(); | 246 NOTREACHED(); |
| 249 break; | 247 break; |
| 250 } | 248 } |
| 251 return NULL; | 249 return NULL; |
| 252 } | 250 } |
| 253 | 251 |
| 254 } // namespace net | 252 } // namespace net |
| OLD | NEW |