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()); |
} |