Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(522)

Side by Side Diff: net/socket/client_socket_pool_manager.cc

Issue 14471023: Refactor pooled socket request code to prepare for implementation of pretend-to-preconnect. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: don't overload SSLSocketParams c-tor Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/socket/client_socket_pool.h ('k') | net/socket/ssl_client_socket_pool.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 // http://crbug.com/44501 for details about proxy server connection limits. 57 // http://crbug.com/44501 for details about proxy server connection limits.
58 int g_max_sockets_per_proxy_server[] = { 58 int g_max_sockets_per_proxy_server[] = {
59 kDefaultMaxSocketsPerProxyServer, // NORMAL_SOCKET_POOL 59 kDefaultMaxSocketsPerProxyServer, // NORMAL_SOCKET_POOL
60 kDefaultMaxSocketsPerProxyServer // WEBSOCKET_SOCKET_POOL 60 kDefaultMaxSocketsPerProxyServer // WEBSOCKET_SOCKET_POOL
61 }; 61 };
62 62
63 COMPILE_ASSERT(arraysize(g_max_sockets_per_proxy_server) == 63 COMPILE_ASSERT(arraysize(g_max_sockets_per_proxy_server) ==
64 HttpNetworkSession::NUM_SOCKET_POOL_TYPES, 64 HttpNetworkSession::NUM_SOCKET_POOL_TYPES,
65 max_sockets_per_proxy_server_length_mismatch); 65 max_sockets_per_proxy_server_length_mismatch);
66 66
67 // The meat of the implementation for the InitSocketHandleForHttpRequest, 67 std::string ConnectionGroupForUrl(const GURL& request_url,
68 // InitSocketHandleForRawConnect and PreconnectSocketsForHttpRequest methods. 68 bool force_ssl,
69 int InitSocketPoolHelper(const GURL& request_url, 69 const HostPortPair& host_port,
70 const HttpRequestHeaders& request_extra_headers, 70 uint16 ssl_version_max,
71 int request_load_flags, 71 ProxyServer::Scheme proxy_scheme) {
72 RequestPriority request_priority,
73 HttpNetworkSession* session,
74 const ProxyInfo& proxy_info,
75 bool force_spdy_over_ssl,
76 bool want_spdy_over_npn,
77 const SSLConfig& ssl_config_for_origin,
78 const SSLConfig& ssl_config_for_proxy,
79 bool force_tunnel,
80 const BoundNetLog& net_log,
81 int num_preconnect_streams,
82 ClientSocketHandle* socket_handle,
83 const OnHostResolutionCallback& resolution_callback,
84 const CompletionCallback& callback) {
85 scoped_refptr<TransportSocketParams> tcp_params;
86 scoped_refptr<HttpProxySocketParams> http_proxy_params;
87 scoped_refptr<SOCKSSocketParams> socks_params;
88 scoped_ptr<HostPortPair> proxy_host_port;
89
90 bool using_ssl = request_url.SchemeIs("https") || force_spdy_over_ssl;
91
92 HostPortPair origin_host_port =
93 HostPortPair(request_url.HostNoBrackets(),
94 request_url.EffectiveIntPort());
95
96 if (!using_ssl && session->params().testing_fixed_http_port != 0) {
97 origin_host_port.set_port(session->params().testing_fixed_http_port);
98 } else if (using_ssl && session->params().testing_fixed_https_port != 0) {
99 origin_host_port.set_port(session->params().testing_fixed_https_port);
100 }
101
102 bool disable_resolver_cache =
103 request_load_flags & LOAD_BYPASS_CACHE ||
104 request_load_flags & LOAD_VALIDATE_CACHE ||
105 request_load_flags & LOAD_DISABLE_CACHE;
106
107 int load_flags = request_load_flags;
108 if (session->params().ignore_certificate_errors)
109 load_flags |= LOAD_IGNORE_ALL_CERT_ERRORS;
110
111 // Build the string used to uniquely identify connections of this type. 72 // Build the string used to uniquely identify connections of this type.
112 // Determine the host and port to connect to. 73 // Determine the host and port to connect to.
113 std::string connection_group = origin_host_port.ToString(); 74 std::string connection_group = host_port.ToString();
114 DCHECK(!connection_group.empty()); 75 DCHECK(!connection_group.empty());
115 if (request_url.SchemeIs("ftp")) { 76 if (request_url.SchemeIs("ftp")) {
116 // Combining FTP with forced SPDY over SSL would be a "path to madness".
117 // Make sure we never do that.
118 DCHECK(!using_ssl);
119 connection_group = "ftp/" + connection_group; 77 connection_group = "ftp/" + connection_group;
120 } 78 } else if (force_ssl || request_url.SchemeIs("https")) {
121 if (using_ssl) {
122 // All connections in a group should use the same SSLConfig settings. 79 // All connections in a group should use the same SSLConfig settings.
123 // Encode version_max in the connection group's name, unless it's the 80 // Encode version_max in the connection group's name, unless it's the
124 // default version_max. (We want the common case to use the shortest 81 // default version_max. (We want the common case to use the shortest
125 // encoding). A version_max of TLS 1.1 is encoded as "ssl(max:3.2)/" 82 // encoding). A version_max of TLS 1.1 is encoded as "ssl(max:3.2)/"
126 // rather than "tlsv1.1/" because the actual protocol version, which 83 // rather than "tlsv1.1/" because the actual protocol version, which
127 // is selected by the server, may not be TLS 1.1. Do not encode 84 // is selected by the server, may not be TLS 1.1. Do not encode
128 // version_min in the connection group's name because version_min 85 // version_min in the connection group's name because version_min
129 // should be the same for all connections, whereas version_max may 86 // should be the same for all connections, whereas version_max may
130 // change for version fallbacks. 87 // change for version fallbacks.
131 std::string prefix = "ssl/"; 88 std::string prefix = "ssl/";
132 if (ssl_config_for_origin.version_max != 89 if (ssl_version_max !=
133 SSLConfigService::default_version_max()) { 90 SSLConfigService::default_version_max()) {
134 switch (ssl_config_for_origin.version_max) { 91 switch (ssl_version_max) {
135 case SSL_PROTOCOL_VERSION_TLS1_2: 92 case SSL_PROTOCOL_VERSION_TLS1_2:
136 prefix = "ssl(max:3.3)/"; 93 prefix = "ssl(max:3.3)/";
137 break; 94 break;
138 case SSL_PROTOCOL_VERSION_TLS1_1: 95 case SSL_PROTOCOL_VERSION_TLS1_1:
139 prefix = "ssl(max:3.2)/"; 96 prefix = "ssl(max:3.2)/";
140 break; 97 break;
141 case SSL_PROTOCOL_VERSION_TLS1: 98 case SSL_PROTOCOL_VERSION_TLS1:
142 prefix = "ssl(max:3.1)/"; 99 prefix = "ssl(max:3.1)/";
143 break; 100 break;
144 case SSL_PROTOCOL_VERSION_SSL3: 101 case SSL_PROTOCOL_VERSION_SSL3:
145 prefix = "sslv3/"; 102 prefix = "sslv3/";
146 break; 103 break;
147 default: 104 default:
148 CHECK(false); 105 CHECK(false);
149 break; 106 break;
150 } 107 }
151 } 108 }
152 connection_group = prefix + connection_group; 109 connection_group = prefix + connection_group;
153 } 110 }
154 111
155 bool ignore_limits = (request_load_flags & LOAD_IGNORE_LIMITS) != 0; 112 char socks_version = 0;
113 if (proxy_scheme == ProxyServer::SCHEME_SOCKS4)
114 socks_version = '4';
115 else if (proxy_scheme == ProxyServer::SCHEME_SOCKS5)
116 socks_version = '5';
117
118 if (socks_version)
119 connection_group = base::StringPrintf("socks%c/%s", socks_version,
120 connection_group.c_str());
121
122 return connection_group;
123 }
124
125 HostPortPair HostPortPairFromUrlForSession(const GURL& request_url,
126 bool using_ssl,
127 HttpNetworkSession* session) {
128 HostPortPair host_port(request_url.HostNoBrackets(),
129 request_url.EffectiveIntPort());
130
131 if (!using_ssl && session->params().testing_fixed_http_port != 0) {
132 host_port.set_port(session->params().testing_fixed_http_port);
133 } else if (using_ssl && session->params().testing_fixed_https_port != 0) {
134 host_port.set_port(session->params().testing_fixed_https_port);
135 }
136
137 return host_port;
138 }
139
140 template<typename Callback>
141 int
142 InvokeWithSocketParamsAndPool(
143 const GURL& request_url,
144 const HttpRequestHeaders& request_extra_headers,
145 int request_load_flags,
146 RequestPriority request_priority,
147 HttpNetworkSession* session,
148 const ProxyInfo& proxy_info,
149 bool force_spdy_over_ssl,
150 bool want_spdy_over_npn,
151 const SSLConfig& ssl_config_for_origin,
152 const SSLConfig& ssl_config_for_proxy,
153 bool force_tunnel,
154 const OnHostResolutionCallback& resolution_callback,
155 const Callback& callback) {
156 bool using_ssl = request_url.SchemeIs("https") || force_spdy_over_ssl;
157 // Combining FTP with forced SPDY over SSL would be a "path to madness".
158 // Make sure we never do that.
159 DCHECK(!(using_ssl && request_url.SchemeIs("ftp")));
160
161 HostPortPair origin_host_port =
162 HostPortPairFromUrlForSession(request_url, using_ssl, session);
163
164 ProxyServer::Scheme proxy_scheme = proxy_info.proxy_server().scheme();
165 std::string connection_group =
166 ConnectionGroupForUrl(request_url, force_spdy_over_ssl, origin_host_port,
167 using_ssl ? ssl_config_for_origin.version_max : 0,
168 proxy_scheme);
169
170 scoped_ptr<HostPortPair> proxy_host_port;
171 HostPortPair* target_host_port = NULL;
156 if (proxy_info.is_direct()) { 172 if (proxy_info.is_direct()) {
157 tcp_params = new TransportSocketParams(origin_host_port, 173 target_host_port = &origin_host_port;
174 } else {
175 proxy_host_port.reset(
176 new HostPortPair(proxy_info.proxy_server().host_port_pair()));
177 target_host_port = proxy_host_port.get();
178 }
179
180 SSLClientSocketPool* ssl_pool = NULL;
181 if (using_ssl) {
182 if (proxy_info.is_direct())
183 ssl_pool = session->GetSSLSocketPool(
184 HttpNetworkSession::NORMAL_SOCKET_POOL);
185 else
186 ssl_pool = session->GetSocketPoolForSSLWithProxy(
187 HttpNetworkSession::NORMAL_SOCKET_POOL,
188 *proxy_host_port);
189 }
190
191 int load_flags = request_load_flags;
192 if (session->params().ignore_certificate_errors)
193 load_flags |= LOAD_IGNORE_ALL_CERT_ERRORS;
194
195 scoped_refptr<TransportSocketParams> tcp_params;
196 {
197 bool disable_resolver_cache =
198 request_load_flags & LOAD_BYPASS_CACHE ||
199 request_load_flags & LOAD_VALIDATE_CACHE ||
200 request_load_flags & LOAD_DISABLE_CACHE;
201 bool ignore_limits = (request_load_flags & LOAD_IGNORE_LIMITS) != 0;
202 tcp_params = new TransportSocketParams(*target_host_port,
158 request_priority, 203 request_priority,
159 disable_resolver_cache, 204 disable_resolver_cache,
160 ignore_limits, 205 ignore_limits,
161 resolution_callback); 206 resolution_callback);
207 }
208
209 if (proxy_info.is_direct()) {
210 if (using_ssl) {
211 scoped_refptr<SSLSocketParams> ssl_params =
212 SSLSocketParams::CreateForDirectConnection(
213 tcp_params,
214 origin_host_port,
215 ssl_config_for_origin,
216 load_flags,
217 force_spdy_over_ssl,
218 want_spdy_over_npn);
219
220 return callback(ssl_pool, connection_group, ssl_params, request_priority);
221 } else {
222 TransportClientSocketPool* pool = session->GetTransportSocketPool(
223 HttpNetworkSession::NORMAL_SOCKET_POOL);
224
225 return callback(pool, connection_group, tcp_params, request_priority);
226 }
227 } else if (proxy_info.is_http() || proxy_info.is_https()) {
228 std::string user_agent;
229 request_extra_headers.GetHeader(HttpRequestHeaders::kUserAgent,
230 &user_agent);
231 scoped_refptr<SSLSocketParams> ssl_params;
232 if (proxy_info.is_https()) {
233 ssl_params = SSLSocketParams::CreateForDirectConnection(
234 tcp_params,
235 *proxy_host_port.get(),
236 ssl_config_for_proxy,
237 load_flags,
238 force_spdy_over_ssl,
239 want_spdy_over_npn);
240 }
241
242 scoped_refptr<HttpProxySocketParams> http_proxy_params =
243 new HttpProxySocketParams(proxy_info.is_https() ? NULL : tcp_params,
244 ssl_params,
245 request_url,
246 user_agent,
247 origin_host_port,
248 session->http_auth_cache(),
249 session->http_auth_handler_factory(),
250 session->spdy_session_pool(),
251 force_tunnel || using_ssl);
252
253 if (using_ssl) {
254 scoped_refptr<SSLSocketParams> ssl_params =
255 SSLSocketParams::CreateForHttpProxy(
256 http_proxy_params,
257 proxy_scheme,
258 origin_host_port,
259 ssl_config_for_origin,
260 load_flags,
261 force_spdy_over_ssl,
262 want_spdy_over_npn);
263
264 return callback(ssl_pool, connection_group, ssl_params, request_priority);
265 } else {
266 HttpProxyClientSocketPool* pool =
267 session->GetSocketPoolForHTTPProxy(
268 HttpNetworkSession::NORMAL_SOCKET_POOL,
269 *proxy_host_port);
270
271 return callback(pool, connection_group,
272 http_proxy_params, request_priority);
273 }
162 } else { 274 } else {
163 ProxyServer proxy_server = proxy_info.proxy_server(); 275 DCHECK(proxy_info.is_socks());
164 proxy_host_port.reset(new HostPortPair(proxy_server.host_port_pair())); 276
165 scoped_refptr<TransportSocketParams> proxy_tcp_params( 277 scoped_refptr<SOCKSSocketParams> socks_params =
166 new TransportSocketParams(*proxy_host_port, 278 new SOCKSSocketParams(tcp_params,
167 request_priority, 279 proxy_scheme == ProxyServer::SCHEME_SOCKS5,
168 disable_resolver_cache, 280 origin_host_port,
169 ignore_limits, 281 request_priority);
170 resolution_callback)); 282
171 283 if (using_ssl) {
172 if (proxy_info.is_http() || proxy_info.is_https()) { 284 scoped_refptr<SSLSocketParams> ssl_params =
173 std::string user_agent; 285 SSLSocketParams::CreateForSocksProxy(
174 request_extra_headers.GetHeader(HttpRequestHeaders::kUserAgent, 286 socks_params,
175 &user_agent); 287 proxy_scheme,
176 scoped_refptr<SSLSocketParams> ssl_params; 288 origin_host_port,
177 if (proxy_info.is_https()) { 289 ssl_config_for_origin,
178 // Set ssl_params, and unset proxy_tcp_params 290 load_flags,
179 ssl_params = new SSLSocketParams(proxy_tcp_params, 291 force_spdy_over_ssl,
180 NULL, 292 want_spdy_over_npn);
181 NULL, 293
182 ProxyServer::SCHEME_DIRECT, 294 return callback(ssl_pool, connection_group, ssl_params, request_priority);
183 *proxy_host_port.get(),
184 ssl_config_for_proxy,
185 load_flags,
186 force_spdy_over_ssl,
187 want_spdy_over_npn);
188 proxy_tcp_params = NULL;
189 }
190
191 http_proxy_params =
192 new HttpProxySocketParams(proxy_tcp_params,
193 ssl_params,
194 request_url,
195 user_agent,
196 origin_host_port,
197 session->http_auth_cache(),
198 session->http_auth_handler_factory(),
199 session->spdy_session_pool(),
200 force_tunnel || using_ssl);
201 } else { 295 } else {
202 DCHECK(proxy_info.is_socks()); 296 SOCKSClientSocketPool* pool = session->GetSocketPoolForSOCKSProxy(
203 char socks_version;
204 if (proxy_server.scheme() == ProxyServer::SCHEME_SOCKS5)
205 socks_version = '5';
206 else
207 socks_version = '4';
208 connection_group = base::StringPrintf(
209 "socks%c/%s", socks_version, connection_group.c_str());
210
211 socks_params = new SOCKSSocketParams(proxy_tcp_params,
212 socks_version == '5',
213 origin_host_port,
214 request_priority);
215 }
216 }
217
218 // Deal with SSL - which layers on top of any given proxy.
219 if (using_ssl) {
220 scoped_refptr<SSLSocketParams> ssl_params =
221 new SSLSocketParams(tcp_params,
222 socks_params,
223 http_proxy_params,
224 proxy_info.proxy_server().scheme(),
225 origin_host_port,
226 ssl_config_for_origin,
227 load_flags,
228 force_spdy_over_ssl,
229 want_spdy_over_npn);
230 SSLClientSocketPool* ssl_pool = NULL;
231 if (proxy_info.is_direct()) {
232 ssl_pool = session->GetSSLSocketPool(
233 HttpNetworkSession::NORMAL_SOCKET_POOL);
234 } else {
235 ssl_pool = session->GetSocketPoolForSSLWithProxy(
236 HttpNetworkSession::NORMAL_SOCKET_POOL, 297 HttpNetworkSession::NORMAL_SOCKET_POOL,
237 *proxy_host_port); 298 *proxy_host_port);
238 } 299
239 300 return callback(pool, connection_group, socks_params, request_priority);
240 if (num_preconnect_streams) { 301 }
241 RequestSocketsForPool(ssl_pool, connection_group, ssl_params, 302 }
242 num_preconnect_streams, net_log); 303
243 return OK; 304 NOTREACHED();
244 } 305 return ERR_UNEXPECTED;
245 306 }
246 return socket_handle->Init(connection_group, ssl_params, 307
247 request_priority, callback, ssl_pool, 308 class RequestSocketForPool {
mmenke 2013/05/01 19:31:12 I think that these are sufficiently ugly that we s
248 net_log); 309 public:
249 } 310 RequestSocketForPool(ClientSocketHandle* socket_handle,
250 311 const CompletionCallback& callback,
251 // Finally, get the connection started. 312 const BoundNetLog& net_log)
252 313 : socket_handle_(socket_handle),
253 if (proxy_info.is_http() || proxy_info.is_https()) { 314 callback_(callback),
254 HttpProxyClientSocketPool* pool = 315 net_log_(net_log) {}
255 session->GetSocketPoolForHTTPProxy( 316
256 HttpNetworkSession::NORMAL_SOCKET_POOL, 317 template <typename PoolType, typename SocketParams>
257 *proxy_host_port); 318 int operator()(PoolType* pool,
258 if (num_preconnect_streams) { 319 const std::string& group_name,
259 RequestSocketsForPool(pool, connection_group, http_proxy_params, 320 const scoped_refptr<SocketParams>& params,
260 num_preconnect_streams, net_log); 321 RequestPriority request_priority) const {
261 return OK; 322 CheckIsValidSocketParamsForPool<PoolType, SocketParams>();
262 } 323
263 324 return socket_handle_->Init(group_name, params, request_priority,
264 return socket_handle->Init(connection_group, http_proxy_params, 325 callback_, pool, net_log_);
265 request_priority, callback, 326 }
266 pool, net_log); 327
267 } 328 private:
268 329 ClientSocketHandle* socket_handle_;
269 if (proxy_info.is_socks()) { 330 const CompletionCallback& callback_;
270 SOCKSClientSocketPool* pool = 331 const BoundNetLog& net_log_;
271 session->GetSocketPoolForSOCKSProxy( 332 };
272 HttpNetworkSession::NORMAL_SOCKET_POOL, 333
273 *proxy_host_port); 334 class RequestSocketsForPool {
274 if (num_preconnect_streams) { 335 public:
275 RequestSocketsForPool(pool, connection_group, socks_params, 336 RequestSocketsForPool(int num_preconnect_streams,
276 num_preconnect_streams, net_log); 337 const BoundNetLog& net_log)
277 return OK; 338 : num_preconnect_streams_(num_preconnect_streams),
278 } 339 net_log_(net_log) {}
279 340
280 return socket_handle->Init(connection_group, socks_params, 341 template <typename PoolType, typename SocketParams>
281 request_priority, callback, pool, 342 int operator()(PoolType* pool,
282 net_log); 343 const std::string& group_name,
283 } 344 const scoped_refptr<SocketParams>& params,
284 345 RequestPriority request_priority) const {
285 DCHECK(proxy_info.is_direct()); 346 CheckIsValidSocketParamsForPool<PoolType, SocketParams>();
286 347
287 TransportClientSocketPool* pool = 348 pool->RequestSockets(
288 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL); 349 group_name, &params, num_preconnect_streams_, net_log_);
289 if (num_preconnect_streams) {
290 RequestSocketsForPool(pool, connection_group, tcp_params,
291 num_preconnect_streams, net_log);
292 return OK; 350 return OK;
293 } 351 }
294 352
295 return socket_handle->Init(connection_group, tcp_params, 353 private:
296 request_priority, callback, 354 int num_preconnect_streams_;
297 pool, net_log); 355 const BoundNetLog& net_log_;
298 } 356 };
299 357
300 } // namespace 358 } // namespace
301 359
302 ClientSocketPoolManager::ClientSocketPoolManager() {} 360 ClientSocketPoolManager::ClientSocketPoolManager() {}
303 ClientSocketPoolManager::~ClientSocketPoolManager() {} 361 ClientSocketPoolManager::~ClientSocketPoolManager() {}
304 362
305 // static 363 // static
306 int ClientSocketPoolManager::max_sockets_per_pool( 364 int ClientSocketPoolManager::max_sockets_per_pool(
307 HttpNetworkSession::SocketPoolType pool_type) { 365 HttpNetworkSession::SocketPoolType pool_type) {
308 DCHECK_LT(pool_type, HttpNetworkSession::NUM_SOCKET_POOL_TYPES); 366 DCHECK_LT(pool_type, HttpNetworkSession::NUM_SOCKET_POOL_TYPES);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 const ProxyInfo& proxy_info, 431 const ProxyInfo& proxy_info,
374 bool force_spdy_over_ssl, 432 bool force_spdy_over_ssl,
375 bool want_spdy_over_npn, 433 bool want_spdy_over_npn,
376 const SSLConfig& ssl_config_for_origin, 434 const SSLConfig& ssl_config_for_origin,
377 const SSLConfig& ssl_config_for_proxy, 435 const SSLConfig& ssl_config_for_proxy,
378 const BoundNetLog& net_log, 436 const BoundNetLog& net_log,
379 ClientSocketHandle* socket_handle, 437 ClientSocketHandle* socket_handle,
380 const OnHostResolutionCallback& resolution_callback, 438 const OnHostResolutionCallback& resolution_callback,
381 const CompletionCallback& callback) { 439 const CompletionCallback& callback) {
382 DCHECK(socket_handle); 440 DCHECK(socket_handle);
383 return InitSocketPoolHelper( 441
442 RequestSocketForPool socketRequest(socket_handle, callback, net_log);
443
444 return InvokeWithSocketParamsAndPool(
384 request_url, request_extra_headers, request_load_flags, request_priority, 445 request_url, request_extra_headers, request_load_flags, request_priority,
385 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn, 446 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn,
386 ssl_config_for_origin, ssl_config_for_proxy, false, net_log, 0, 447 ssl_config_for_origin, ssl_config_for_proxy, false,
387 socket_handle, resolution_callback, callback); 448 resolution_callback, socketRequest);
388 } 449 }
389 450
390 int InitSocketHandleForRawConnect( 451 int InitSocketHandleForRawConnect(
391 const HostPortPair& host_port_pair, 452 const HostPortPair& host_port_pair,
392 HttpNetworkSession* session, 453 HttpNetworkSession* session,
393 const ProxyInfo& proxy_info, 454 const ProxyInfo& proxy_info,
394 const SSLConfig& ssl_config_for_origin, 455 const SSLConfig& ssl_config_for_origin,
395 const SSLConfig& ssl_config_for_proxy, 456 const SSLConfig& ssl_config_for_proxy,
396 const BoundNetLog& net_log, 457 const BoundNetLog& net_log,
397 ClientSocketHandle* socket_handle, 458 ClientSocketHandle* socket_handle,
398 const CompletionCallback& callback) { 459 const CompletionCallback& callback) {
399 DCHECK(socket_handle); 460 DCHECK(socket_handle);
461
462 RequestSocketForPool socketRequest(socket_handle, callback, net_log);
463
400 // Synthesize an HttpRequestInfo. 464 // Synthesize an HttpRequestInfo.
401 GURL request_url = GURL("http://" + host_port_pair.ToString()); 465 GURL request_url = GURL("http://" + host_port_pair.ToString());
402 HttpRequestHeaders request_extra_headers; 466 HttpRequestHeaders request_extra_headers;
403 int request_load_flags = 0; 467 int request_load_flags = 0;
404 RequestPriority request_priority = MEDIUM; 468 RequestPriority request_priority = MEDIUM;
405 469
406 return InitSocketPoolHelper( 470 return InvokeWithSocketParamsAndPool(
407 request_url, request_extra_headers, request_load_flags, request_priority, 471 request_url, request_extra_headers, request_load_flags, request_priority,
408 session, proxy_info, false, false, ssl_config_for_origin, 472 session, proxy_info, false, false,
409 ssl_config_for_proxy, true, net_log, 0, socket_handle, 473 ssl_config_for_origin, ssl_config_for_proxy, true,
410 OnHostResolutionCallback(), callback); 474 OnHostResolutionCallback(), socketRequest);
411 } 475 }
412 476
413 int PreconnectSocketsForHttpRequest( 477 int PreconnectSocketsForHttpRequest(
414 const GURL& request_url, 478 const GURL& request_url,
415 const HttpRequestHeaders& request_extra_headers, 479 const HttpRequestHeaders& request_extra_headers,
416 int request_load_flags, 480 int request_load_flags,
417 RequestPriority request_priority, 481 RequestPriority request_priority,
418 HttpNetworkSession* session, 482 HttpNetworkSession* session,
419 const ProxyInfo& proxy_info, 483 const ProxyInfo& proxy_info,
420 bool force_spdy_over_ssl, 484 bool force_spdy_over_ssl,
421 bool want_spdy_over_npn, 485 bool want_spdy_over_npn,
422 const SSLConfig& ssl_config_for_origin, 486 const SSLConfig& ssl_config_for_origin,
423 const SSLConfig& ssl_config_for_proxy, 487 const SSLConfig& ssl_config_for_proxy,
424 const BoundNetLog& net_log, 488 const BoundNetLog& net_log,
425 int num_preconnect_streams) { 489 int num_preconnect_streams) {
426 return InitSocketPoolHelper( 490 RequestSocketsForPool socketsRequest(num_preconnect_streams, net_log);
491
492 return InvokeWithSocketParamsAndPool(
427 request_url, request_extra_headers, request_load_flags, request_priority, 493 request_url, request_extra_headers, request_load_flags, request_priority,
428 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn, 494 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn,
429 ssl_config_for_origin, ssl_config_for_proxy, false, net_log, 495 ssl_config_for_origin, ssl_config_for_proxy, false,
430 num_preconnect_streams, NULL, OnHostResolutionCallback(), 496 OnHostResolutionCallback(), socketsRequest);
431 CompletionCallback());
432 } 497 }
433 498
434 } // namespace net 499 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/client_socket_pool.h ('k') | net/socket/ssl_client_socket_pool.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698