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

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: 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
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 new SSLSocketParams(tcp_params,
213 origin_host_port,
214 ssl_config_for_origin,
215 load_flags,
216 force_spdy_over_ssl,
217 want_spdy_over_npn);
218
219 return callback(ssl_pool, connection_group, ssl_params, request_priority);
220 } else {
221 TransportClientSocketPool* pool = session->GetTransportSocketPool(
222 HttpNetworkSession::NORMAL_SOCKET_POOL);
223
224 return callback(pool, connection_group, tcp_params, request_priority);
225 }
226 } else if (proxy_info.is_http() || proxy_info.is_https()) {
227 std::string user_agent;
228 request_extra_headers.GetHeader(HttpRequestHeaders::kUserAgent,
229 &user_agent);
230 scoped_refptr<SSLSocketParams> ssl_params;
231 if (proxy_info.is_https()) {
232 ssl_params = new SSLSocketParams(tcp_params,
233 *proxy_host_port.get(),
234 ssl_config_for_proxy,
235 load_flags,
236 force_spdy_over_ssl,
237 want_spdy_over_npn);
238 }
239
240 scoped_refptr<HttpProxySocketParams> http_proxy_params =
241 new HttpProxySocketParams(proxy_info.is_https() ? NULL : tcp_params,
242 ssl_params,
243 request_url,
244 user_agent,
245 origin_host_port,
246 session->http_auth_cache(),
247 session->http_auth_handler_factory(),
248 session->spdy_session_pool(),
249 force_tunnel || using_ssl);
250
251 if (using_ssl) {
252 scoped_refptr<SSLSocketParams> ssl_params =
253 new SSLSocketParams(http_proxy_params,
254 proxy_scheme,
255 origin_host_port,
256 ssl_config_for_origin,
257 load_flags,
258 force_spdy_over_ssl,
259 want_spdy_over_npn);
260
261 return callback(ssl_pool, connection_group, ssl_params, request_priority);
262 } else {
263 HttpProxyClientSocketPool* pool =
264 session->GetSocketPoolForHTTPProxy(
265 HttpNetworkSession::NORMAL_SOCKET_POOL,
266 *proxy_host_port);
267
268 return callback(pool, connection_group,
269 http_proxy_params, request_priority);
270 }
162 } else { 271 } else {
163 ProxyServer proxy_server = proxy_info.proxy_server(); 272 DCHECK(proxy_info.is_socks());
164 proxy_host_port.reset(new HostPortPair(proxy_server.host_port_pair())); 273
165 scoped_refptr<TransportSocketParams> proxy_tcp_params( 274 scoped_refptr<SOCKSSocketParams> socks_params =
166 new TransportSocketParams(*proxy_host_port, 275 new SOCKSSocketParams(tcp_params,
167 request_priority, 276 proxy_scheme == ProxyServer::SCHEME_SOCKS5,
168 disable_resolver_cache, 277 origin_host_port,
169 ignore_limits, 278 request_priority);
170 resolution_callback)); 279
171 280 if (using_ssl) {
172 if (proxy_info.is_http() || proxy_info.is_https()) { 281 scoped_refptr<SSLSocketParams> ssl_params =
173 std::string user_agent; 282 new SSLSocketParams(socks_params,
174 request_extra_headers.GetHeader(HttpRequestHeaders::kUserAgent, 283 proxy_scheme,
175 &user_agent); 284 origin_host_port,
176 scoped_refptr<SSLSocketParams> ssl_params; 285 ssl_config_for_origin,
177 if (proxy_info.is_https()) { 286 load_flags,
178 // Set ssl_params, and unset proxy_tcp_params 287 force_spdy_over_ssl,
179 ssl_params = new SSLSocketParams(proxy_tcp_params, 288 want_spdy_over_npn);
180 NULL, 289
181 NULL, 290 return callback(ssl_pool, connection_group, ssl_params, request_priority);
182 ProxyServer::SCHEME_DIRECT,
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 { 291 } else {
202 DCHECK(proxy_info.is_socks()); 292 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, 293 HttpNetworkSession::NORMAL_SOCKET_POOL,
237 *proxy_host_port); 294 *proxy_host_port);
238 } 295
239 296 return callback(pool, connection_group, socks_params, request_priority);
240 if (num_preconnect_streams) { 297 }
241 RequestSocketsForPool(ssl_pool, connection_group, ssl_params, 298 }
242 num_preconnect_streams, net_log); 299
243 return OK; 300 NOTREACHED();
244 } 301 return ERR_UNEXPECTED;
245 302 }
246 return socket_handle->Init(connection_group, ssl_params, 303
247 request_priority, callback, ssl_pool, 304 class RequestSocketForPool {
248 net_log); 305 public:
249 } 306 RequestSocketForPool(ClientSocketHandle* socket_handle,
250 307 const CompletionCallback& callback,
251 // Finally, get the connection started. 308 const BoundNetLog& net_log)
252 309 : socket_handle_(socket_handle),
253 if (proxy_info.is_http() || proxy_info.is_https()) { 310 callback_(callback),
254 HttpProxyClientSocketPool* pool = 311 net_log_(net_log) {}
255 session->GetSocketPoolForHTTPProxy( 312
256 HttpNetworkSession::NORMAL_SOCKET_POOL, 313 template <typename PoolType, typename SocketParams>
257 *proxy_host_port); 314 int operator()(PoolType* pool,
258 if (num_preconnect_streams) { 315 const std::string& group_name,
259 RequestSocketsForPool(pool, connection_group, http_proxy_params, 316 const scoped_refptr<SocketParams>& params,
260 num_preconnect_streams, net_log); 317 RequestPriority request_priority) const {
261 return OK; 318 CheckIsValidSocketParamsForPool<PoolType, SocketParams>();
262 } 319
263 320 return socket_handle_->Init(group_name, params, request_priority,
264 return socket_handle->Init(connection_group, http_proxy_params, 321 callback_, pool, net_log_);
265 request_priority, callback, 322 }
266 pool, net_log); 323
267 } 324 private:
268 325 ClientSocketHandle* socket_handle_;
269 if (proxy_info.is_socks()) { 326 const CompletionCallback& callback_;
270 SOCKSClientSocketPool* pool = 327 const BoundNetLog& net_log_;
271 session->GetSocketPoolForSOCKSProxy( 328 };
272 HttpNetworkSession::NORMAL_SOCKET_POOL, 329
273 *proxy_host_port); 330 class RequestSocketsForPool {
274 if (num_preconnect_streams) { 331 public:
275 RequestSocketsForPool(pool, connection_group, socks_params, 332 RequestSocketsForPool(int num_preconnect_streams,
276 num_preconnect_streams, net_log); 333 const BoundNetLog& net_log)
277 return OK; 334 : num_preconnect_streams_(num_preconnect_streams),
278 } 335 net_log_(net_log) {}
279 336
280 return socket_handle->Init(connection_group, socks_params, 337 template <typename PoolType, typename SocketParams>
281 request_priority, callback, pool, 338 int operator()(PoolType* pool,
282 net_log); 339 const std::string& group_name,
283 } 340 const scoped_refptr<SocketParams>& params,
284 341 RequestPriority request_priority) const {
285 DCHECK(proxy_info.is_direct()); 342 CheckIsValidSocketParamsForPool<PoolType, SocketParams>();
286 343
287 TransportClientSocketPool* pool = 344 pool->RequestSockets(
288 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL); 345 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; 346 return OK;
293 } 347 }
294 348
295 return socket_handle->Init(connection_group, tcp_params, 349 private:
296 request_priority, callback, 350 int num_preconnect_streams_;
297 pool, net_log); 351 const BoundNetLog& net_log_;
298 } 352 };
299 353
300 } // namespace 354 } // namespace
301 355
302 ClientSocketPoolManager::ClientSocketPoolManager() {} 356 ClientSocketPoolManager::ClientSocketPoolManager() {}
303 ClientSocketPoolManager::~ClientSocketPoolManager() {} 357 ClientSocketPoolManager::~ClientSocketPoolManager() {}
304 358
305 // static 359 // static
306 int ClientSocketPoolManager::max_sockets_per_pool( 360 int ClientSocketPoolManager::max_sockets_per_pool(
307 HttpNetworkSession::SocketPoolType pool_type) { 361 HttpNetworkSession::SocketPoolType pool_type) {
308 DCHECK_LT(pool_type, HttpNetworkSession::NUM_SOCKET_POOL_TYPES); 362 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, 427 const ProxyInfo& proxy_info,
374 bool force_spdy_over_ssl, 428 bool force_spdy_over_ssl,
375 bool want_spdy_over_npn, 429 bool want_spdy_over_npn,
376 const SSLConfig& ssl_config_for_origin, 430 const SSLConfig& ssl_config_for_origin,
377 const SSLConfig& ssl_config_for_proxy, 431 const SSLConfig& ssl_config_for_proxy,
378 const BoundNetLog& net_log, 432 const BoundNetLog& net_log,
379 ClientSocketHandle* socket_handle, 433 ClientSocketHandle* socket_handle,
380 const OnHostResolutionCallback& resolution_callback, 434 const OnHostResolutionCallback& resolution_callback,
381 const CompletionCallback& callback) { 435 const CompletionCallback& callback) {
382 DCHECK(socket_handle); 436 DCHECK(socket_handle);
383 return InitSocketPoolHelper( 437
438 RequestSocketForPool socketRequest(socket_handle, callback, net_log);
439
440 return InvokeWithSocketParamsAndPool(
384 request_url, request_extra_headers, request_load_flags, request_priority, 441 request_url, request_extra_headers, request_load_flags, request_priority,
385 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn, 442 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn,
386 ssl_config_for_origin, ssl_config_for_proxy, false, net_log, 0, 443 ssl_config_for_origin, ssl_config_for_proxy, false,
387 socket_handle, resolution_callback, callback); 444 resolution_callback, socketRequest);
388 } 445 }
389 446
390 int InitSocketHandleForRawConnect( 447 int InitSocketHandleForRawConnect(
391 const HostPortPair& host_port_pair, 448 const HostPortPair& host_port_pair,
392 HttpNetworkSession* session, 449 HttpNetworkSession* session,
393 const ProxyInfo& proxy_info, 450 const ProxyInfo& proxy_info,
394 const SSLConfig& ssl_config_for_origin, 451 const SSLConfig& ssl_config_for_origin,
395 const SSLConfig& ssl_config_for_proxy, 452 const SSLConfig& ssl_config_for_proxy,
396 const BoundNetLog& net_log, 453 const BoundNetLog& net_log,
397 ClientSocketHandle* socket_handle, 454 ClientSocketHandle* socket_handle,
398 const CompletionCallback& callback) { 455 const CompletionCallback& callback) {
399 DCHECK(socket_handle); 456 DCHECK(socket_handle);
457
458 RequestSocketForPool socketRequest(socket_handle, callback, net_log);
459
400 // Synthesize an HttpRequestInfo. 460 // Synthesize an HttpRequestInfo.
401 GURL request_url = GURL("http://" + host_port_pair.ToString()); 461 GURL request_url = GURL("http://" + host_port_pair.ToString());
402 HttpRequestHeaders request_extra_headers; 462 HttpRequestHeaders request_extra_headers;
403 int request_load_flags = 0; 463 int request_load_flags = 0;
404 RequestPriority request_priority = MEDIUM; 464 RequestPriority request_priority = MEDIUM;
405 465
406 return InitSocketPoolHelper( 466 return InvokeWithSocketParamsAndPool(
407 request_url, request_extra_headers, request_load_flags, request_priority, 467 request_url, request_extra_headers, request_load_flags, request_priority,
408 session, proxy_info, false, false, ssl_config_for_origin, 468 session, proxy_info, false, false,
409 ssl_config_for_proxy, true, net_log, 0, socket_handle, 469 ssl_config_for_origin, ssl_config_for_proxy, true,
410 OnHostResolutionCallback(), callback); 470 OnHostResolutionCallback(), socketRequest);
411 } 471 }
412 472
413 int PreconnectSocketsForHttpRequest( 473 int PreconnectSocketsForHttpRequest(
414 const GURL& request_url, 474 const GURL& request_url,
415 const HttpRequestHeaders& request_extra_headers, 475 const HttpRequestHeaders& request_extra_headers,
416 int request_load_flags, 476 int request_load_flags,
417 RequestPriority request_priority, 477 RequestPriority request_priority,
418 HttpNetworkSession* session, 478 HttpNetworkSession* session,
419 const ProxyInfo& proxy_info, 479 const ProxyInfo& proxy_info,
420 bool force_spdy_over_ssl, 480 bool force_spdy_over_ssl,
421 bool want_spdy_over_npn, 481 bool want_spdy_over_npn,
422 const SSLConfig& ssl_config_for_origin, 482 const SSLConfig& ssl_config_for_origin,
423 const SSLConfig& ssl_config_for_proxy, 483 const SSLConfig& ssl_config_for_proxy,
424 const BoundNetLog& net_log, 484 const BoundNetLog& net_log,
425 int num_preconnect_streams) { 485 int num_preconnect_streams) {
426 return InitSocketPoolHelper( 486 RequestSocketsForPool socketsRequest(num_preconnect_streams, net_log);
487
488 return InvokeWithSocketParamsAndPool(
427 request_url, request_extra_headers, request_load_flags, request_priority, 489 request_url, request_extra_headers, request_load_flags, request_priority,
428 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn, 490 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn,
429 ssl_config_for_origin, ssl_config_for_proxy, false, net_log, 491 ssl_config_for_origin, ssl_config_for_proxy, false,
430 num_preconnect_streams, NULL, OnHostResolutionCallback(), 492 OnHostResolutionCallback(), socketsRequest);
431 CompletionCallback());
432 } 493 }
433 494
434 } // namespace net 495 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698