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

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

Issue 14749006: [WIP] Pretend-to-preconnect for {mouse,touch}-event triggers. Base URL: https://chromium.googlesource.com/chromium/src.git@preconnect-pretend
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 int PretendToRequestSocketsForPool(ClientSocketPool* pool,
68 const std::string& group_name,
69 int num_sockets) {
70 int idle_count = pool->IdleSocketCountInGroup(group_name);
71
72 int would_have_been_connected = num_sockets - idle_count;
mmenke 2013/05/01 16:55:08 This count isn't correct. We actually use NumActi
73 if (would_have_been_connected > 0)
74 would_have_been_connected = 0;
75 return would_have_been_connected;
76 }
77
67 // The meat of the implementation for the InitSocketHandleForHttpRequest, 78 // The meat of the implementation for the InitSocketHandleForHttpRequest,
68 // InitSocketHandleForRawConnect and PreconnectSocketsForHttpRequest methods. 79 // InitSocketHandleForRawConnect and PreconnectSocketsForHttpRequest methods.
69 int InitSocketPoolHelper(const GURL& request_url, 80 int InitSocketPoolHelper(const GURL& request_url,
70 const HttpRequestHeaders& request_extra_headers, 81 const HttpRequestHeaders& request_extra_headers,
71 int request_load_flags, 82 int request_load_flags,
72 RequestPriority request_priority, 83 RequestPriority request_priority,
73 HttpNetworkSession* session, 84 HttpNetworkSession* session,
74 const ProxyInfo& proxy_info, 85 const ProxyInfo& proxy_info,
75 bool force_spdy_over_ssl, 86 bool force_spdy_over_ssl,
76 bool want_spdy_over_npn, 87 bool want_spdy_over_npn,
77 const SSLConfig& ssl_config_for_origin, 88 const SSLConfig& ssl_config_for_origin,
78 const SSLConfig& ssl_config_for_proxy, 89 const SSLConfig& ssl_config_for_proxy,
79 bool force_tunnel, 90 bool force_tunnel,
80 const BoundNetLog& net_log, 91 const BoundNetLog& net_log,
81 int num_preconnect_streams, 92 int num_preconnect_streams,
93 bool pretend_to_preconnect,
82 ClientSocketHandle* socket_handle, 94 ClientSocketHandle* socket_handle,
83 const OnHostResolutionCallback& resolution_callback, 95 const OnHostResolutionCallback& resolution_callback,
84 const CompletionCallback& callback) { 96 const CompletionCallback& callback) {
85 scoped_refptr<TransportSocketParams> tcp_params; 97 scoped_refptr<TransportSocketParams> tcp_params;
86 scoped_refptr<HttpProxySocketParams> http_proxy_params; 98 scoped_refptr<HttpProxySocketParams> http_proxy_params;
87 scoped_refptr<SOCKSSocketParams> socks_params; 99 scoped_refptr<SOCKSSocketParams> socks_params;
88 scoped_ptr<HostPortPair> proxy_host_port; 100 scoped_ptr<HostPortPair> proxy_host_port;
89 101
90 bool using_ssl = request_url.SchemeIs("https") || force_spdy_over_ssl; 102 bool using_ssl = request_url.SchemeIs("https") || force_spdy_over_ssl;
91 103
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 if (proxy_info.is_direct()) { 243 if (proxy_info.is_direct()) {
232 ssl_pool = session->GetSSLSocketPool( 244 ssl_pool = session->GetSSLSocketPool(
233 HttpNetworkSession::NORMAL_SOCKET_POOL); 245 HttpNetworkSession::NORMAL_SOCKET_POOL);
234 } else { 246 } else {
235 ssl_pool = session->GetSocketPoolForSSLWithProxy( 247 ssl_pool = session->GetSocketPoolForSSLWithProxy(
236 HttpNetworkSession::NORMAL_SOCKET_POOL, 248 HttpNetworkSession::NORMAL_SOCKET_POOL,
237 *proxy_host_port); 249 *proxy_host_port);
238 } 250 }
239 251
240 if (num_preconnect_streams) { 252 if (num_preconnect_streams) {
253 if (pretend_to_preconnect)
254 return PretendToRequestSocketsForPool(
255 ssl_pool, connection_group, num_preconnect_streams);
256
241 RequestSocketsForPool(ssl_pool, connection_group, ssl_params, 257 RequestSocketsForPool(ssl_pool, connection_group, ssl_params,
242 num_preconnect_streams, net_log); 258 num_preconnect_streams, net_log);
259
243 return OK; 260 return OK;
244 } 261 }
245 262
246 return socket_handle->Init(connection_group, ssl_params, 263 return socket_handle->Init(connection_group, ssl_params,
247 request_priority, callback, ssl_pool, 264 request_priority, callback, ssl_pool,
248 net_log); 265 net_log);
249 } 266 }
250 267
251 // Finally, get the connection started. 268 // Finally, get the connection started.
252 269
253 if (proxy_info.is_http() || proxy_info.is_https()) { 270 if (proxy_info.is_http() || proxy_info.is_https()) {
254 HttpProxyClientSocketPool* pool = 271 HttpProxyClientSocketPool* pool =
255 session->GetSocketPoolForHTTPProxy( 272 session->GetSocketPoolForHTTPProxy(
256 HttpNetworkSession::NORMAL_SOCKET_POOL, 273 HttpNetworkSession::NORMAL_SOCKET_POOL,
257 *proxy_host_port); 274 *proxy_host_port);
258 if (num_preconnect_streams) { 275 if (num_preconnect_streams) {
276 if (pretend_to_preconnect)
277 return PretendToRequestSocketsForPool(
278 pool, connection_group, num_preconnect_streams);
279
259 RequestSocketsForPool(pool, connection_group, http_proxy_params, 280 RequestSocketsForPool(pool, connection_group, http_proxy_params,
260 num_preconnect_streams, net_log); 281 num_preconnect_streams, net_log);
261 return OK; 282 return OK;
262 } 283 }
263 284
264 return socket_handle->Init(connection_group, http_proxy_params, 285 return socket_handle->Init(connection_group, http_proxy_params,
265 request_priority, callback, 286 request_priority, callback,
266 pool, net_log); 287 pool, net_log);
267 } 288 }
268 289
269 if (proxy_info.is_socks()) { 290 if (proxy_info.is_socks()) {
270 SOCKSClientSocketPool* pool = 291 SOCKSClientSocketPool* pool =
271 session->GetSocketPoolForSOCKSProxy( 292 session->GetSocketPoolForSOCKSProxy(
272 HttpNetworkSession::NORMAL_SOCKET_POOL, 293 HttpNetworkSession::NORMAL_SOCKET_POOL,
273 *proxy_host_port); 294 *proxy_host_port);
274 if (num_preconnect_streams) { 295 if (num_preconnect_streams) {
296 if (pretend_to_preconnect)
297 return PretendToRequestSocketsForPool(
298 pool, connection_group, num_preconnect_streams);
299
275 RequestSocketsForPool(pool, connection_group, socks_params, 300 RequestSocketsForPool(pool, connection_group, socks_params,
276 num_preconnect_streams, net_log); 301 num_preconnect_streams, net_log);
277 return OK; 302 return OK;
278 } 303 }
279 304
280 return socket_handle->Init(connection_group, socks_params, 305 return socket_handle->Init(connection_group, socks_params,
281 request_priority, callback, pool, 306 request_priority, callback, pool,
282 net_log); 307 net_log);
283 } 308 }
284 309
285 DCHECK(proxy_info.is_direct()); 310 DCHECK(proxy_info.is_direct());
286 311
287 TransportClientSocketPool* pool = 312 TransportClientSocketPool* pool =
288 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL); 313 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL);
289 if (num_preconnect_streams) { 314 if (num_preconnect_streams) {
315 if (pretend_to_preconnect)
316 return PretendToRequestSocketsForPool(
317 pool, connection_group, num_preconnect_streams);
318
290 RequestSocketsForPool(pool, connection_group, tcp_params, 319 RequestSocketsForPool(pool, connection_group, tcp_params,
291 num_preconnect_streams, net_log); 320 num_preconnect_streams, net_log);
292 return OK; 321 return OK;
293 } 322 }
294 323
295 return socket_handle->Init(connection_group, tcp_params, 324 return socket_handle->Init(connection_group, tcp_params,
296 request_priority, callback, 325 request_priority, callback,
297 pool, net_log); 326 pool, net_log);
298 } 327 }
299 328
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 const SSLConfig& ssl_config_for_origin, 405 const SSLConfig& ssl_config_for_origin,
377 const SSLConfig& ssl_config_for_proxy, 406 const SSLConfig& ssl_config_for_proxy,
378 const BoundNetLog& net_log, 407 const BoundNetLog& net_log,
379 ClientSocketHandle* socket_handle, 408 ClientSocketHandle* socket_handle,
380 const OnHostResolutionCallback& resolution_callback, 409 const OnHostResolutionCallback& resolution_callback,
381 const CompletionCallback& callback) { 410 const CompletionCallback& callback) {
382 DCHECK(socket_handle); 411 DCHECK(socket_handle);
383 return InitSocketPoolHelper( 412 return InitSocketPoolHelper(
384 request_url, request_extra_headers, request_load_flags, request_priority, 413 request_url, request_extra_headers, request_load_flags, request_priority,
385 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn, 414 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn,
386 ssl_config_for_origin, ssl_config_for_proxy, false, net_log, 0, 415 ssl_config_for_origin, ssl_config_for_proxy, false, net_log, 0, true,
387 socket_handle, resolution_callback, callback); 416 socket_handle, resolution_callback, callback);
388 } 417 }
389 418
390 int InitSocketHandleForRawConnect( 419 int InitSocketHandleForRawConnect(
391 const HostPortPair& host_port_pair, 420 const HostPortPair& host_port_pair,
392 HttpNetworkSession* session, 421 HttpNetworkSession* session,
393 const ProxyInfo& proxy_info, 422 const ProxyInfo& proxy_info,
394 const SSLConfig& ssl_config_for_origin, 423 const SSLConfig& ssl_config_for_origin,
395 const SSLConfig& ssl_config_for_proxy, 424 const SSLConfig& ssl_config_for_proxy,
396 const BoundNetLog& net_log, 425 const BoundNetLog& net_log,
397 ClientSocketHandle* socket_handle, 426 ClientSocketHandle* socket_handle,
398 const CompletionCallback& callback) { 427 const CompletionCallback& callback) {
399 DCHECK(socket_handle); 428 DCHECK(socket_handle);
400 // Synthesize an HttpRequestInfo. 429 // Synthesize an HttpRequestInfo.
401 GURL request_url = GURL("http://" + host_port_pair.ToString()); 430 GURL request_url = GURL("http://" + host_port_pair.ToString());
402 HttpRequestHeaders request_extra_headers; 431 HttpRequestHeaders request_extra_headers;
403 int request_load_flags = 0; 432 int request_load_flags = 0;
404 RequestPriority request_priority = MEDIUM; 433 RequestPriority request_priority = MEDIUM;
405 434
406 return InitSocketPoolHelper( 435 return InitSocketPoolHelper(
407 request_url, request_extra_headers, request_load_flags, request_priority, 436 request_url, request_extra_headers, request_load_flags, request_priority,
408 session, proxy_info, false, false, ssl_config_for_origin, 437 session, proxy_info, false, false, ssl_config_for_origin,
409 ssl_config_for_proxy, true, net_log, 0, socket_handle, 438 ssl_config_for_proxy, true, net_log, 0, true, socket_handle,
410 OnHostResolutionCallback(), callback); 439 OnHostResolutionCallback(), callback);
411 } 440 }
412 441
413 int PreconnectSocketsForHttpRequest( 442 int PreconnectSocketsForHttpRequest(
414 const GURL& request_url, 443 const GURL& request_url,
415 const HttpRequestHeaders& request_extra_headers, 444 const HttpRequestHeaders& request_extra_headers,
416 int request_load_flags, 445 int request_load_flags,
417 RequestPriority request_priority, 446 RequestPriority request_priority,
418 HttpNetworkSession* session, 447 HttpNetworkSession* session,
419 const ProxyInfo& proxy_info, 448 const ProxyInfo& proxy_info,
420 bool force_spdy_over_ssl, 449 bool force_spdy_over_ssl,
421 bool want_spdy_over_npn, 450 bool want_spdy_over_npn,
422 const SSLConfig& ssl_config_for_origin, 451 const SSLConfig& ssl_config_for_origin,
423 const SSLConfig& ssl_config_for_proxy, 452 const SSLConfig& ssl_config_for_proxy,
424 const BoundNetLog& net_log, 453 const BoundNetLog& net_log,
425 int num_preconnect_streams) { 454 int num_preconnect_streams) {
426 return InitSocketPoolHelper( 455 return InitSocketPoolHelper(
427 request_url, request_extra_headers, request_load_flags, request_priority, 456 request_url, request_extra_headers, request_load_flags, request_priority,
428 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn, 457 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn,
429 ssl_config_for_origin, ssl_config_for_proxy, false, net_log, 458 ssl_config_for_origin, ssl_config_for_proxy, false, net_log,
430 num_preconnect_streams, NULL, OnHostResolutionCallback(), 459 num_preconnect_streams, true, NULL, OnHostResolutionCallback(),
431 CompletionCallback()); 460 CompletionCallback());
432 } 461 }
433 462
463 int PretendToPreconnectSocketsForHttpRequest(
464 const GURL& request_url,
465 const HttpRequestHeaders& request_extra_headers,
466 int request_load_flags,
467 RequestPriority request_priority,
468 HttpNetworkSession* session,
469 const ProxyInfo& proxy_info,
470 bool force_spdy_over_ssl,
471 bool want_spdy_over_npn,
472 const SSLConfig& ssl_config_for_origin,
473 const SSLConfig& ssl_config_for_proxy,
474 const BoundNetLog& net_log,
475 int num_preconnect_streams) {
476 return InitSocketPoolHelper(
477 request_url, request_extra_headers, request_load_flags, request_priority,
478 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn,
479 ssl_config_for_origin, ssl_config_for_proxy, false, net_log,
480 num_preconnect_streams, false, NULL, OnHostResolutionCallback(),
481 CompletionCallback());
482 }
483
434 } // namespace net 484 } // namespace net
OLDNEW
« net/http/http_stream_factory_impl_job.cc ('K') | « net/socket/client_socket_pool_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698