| 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/socket/client_socket_pool_manager.h" | 5 #include "net/socket/client_socket_pool_manager.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 } | 149 } |
| 150 | 150 |
| 151 bool ignore_limits = (request_load_flags & LOAD_IGNORE_LIMITS) != 0; | 151 bool ignore_limits = (request_load_flags & LOAD_IGNORE_LIMITS) != 0; |
| 152 if (!proxy_info.is_direct()) { | 152 if (!proxy_info.is_direct()) { |
| 153 ProxyServer proxy_server = proxy_info.proxy_server(); | 153 ProxyServer proxy_server = proxy_info.proxy_server(); |
| 154 proxy_host_port.reset(new HostPortPair(proxy_server.host_port_pair())); | 154 proxy_host_port.reset(new HostPortPair(proxy_server.host_port_pair())); |
| 155 scoped_refptr<TransportSocketParams> proxy_tcp_params( | 155 scoped_refptr<TransportSocketParams> proxy_tcp_params( |
| 156 new TransportSocketParams( | 156 new TransportSocketParams( |
| 157 *proxy_host_port, | 157 *proxy_host_port, |
| 158 disable_resolver_cache, | 158 disable_resolver_cache, |
| 159 ignore_limits, | |
| 160 resolution_callback, | 159 resolution_callback, |
| 161 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); | 160 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); |
| 162 | 161 |
| 163 if (proxy_info.is_http() || proxy_info.is_https()) { | 162 if (proxy_info.is_http() || proxy_info.is_https()) { |
| 164 std::string user_agent; | 163 std::string user_agent; |
| 165 request_extra_headers.GetHeader(HttpRequestHeaders::kUserAgent, | 164 request_extra_headers.GetHeader(HttpRequestHeaders::kUserAgent, |
| 166 &user_agent); | 165 &user_agent); |
| 167 scoped_refptr<SSLSocketParams> ssl_params; | 166 scoped_refptr<SSLSocketParams> ssl_params; |
| 168 if (proxy_info.is_https()) { | 167 if (proxy_info.is_https()) { |
| 169 // Combine connect and write for SSL sockets in TCP FastOpen | 168 // Combine connect and write for SSL sockets in TCP FastOpen |
| 170 // field trial. | 169 // field trial. |
| 171 TransportSocketParams::CombineConnectAndWritePolicy | 170 TransportSocketParams::CombineConnectAndWritePolicy |
| 172 combine_connect_and_write = | 171 combine_connect_and_write = |
| 173 session->params().enable_tcp_fast_open_for_ssl ? | 172 session->params().enable_tcp_fast_open_for_ssl ? |
| 174 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DESIRED : | 173 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DESIRED : |
| 175 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT; | 174 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT; |
| 176 proxy_tcp_params = new TransportSocketParams(*proxy_host_port, | 175 proxy_tcp_params = new TransportSocketParams(*proxy_host_port, |
| 177 disable_resolver_cache, | 176 disable_resolver_cache, |
| 178 ignore_limits, | |
| 179 resolution_callback, | 177 resolution_callback, |
| 180 combine_connect_and_write); | 178 combine_connect_and_write); |
| 181 // Set ssl_params, and unset proxy_tcp_params | 179 // Set ssl_params, and unset proxy_tcp_params |
| 182 ssl_params = | 180 ssl_params = |
| 183 new SSLSocketParams(proxy_tcp_params, NULL, NULL, | 181 new SSLSocketParams(proxy_tcp_params, NULL, NULL, |
| 184 *proxy_host_port.get(), ssl_config_for_proxy, | 182 *proxy_host_port.get(), ssl_config_for_proxy, |
| 185 PRIVACY_MODE_DISABLED, load_flags, expect_spdy); | 183 PRIVACY_MODE_DISABLED, load_flags, expect_spdy); |
| 186 proxy_tcp_params = NULL; | 184 proxy_tcp_params = NULL; |
| 187 } | 185 } |
| 188 | 186 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 if (proxy_info.is_direct()) { | 220 if (proxy_info.is_direct()) { |
| 223 // Setup TCP params if non-proxied SSL connection. | 221 // Setup TCP params if non-proxied SSL connection. |
| 224 // Combine connect and write for SSL sockets in TCP FastOpen field trial. | 222 // Combine connect and write for SSL sockets in TCP FastOpen field trial. |
| 225 TransportSocketParams::CombineConnectAndWritePolicy | 223 TransportSocketParams::CombineConnectAndWritePolicy |
| 226 combine_connect_and_write = | 224 combine_connect_and_write = |
| 227 session->params().enable_tcp_fast_open_for_ssl ? | 225 session->params().enable_tcp_fast_open_for_ssl ? |
| 228 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DESIRED : | 226 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DESIRED : |
| 229 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT; | 227 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT; |
| 230 ssl_tcp_params = new TransportSocketParams(origin_host_port, | 228 ssl_tcp_params = new TransportSocketParams(origin_host_port, |
| 231 disable_resolver_cache, | 229 disable_resolver_cache, |
| 232 ignore_limits, | |
| 233 resolution_callback, | 230 resolution_callback, |
| 234 combine_connect_and_write); | 231 combine_connect_and_write); |
| 235 } | 232 } |
| 236 scoped_refptr<SSLSocketParams> ssl_params = new SSLSocketParams( | 233 scoped_refptr<SSLSocketParams> ssl_params = new SSLSocketParams( |
| 237 ssl_tcp_params, socks_params, http_proxy_params, origin_host_port, | 234 ssl_tcp_params, socks_params, http_proxy_params, origin_host_port, |
| 238 ssl_config_for_origin, privacy_mode, load_flags, expect_spdy); | 235 ssl_config_for_origin, privacy_mode, load_flags, expect_spdy); |
| 239 SSLClientSocketPool* ssl_pool = NULL; | 236 SSLClientSocketPool* ssl_pool = NULL; |
| 240 if (proxy_info.is_direct()) { | 237 if (proxy_info.is_direct()) { |
| 241 ssl_pool = session->GetSSLSocketPool(socket_pool_type); | 238 ssl_pool = session->GetSSLSocketPool(socket_pool_type); |
| 242 } else { | 239 } else { |
| 243 ssl_pool = session->GetSocketPoolForSSLWithProxy(socket_pool_type, | 240 ssl_pool = session->GetSocketPoolForSSLWithProxy(socket_pool_type, |
| 244 *proxy_host_port); | 241 *proxy_host_port); |
| 245 } | 242 } |
| 246 | 243 |
| 247 if (num_preconnect_streams) { | 244 if (num_preconnect_streams) { |
| 248 RequestSocketsForPool(ssl_pool, connection_group, ssl_params, | 245 RequestSocketsForPool(ssl_pool, connection_group, ssl_params, |
| 249 num_preconnect_streams, net_log); | 246 num_preconnect_streams, net_log); |
| 250 return OK; | 247 return OK; |
| 251 } | 248 } |
| 252 | 249 |
| 253 return socket_handle->Init(connection_group, ssl_params, | 250 return socket_handle->Init(connection_group, ssl_params, request_priority, |
| 254 request_priority, callback, ssl_pool, | 251 ignore_limits, callback, ssl_pool, net_log); |
| 255 net_log); | |
| 256 } | 252 } |
| 257 | 253 |
| 258 // Finally, get the connection started. | 254 // Finally, get the connection started. |
| 259 | 255 |
| 260 if (proxy_info.is_http() || proxy_info.is_https()) { | 256 if (proxy_info.is_http() || proxy_info.is_https()) { |
| 261 HttpProxyClientSocketPool* pool = | 257 HttpProxyClientSocketPool* pool = |
| 262 session->GetSocketPoolForHTTPProxy(socket_pool_type, *proxy_host_port); | 258 session->GetSocketPoolForHTTPProxy(socket_pool_type, *proxy_host_port); |
| 263 if (num_preconnect_streams) { | 259 if (num_preconnect_streams) { |
| 264 RequestSocketsForPool(pool, connection_group, http_proxy_params, | 260 RequestSocketsForPool(pool, connection_group, http_proxy_params, |
| 265 num_preconnect_streams, net_log); | 261 num_preconnect_streams, net_log); |
| 266 return OK; | 262 return OK; |
| 267 } | 263 } |
| 268 | 264 |
| 269 return socket_handle->Init(connection_group, http_proxy_params, | 265 return socket_handle->Init(connection_group, http_proxy_params, |
| 270 request_priority, callback, | 266 request_priority, ignore_limits, callback, pool, |
| 271 pool, net_log); | 267 net_log); |
| 272 } | 268 } |
| 273 | 269 |
| 274 if (proxy_info.is_socks()) { | 270 if (proxy_info.is_socks()) { |
| 275 SOCKSClientSocketPool* pool = | 271 SOCKSClientSocketPool* pool = |
| 276 session->GetSocketPoolForSOCKSProxy(socket_pool_type, *proxy_host_port); | 272 session->GetSocketPoolForSOCKSProxy(socket_pool_type, *proxy_host_port); |
| 277 if (num_preconnect_streams) { | 273 if (num_preconnect_streams) { |
| 278 RequestSocketsForPool(pool, connection_group, socks_params, | 274 RequestSocketsForPool(pool, connection_group, socks_params, |
| 279 num_preconnect_streams, net_log); | 275 num_preconnect_streams, net_log); |
| 280 return OK; | 276 return OK; |
| 281 } | 277 } |
| 282 | 278 |
| 283 return socket_handle->Init(connection_group, socks_params, | 279 return socket_handle->Init(connection_group, socks_params, request_priority, |
| 284 request_priority, callback, pool, | 280 ignore_limits, callback, pool, net_log); |
| 285 net_log); | |
| 286 } | 281 } |
| 287 | 282 |
| 288 DCHECK(proxy_info.is_direct()); | 283 DCHECK(proxy_info.is_direct()); |
| 289 scoped_refptr<TransportSocketParams> tcp_params = | 284 scoped_refptr<TransportSocketParams> tcp_params = |
| 290 new TransportSocketParams( | 285 new TransportSocketParams( |
| 291 origin_host_port, | 286 origin_host_port, |
| 292 disable_resolver_cache, | 287 disable_resolver_cache, |
| 293 ignore_limits, | |
| 294 resolution_callback, | 288 resolution_callback, |
| 295 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT); | 289 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT); |
| 296 TransportClientSocketPool* pool = | 290 TransportClientSocketPool* pool = |
| 297 session->GetTransportSocketPool(socket_pool_type); | 291 session->GetTransportSocketPool(socket_pool_type); |
| 298 if (num_preconnect_streams) { | 292 if (num_preconnect_streams) { |
| 299 RequestSocketsForPool(pool, connection_group, tcp_params, | 293 RequestSocketsForPool(pool, connection_group, tcp_params, |
| 300 num_preconnect_streams, net_log); | 294 num_preconnect_streams, net_log); |
| 301 return OK; | 295 return OK; |
| 302 } | 296 } |
| 303 | 297 |
| 304 return socket_handle->Init(connection_group, tcp_params, | 298 return socket_handle->Init(connection_group, tcp_params, request_priority, |
| 305 request_priority, callback, | 299 ignore_limits, callback, pool, net_log); |
| 306 pool, net_log); | |
| 307 } | 300 } |
| 308 | 301 |
| 309 } // namespace | 302 } // namespace |
| 310 | 303 |
| 311 ClientSocketPoolManager::ClientSocketPoolManager() {} | 304 ClientSocketPoolManager::ClientSocketPoolManager() {} |
| 312 ClientSocketPoolManager::~ClientSocketPoolManager() {} | 305 ClientSocketPoolManager::~ClientSocketPoolManager() {} |
| 313 | 306 |
| 314 // static | 307 // static |
| 315 int ClientSocketPoolManager::max_sockets_per_pool( | 308 int ClientSocketPoolManager::max_sockets_per_pool( |
| 316 HttpNetworkSession::SocketPoolType pool_type) { | 309 HttpNetworkSession::SocketPoolType pool_type) { |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 int num_preconnect_streams) { | 477 int num_preconnect_streams) { |
| 485 return InitSocketPoolHelper( | 478 return InitSocketPoolHelper( |
| 486 group_type, endpoint, request_extra_headers, request_load_flags, | 479 group_type, endpoint, request_extra_headers, request_load_flags, |
| 487 request_priority, session, proxy_info, expect_spdy, ssl_config_for_origin, | 480 request_priority, session, proxy_info, expect_spdy, ssl_config_for_origin, |
| 488 ssl_config_for_proxy, /*force_tunnel=*/false, privacy_mode, net_log, | 481 ssl_config_for_proxy, /*force_tunnel=*/false, privacy_mode, net_log, |
| 489 num_preconnect_streams, NULL, HttpNetworkSession::NORMAL_SOCKET_POOL, | 482 num_preconnect_streams, NULL, HttpNetworkSession::NORMAL_SOCKET_POOL, |
| 490 OnHostResolutionCallback(), CompletionCallback()); | 483 OnHostResolutionCallback(), CompletionCallback()); |
| 491 } | 484 } |
| 492 | 485 |
| 493 } // namespace net | 486 } // namespace net |
| OLD | NEW |