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

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

Issue 1376473003: Notify NQE of TCP RTT values (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More plumbing Created 4 years, 9 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_impl.h" 5 #include "net/socket/client_socket_pool_manager_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/values.h" 11 #include "base/values.h"
12 #include "net/http/http_network_session.h" 12 #include "net/http/http_network_session.h"
13 #include "net/http/http_proxy_client_socket_pool.h" 13 #include "net/http/http_proxy_client_socket_pool.h"
14 #include "net/socket/socks_client_socket_pool.h" 14 #include "net/socket/socks_client_socket_pool.h"
15 #include "net/socket/ssl_client_socket_pool.h" 15 #include "net/socket/ssl_client_socket_pool.h"
16 #include "net/socket/transport_client_socket_pool.h" 16 #include "net/socket/transport_client_socket_pool.h"
17 #include "net/socket/websocket_transport_client_socket_pool.h" 17 #include "net/socket/websocket_transport_client_socket_pool.h"
18 #include "net/ssl/ssl_config_service.h" 18 #include "net/ssl/ssl_config_service.h"
19 19
20 namespace net { 20 namespace net {
21 21
22 class SocketPerformanceWatcherFactory;
23
22 namespace { 24 namespace {
23 25
24 // Appends information about all |socket_pools| to the end of |list|. 26 // Appends information about all |socket_pools| to the end of |list|.
25 template <class MapType> 27 template <class MapType>
26 void AddSocketPoolsToList(base::ListValue* list, 28 void AddSocketPoolsToList(base::ListValue* list,
27 const MapType& socket_pools, 29 const MapType& socket_pools,
28 const std::string& type, 30 const std::string& type,
29 bool include_nested_pools) { 31 bool include_nested_pools) {
30 for (typename MapType::const_iterator it = socket_pools.begin(); 32 for (typename MapType::const_iterator it = socket_pools.begin();
31 it != socket_pools.end(); it++) { 33 it != socket_pools.end(); it++) {
32 list->Append(it->second->GetInfoAsValue(it->first.ToString(), 34 list->Append(it->second->GetInfoAsValue(it->first.ToString(),
33 type, 35 type,
34 include_nested_pools)); 36 include_nested_pools));
35 } 37 }
36 } 38 }
37 39
38 } // namespace 40 } // namespace
39 41
40 ClientSocketPoolManagerImpl::ClientSocketPoolManagerImpl( 42 ClientSocketPoolManagerImpl::ClientSocketPoolManagerImpl(
41 NetLog* net_log, 43 NetLog* net_log,
42 ClientSocketFactory* socket_factory, 44 ClientSocketFactory* socket_factory,
45 SocketPerformanceWatcherFactory* socket_performance_watcher_factory,
43 HostResolver* host_resolver, 46 HostResolver* host_resolver,
44 CertVerifier* cert_verifier, 47 CertVerifier* cert_verifier,
45 ChannelIDService* channel_id_service, 48 ChannelIDService* channel_id_service,
46 TransportSecurityState* transport_security_state, 49 TransportSecurityState* transport_security_state,
47 CTVerifier* cert_transparency_verifier, 50 CTVerifier* cert_transparency_verifier,
48 CTPolicyEnforcer* ct_policy_enforcer, 51 CTPolicyEnforcer* ct_policy_enforcer,
49 const std::string& ssl_session_cache_shard, 52 const std::string& ssl_session_cache_shard,
50 SSLConfigService* ssl_config_service, 53 SSLConfigService* ssl_config_service,
51 HttpNetworkSession::SocketPoolType pool_type) 54 HttpNetworkSession::SocketPoolType pool_type)
52 : net_log_(net_log), 55 : net_log_(net_log),
53 socket_factory_(socket_factory), 56 socket_factory_(socket_factory),
57 socket_performance_watcher_factory_(socket_performance_watcher_factory),
54 host_resolver_(host_resolver), 58 host_resolver_(host_resolver),
55 cert_verifier_(cert_verifier), 59 cert_verifier_(cert_verifier),
56 channel_id_service_(channel_id_service), 60 channel_id_service_(channel_id_service),
57 transport_security_state_(transport_security_state), 61 transport_security_state_(transport_security_state),
58 cert_transparency_verifier_(cert_transparency_verifier), 62 cert_transparency_verifier_(cert_transparency_verifier),
59 ct_policy_enforcer_(ct_policy_enforcer), 63 ct_policy_enforcer_(ct_policy_enforcer),
60 ssl_session_cache_shard_(ssl_session_cache_shard), 64 ssl_session_cache_shard_(ssl_session_cache_shard),
61 ssl_config_service_(ssl_config_service), 65 ssl_config_service_(ssl_config_service),
62 pool_type_(pool_type), 66 pool_type_(pool_type),
63 transport_socket_pool_( 67 transport_socket_pool_(pool_type ==
64 pool_type == HttpNetworkSession::WEBSOCKET_SOCKET_POOL 68 HttpNetworkSession::WEBSOCKET_SOCKET_POOL
65 ? new WebSocketTransportClientSocketPool( 69 ? new WebSocketTransportClientSocketPool(
66 max_sockets_per_pool(pool_type), 70 max_sockets_per_pool(pool_type),
67 max_sockets_per_group(pool_type), 71 max_sockets_per_group(pool_type),
68 host_resolver, 72 host_resolver,
69 socket_factory_, 73 socket_factory_,
70 net_log) 74 net_log)
71 : new TransportClientSocketPool(max_sockets_per_pool(pool_type), 75 : new TransportClientSocketPool(
72 max_sockets_per_group(pool_type), 76 max_sockets_per_pool(pool_type),
73 host_resolver, 77 max_sockets_per_group(pool_type),
74 socket_factory_, 78 host_resolver,
75 net_log)), 79 socket_factory_,
80 socket_performance_watcher_factory_,
81 net_log)),
76 ssl_socket_pool_(new SSLClientSocketPool(max_sockets_per_pool(pool_type), 82 ssl_socket_pool_(new SSLClientSocketPool(max_sockets_per_pool(pool_type),
77 max_sockets_per_group(pool_type), 83 max_sockets_per_group(pool_type),
78 cert_verifier, 84 cert_verifier,
79 channel_id_service, 85 channel_id_service,
80 transport_security_state, 86 transport_security_state,
81 cert_transparency_verifier, 87 cert_transparency_verifier,
82 ct_policy_enforcer, 88 ct_policy_enforcer,
83 ssl_session_cache_shard, 89 ssl_session_cache_shard,
84 socket_factory, 90 socket_factory,
85 transport_socket_pool_.get(), 91 transport_socket_pool_.get(),
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 DCHECK(ContainsKey(transport_socket_pools_for_socks_proxies_, socks_proxy)); 215 DCHECK(ContainsKey(transport_socket_pools_for_socks_proxies_, socks_proxy));
210 return it->second; 216 return it->second;
211 } 217 }
212 218
213 DCHECK(!ContainsKey(transport_socket_pools_for_socks_proxies_, socks_proxy)); 219 DCHECK(!ContainsKey(transport_socket_pools_for_socks_proxies_, socks_proxy));
214 int sockets_per_proxy_server = max_sockets_per_proxy_server(pool_type_); 220 int sockets_per_proxy_server = max_sockets_per_proxy_server(pool_type_);
215 int sockets_per_group = std::min(sockets_per_proxy_server, 221 int sockets_per_group = std::min(sockets_per_proxy_server,
216 max_sockets_per_group(pool_type_)); 222 max_sockets_per_group(pool_type_));
217 223
218 std::pair<TransportSocketPoolMap::iterator, bool> tcp_ret = 224 std::pair<TransportSocketPoolMap::iterator, bool> tcp_ret =
219 transport_socket_pools_for_socks_proxies_.insert( 225 transport_socket_pools_for_socks_proxies_.insert(std::make_pair(
220 std::make_pair( 226 socks_proxy,
221 socks_proxy, 227 new TransportClientSocketPool(sockets_per_proxy_server,
222 new TransportClientSocketPool( 228 sockets_per_group, host_resolver_,
223 sockets_per_proxy_server, 229 socket_factory_, nullptr, net_log_)));
224 sockets_per_group,
225 host_resolver_,
226 socket_factory_,
227 net_log_)));
228 DCHECK(tcp_ret.second); 230 DCHECK(tcp_ret.second);
229 231
230 std::pair<SOCKSSocketPoolMap::iterator, bool> ret = 232 std::pair<SOCKSSocketPoolMap::iterator, bool> ret =
231 socks_socket_pools_.insert( 233 socks_socket_pools_.insert(std::make_pair(
232 std::make_pair(socks_proxy, new SOCKSClientSocketPool( 234 socks_proxy,
233 sockets_per_proxy_server, 235 new SOCKSClientSocketPool(sockets_per_proxy_server, sockets_per_group,
234 sockets_per_group, 236 host_resolver_, tcp_ret.first->second,
235 host_resolver_, 237 nullptr, net_log_)));
236 tcp_ret.first->second,
237 net_log_)));
238 238
239 return ret.first->second; 239 return ret.first->second;
240 } 240 }
241 241
242 HttpProxyClientSocketPool* 242 HttpProxyClientSocketPool*
243 ClientSocketPoolManagerImpl::GetSocketPoolForHTTPProxy( 243 ClientSocketPoolManagerImpl::GetSocketPoolForHTTPProxy(
244 const HostPortPair& http_proxy) { 244 const HostPortPair& http_proxy) {
245 HTTPProxySocketPoolMap::const_iterator it = 245 HTTPProxySocketPoolMap::const_iterator it =
246 http_proxy_socket_pools_.find(http_proxy); 246 http_proxy_socket_pools_.find(http_proxy);
247 if (it != http_proxy_socket_pools_.end()) { 247 if (it != http_proxy_socket_pools_.end()) {
248 DCHECK(ContainsKey(transport_socket_pools_for_http_proxies_, http_proxy)); 248 DCHECK(ContainsKey(transport_socket_pools_for_http_proxies_, http_proxy));
249 DCHECK(ContainsKey(transport_socket_pools_for_https_proxies_, http_proxy)); 249 DCHECK(ContainsKey(transport_socket_pools_for_https_proxies_, http_proxy));
250 DCHECK(ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy)); 250 DCHECK(ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy));
251 return it->second; 251 return it->second;
252 } 252 }
253 253
254 DCHECK(!ContainsKey(transport_socket_pools_for_http_proxies_, http_proxy)); 254 DCHECK(!ContainsKey(transport_socket_pools_for_http_proxies_, http_proxy));
255 DCHECK(!ContainsKey(transport_socket_pools_for_https_proxies_, http_proxy)); 255 DCHECK(!ContainsKey(transport_socket_pools_for_https_proxies_, http_proxy));
256 DCHECK(!ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy)); 256 DCHECK(!ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy));
257 257
258 int sockets_per_proxy_server = max_sockets_per_proxy_server(pool_type_); 258 int sockets_per_proxy_server = max_sockets_per_proxy_server(pool_type_);
259 int sockets_per_group = std::min(sockets_per_proxy_server, 259 int sockets_per_group = std::min(sockets_per_proxy_server,
260 max_sockets_per_group(pool_type_)); 260 max_sockets_per_group(pool_type_));
261 261
262 std::pair<TransportSocketPoolMap::iterator, bool> tcp_http_ret = 262 std::pair<TransportSocketPoolMap::iterator, bool> tcp_http_ret =
263 transport_socket_pools_for_http_proxies_.insert( 263 transport_socket_pools_for_http_proxies_.insert(std::make_pair(
264 std::make_pair( 264 http_proxy,
265 http_proxy, 265 new TransportClientSocketPool(
266 new TransportClientSocketPool( 266 sockets_per_proxy_server, sockets_per_group, host_resolver_,
267 sockets_per_proxy_server, 267 socket_factory_, socket_performance_watcher_factory_, net_log_)));
268 sockets_per_group,
269 host_resolver_,
270 socket_factory_,
271 net_log_)));
272 DCHECK(tcp_http_ret.second); 268 DCHECK(tcp_http_ret.second);
273 269
274 std::pair<TransportSocketPoolMap::iterator, bool> tcp_https_ret = 270 std::pair<TransportSocketPoolMap::iterator, bool> tcp_https_ret =
275 transport_socket_pools_for_https_proxies_.insert( 271 transport_socket_pools_for_https_proxies_.insert(std::make_pair(
276 std::make_pair( 272 http_proxy,
277 http_proxy, 273 new TransportClientSocketPool(
278 new TransportClientSocketPool( 274 sockets_per_proxy_server, sockets_per_group, host_resolver_,
279 sockets_per_proxy_server, 275 socket_factory_, socket_performance_watcher_factory_, net_log_)));
280 sockets_per_group,
281 host_resolver_,
282 socket_factory_,
283 net_log_)));
284 DCHECK(tcp_https_ret.second); 276 DCHECK(tcp_https_ret.second);
285 277
286 std::pair<SSLSocketPoolMap::iterator, bool> ssl_https_ret = 278 std::pair<SSLSocketPoolMap::iterator, bool> ssl_https_ret =
287 ssl_socket_pools_for_https_proxies_.insert(std::make_pair( 279 ssl_socket_pools_for_https_proxies_.insert(std::make_pair(
288 http_proxy, 280 http_proxy,
289 new SSLClientSocketPool( 281 new SSLClientSocketPool(
290 sockets_per_proxy_server, sockets_per_group, cert_verifier_, 282 sockets_per_proxy_server, sockets_per_group, cert_verifier_,
291 channel_id_service_, transport_security_state_, 283 channel_id_service_, transport_security_state_,
292 cert_transparency_verifier_, ct_policy_enforcer_, 284 cert_transparency_verifier_, ct_policy_enforcer_,
293 ssl_session_cache_shard_, socket_factory_, 285 ssl_session_cache_shard_, socket_factory_,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 // We should not flush the socket pools if we added trust to a 367 // We should not flush the socket pools if we added trust to a
376 // cert. 368 // cert.
377 // 369 //
378 // Since the OnCACertChanged method doesn't tell us what 370 // Since the OnCACertChanged method doesn't tell us what
379 // kind of change it is, we have to flush the socket 371 // kind of change it is, we have to flush the socket
380 // pools to be safe. 372 // pools to be safe.
381 FlushSocketPoolsWithError(ERR_NETWORK_CHANGED); 373 FlushSocketPoolsWithError(ERR_NETWORK_CHANGED);
382 } 374 }
383 375
384 } // namespace net 376 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698