Chromium Code Reviews| Index: net/socket/client_socket_pool_manager.cc |
| diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc |
| index 71b9d6d6f5895230a0d7bae8083c930f3372e911..1b78ef9c42dad62ad3cebda4c505686581bc2b8a 100644 |
| --- a/net/socket/client_socket_pool_manager.cc |
| +++ b/net/socket/client_socket_pool_manager.cc |
| @@ -64,6 +64,17 @@ COMPILE_ASSERT(arraysize(g_max_sockets_per_proxy_server) == |
| HttpNetworkSession::NUM_SOCKET_POOL_TYPES, |
| max_sockets_per_proxy_server_length_mismatch); |
| +int PretendToRequestSocketsForPool(ClientSocketPool* pool, |
| + const std::string& group_name, |
| + int num_sockets) { |
| + int idle_count = pool->IdleSocketCountInGroup(group_name); |
| + |
| + 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
|
| + if (would_have_been_connected > 0) |
| + would_have_been_connected = 0; |
| + return would_have_been_connected; |
| +} |
| + |
| // The meat of the implementation for the InitSocketHandleForHttpRequest, |
| // InitSocketHandleForRawConnect and PreconnectSocketsForHttpRequest methods. |
| int InitSocketPoolHelper(const GURL& request_url, |
| @@ -79,6 +90,7 @@ int InitSocketPoolHelper(const GURL& request_url, |
| bool force_tunnel, |
| const BoundNetLog& net_log, |
| int num_preconnect_streams, |
| + bool pretend_to_preconnect, |
| ClientSocketHandle* socket_handle, |
| const OnHostResolutionCallback& resolution_callback, |
| const CompletionCallback& callback) { |
| @@ -238,8 +250,13 @@ int InitSocketPoolHelper(const GURL& request_url, |
| } |
| if (num_preconnect_streams) { |
| + if (pretend_to_preconnect) |
| + return PretendToRequestSocketsForPool( |
| + ssl_pool, connection_group, num_preconnect_streams); |
| + |
| RequestSocketsForPool(ssl_pool, connection_group, ssl_params, |
| num_preconnect_streams, net_log); |
| + |
| return OK; |
| } |
| @@ -256,6 +273,10 @@ int InitSocketPoolHelper(const GURL& request_url, |
| HttpNetworkSession::NORMAL_SOCKET_POOL, |
| *proxy_host_port); |
| if (num_preconnect_streams) { |
| + if (pretend_to_preconnect) |
| + return PretendToRequestSocketsForPool( |
| + pool, connection_group, num_preconnect_streams); |
| + |
| RequestSocketsForPool(pool, connection_group, http_proxy_params, |
| num_preconnect_streams, net_log); |
| return OK; |
| @@ -272,6 +293,10 @@ int InitSocketPoolHelper(const GURL& request_url, |
| HttpNetworkSession::NORMAL_SOCKET_POOL, |
| *proxy_host_port); |
| if (num_preconnect_streams) { |
| + if (pretend_to_preconnect) |
| + return PretendToRequestSocketsForPool( |
| + pool, connection_group, num_preconnect_streams); |
| + |
| RequestSocketsForPool(pool, connection_group, socks_params, |
| num_preconnect_streams, net_log); |
| return OK; |
| @@ -287,6 +312,10 @@ int InitSocketPoolHelper(const GURL& request_url, |
| TransportClientSocketPool* pool = |
| session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL); |
| if (num_preconnect_streams) { |
| + if (pretend_to_preconnect) |
| + return PretendToRequestSocketsForPool( |
| + pool, connection_group, num_preconnect_streams); |
| + |
| RequestSocketsForPool(pool, connection_group, tcp_params, |
| num_preconnect_streams, net_log); |
| return OK; |
| @@ -383,7 +412,7 @@ int InitSocketHandleForHttpRequest( |
| return InitSocketPoolHelper( |
| request_url, request_extra_headers, request_load_flags, request_priority, |
| session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn, |
| - ssl_config_for_origin, ssl_config_for_proxy, false, net_log, 0, |
| + ssl_config_for_origin, ssl_config_for_proxy, false, net_log, 0, true, |
| socket_handle, resolution_callback, callback); |
| } |
| @@ -406,7 +435,7 @@ int InitSocketHandleForRawConnect( |
| return InitSocketPoolHelper( |
| request_url, request_extra_headers, request_load_flags, request_priority, |
| session, proxy_info, false, false, ssl_config_for_origin, |
| - ssl_config_for_proxy, true, net_log, 0, socket_handle, |
| + ssl_config_for_proxy, true, net_log, 0, true, socket_handle, |
| OnHostResolutionCallback(), callback); |
| } |
| @@ -427,7 +456,28 @@ int PreconnectSocketsForHttpRequest( |
| request_url, request_extra_headers, request_load_flags, request_priority, |
| session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn, |
| ssl_config_for_origin, ssl_config_for_proxy, false, net_log, |
| - num_preconnect_streams, NULL, OnHostResolutionCallback(), |
| + num_preconnect_streams, true, NULL, OnHostResolutionCallback(), |
| + CompletionCallback()); |
| +} |
| + |
| +int PretendToPreconnectSocketsForHttpRequest( |
| + const GURL& request_url, |
| + const HttpRequestHeaders& request_extra_headers, |
| + int request_load_flags, |
| + RequestPriority request_priority, |
| + HttpNetworkSession* session, |
| + const ProxyInfo& proxy_info, |
| + bool force_spdy_over_ssl, |
| + bool want_spdy_over_npn, |
| + const SSLConfig& ssl_config_for_origin, |
| + const SSLConfig& ssl_config_for_proxy, |
| + const BoundNetLog& net_log, |
| + int num_preconnect_streams) { |
| + return InitSocketPoolHelper( |
| + request_url, request_extra_headers, request_load_flags, request_priority, |
| + session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn, |
| + ssl_config_for_origin, ssl_config_for_proxy, false, net_log, |
| + num_preconnect_streams, false, NULL, OnHostResolutionCallback(), |
| CompletionCallback()); |
| } |