OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 // | |
5 // ClientSocketPoolManager manages access to all ClientSocketPools. It's a | |
6 // simple container for all of them. Most importantly, it handles the lifetime | |
7 // and destruction order properly. | |
8 | 4 |
9 #include "net/socket/client_socket_pool_manager.h" | 5 #include "net/socket/client_socket_pool_manager.h" |
10 | 6 |
11 #include <string> | 7 #include <string> |
12 | 8 |
13 #include "base/logging.h" | 9 #include "base/logging.h" |
14 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
15 #include "base/values.h" | 11 #include "net/base/load_flags.h" |
16 #include "net/base/ssl_config_service.h" | |
17 #include "net/http/http_network_session.h" | 12 #include "net/http/http_network_session.h" |
18 #include "net/http/http_proxy_client_socket_pool.h" | 13 #include "net/http/http_proxy_client_socket_pool.h" |
19 #include "net/http/http_request_info.h" | 14 #include "net/http/http_request_info.h" |
20 #include "net/proxy/proxy_service.h" | 15 #include "net/proxy/proxy_info.h" |
21 #include "net/socket/client_socket_factory.h" | |
22 #include "net/socket/client_socket_handle.h" | 16 #include "net/socket/client_socket_handle.h" |
23 #include "net/socket/client_socket_pool_histograms.h" | |
24 #include "net/socket/socks_client_socket_pool.h" | 17 #include "net/socket/socks_client_socket_pool.h" |
25 #include "net/socket/ssl_client_socket_pool.h" | 18 #include "net/socket/ssl_client_socket_pool.h" |
26 #include "net/socket/transport_client_socket_pool.h" | 19 #include "net/socket/transport_client_socket_pool.h" |
27 | 20 |
28 namespace net { | 21 namespace net { |
29 | 22 |
30 namespace { | 23 namespace { |
31 | 24 |
32 // Limit of sockets of each socket pool. | 25 // Limit of sockets of each socket pool. |
33 int g_max_sockets_per_pool = 256; | 26 int g_max_sockets_per_pool = 256; |
34 | 27 |
35 // Default to allow up to 6 connections per host. Experiment and tuning may | 28 // Default to allow up to 6 connections per host. Experiment and tuning may |
36 // try other values (greater than 0). Too large may cause many problems, such | 29 // try other values (greater than 0). Too large may cause many problems, such |
37 // as home routers blocking the connections!?!? See http://crbug.com/12066. | 30 // as home routers blocking the connections!?!? See http://crbug.com/12066. |
38 int g_max_sockets_per_group = 6; | 31 int g_max_sockets_per_group = 6; |
39 | 32 |
40 // The max number of sockets to allow per proxy server. This applies both to | 33 // The max number of sockets to allow per proxy server. This applies both to |
41 // http and SOCKS proxies. See http://crbug.com/12066 and | 34 // http and SOCKS proxies. See http://crbug.com/12066 and |
42 // http://crbug.com/44501 for details about proxy server connection limits. | 35 // http://crbug.com/44501 for details about proxy server connection limits. |
43 int g_max_sockets_per_proxy_server = kDefaultMaxSocketsPerProxyServer; | 36 int g_max_sockets_per_proxy_server = kDefaultMaxSocketsPerProxyServer; |
44 | 37 |
45 // Appends information about all |socket_pools| to the end of |list|. | |
46 template <class MapType> | |
47 static void AddSocketPoolsToList(ListValue* list, | |
48 const MapType& socket_pools, | |
49 const std::string& type, | |
50 bool include_nested_pools) { | |
51 for (typename MapType::const_iterator it = socket_pools.begin(); | |
52 it != socket_pools.end(); it++) { | |
53 list->Append(it->second->GetInfoAsValue(it->first.ToString(), | |
54 type, | |
55 include_nested_pools)); | |
56 } | |
57 } | |
58 | |
59 // The meat of the implementation for the InitSocketHandleForHttpRequest, | 38 // The meat of the implementation for the InitSocketHandleForHttpRequest, |
60 // InitSocketHandleForRawConnect and PreconnectSocketsForHttpRequest methods. | 39 // InitSocketHandleForRawConnect and PreconnectSocketsForHttpRequest methods. |
61 int InitSocketPoolHelper(const GURL& request_url, | 40 int InitSocketPoolHelper(const GURL& request_url, |
62 const HttpRequestHeaders& request_extra_headers, | 41 const HttpRequestHeaders& request_extra_headers, |
63 int request_load_flags, | 42 int request_load_flags, |
64 RequestPriority request_priority, | 43 RequestPriority request_priority, |
65 HttpNetworkSession* session, | 44 HttpNetworkSession* session, |
66 const ProxyInfo& proxy_info, | 45 const ProxyInfo& proxy_info, |
67 bool force_spdy_over_ssl, | 46 bool force_spdy_over_ssl, |
68 bool want_spdy_over_npn, | 47 bool want_spdy_over_npn, |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 return OK; | 214 return OK; |
236 } | 215 } |
237 | 216 |
238 return socket_handle->Init(connection_group, tcp_params, | 217 return socket_handle->Init(connection_group, tcp_params, |
239 request_priority, callback, | 218 request_priority, callback, |
240 pool, net_log); | 219 pool, net_log); |
241 } | 220 } |
242 | 221 |
243 } // namespace | 222 } // namespace |
244 | 223 |
245 ClientSocketPoolManager::ClientSocketPoolManager( | 224 ClientSocketPoolManager::ClientSocketPoolManager() {} |
246 NetLog* net_log, | 225 ClientSocketPoolManager::~ClientSocketPoolManager() {} |
247 ClientSocketFactory* socket_factory, | |
248 HostResolver* host_resolver, | |
249 CertVerifier* cert_verifier, | |
250 OriginBoundCertService* origin_bound_cert_service, | |
251 DnsRRResolver* dnsrr_resolver, | |
252 DnsCertProvenanceChecker* dns_cert_checker, | |
253 SSLHostInfoFactory* ssl_host_info_factory, | |
254 ProxyService* proxy_service, | |
255 SSLConfigService* ssl_config_service) | |
256 : net_log_(net_log), | |
257 socket_factory_(socket_factory), | |
258 host_resolver_(host_resolver), | |
259 cert_verifier_(cert_verifier), | |
260 origin_bound_cert_service_(origin_bound_cert_service), | |
261 dnsrr_resolver_(dnsrr_resolver), | |
262 dns_cert_checker_(dns_cert_checker), | |
263 ssl_host_info_factory_(ssl_host_info_factory), | |
264 proxy_service_(proxy_service), | |
265 ssl_config_service_(ssl_config_service), | |
266 transport_pool_histograms_("TCP"), | |
267 transport_socket_pool_(new TransportClientSocketPool( | |
268 g_max_sockets_per_pool, g_max_sockets_per_group, | |
269 &transport_pool_histograms_, | |
270 host_resolver, | |
271 socket_factory_, | |
272 net_log)), | |
273 ssl_pool_histograms_("SSL2"), | |
274 ssl_socket_pool_(new SSLClientSocketPool( | |
275 g_max_sockets_per_pool, g_max_sockets_per_group, | |
276 &ssl_pool_histograms_, | |
277 host_resolver, | |
278 cert_verifier, | |
279 origin_bound_cert_service, | |
280 dnsrr_resolver, | |
281 dns_cert_checker, | |
282 ssl_host_info_factory, | |
283 socket_factory, | |
284 transport_socket_pool_.get(), | |
285 NULL /* no socks proxy */, | |
286 NULL /* no http proxy */, | |
287 ssl_config_service, | |
288 net_log)), | |
289 transport_for_socks_pool_histograms_("TCPforSOCKS"), | |
290 socks_pool_histograms_("SOCK"), | |
291 transport_for_http_proxy_pool_histograms_("TCPforHTTPProxy"), | |
292 transport_for_https_proxy_pool_histograms_("TCPforHTTPSProxy"), | |
293 ssl_for_https_proxy_pool_histograms_("SSLforHTTPSProxy"), | |
294 http_proxy_pool_histograms_("HTTPProxy"), | |
295 ssl_socket_pool_for_proxies_histograms_("SSLForProxies") { | |
296 CertDatabase::AddObserver(this); | |
297 } | |
298 | 226 |
299 ClientSocketPoolManager::~ClientSocketPoolManager() { | 227 // static |
300 CertDatabase::RemoveObserver(this); | 228 int ClientSocketPoolManager::max_sockets_per_pool() { |
301 } | 229 return g_max_sockets_per_pool; |
302 | |
303 void ClientSocketPoolManager::FlushSocketPools() { | |
304 // Flush the highest level pools first, since higher level pools may release | |
305 // stuff to the lower level pools. | |
306 | |
307 for (SSLSocketPoolMap::const_iterator it = | |
308 ssl_socket_pools_for_proxies_.begin(); | |
309 it != ssl_socket_pools_for_proxies_.end(); | |
310 ++it) | |
311 it->second->Flush(); | |
312 | |
313 for (HTTPProxySocketPoolMap::const_iterator it = | |
314 http_proxy_socket_pools_.begin(); | |
315 it != http_proxy_socket_pools_.end(); | |
316 ++it) | |
317 it->second->Flush(); | |
318 | |
319 for (SSLSocketPoolMap::const_iterator it = | |
320 ssl_socket_pools_for_https_proxies_.begin(); | |
321 it != ssl_socket_pools_for_https_proxies_.end(); | |
322 ++it) | |
323 it->second->Flush(); | |
324 | |
325 for (TransportSocketPoolMap::const_iterator it = | |
326 transport_socket_pools_for_https_proxies_.begin(); | |
327 it != transport_socket_pools_for_https_proxies_.end(); | |
328 ++it) | |
329 it->second->Flush(); | |
330 | |
331 for (TransportSocketPoolMap::const_iterator it = | |
332 transport_socket_pools_for_http_proxies_.begin(); | |
333 it != transport_socket_pools_for_http_proxies_.end(); | |
334 ++it) | |
335 it->second->Flush(); | |
336 | |
337 for (SOCKSSocketPoolMap::const_iterator it = | |
338 socks_socket_pools_.begin(); | |
339 it != socks_socket_pools_.end(); | |
340 ++it) | |
341 it->second->Flush(); | |
342 | |
343 for (TransportSocketPoolMap::const_iterator it = | |
344 transport_socket_pools_for_socks_proxies_.begin(); | |
345 it != transport_socket_pools_for_socks_proxies_.end(); | |
346 ++it) | |
347 it->second->Flush(); | |
348 | |
349 ssl_socket_pool_->Flush(); | |
350 transport_socket_pool_->Flush(); | |
351 } | |
352 | |
353 void ClientSocketPoolManager::CloseIdleSockets() { | |
354 // Close sockets in the highest level pools first, since higher level pools' | |
355 // sockets may release stuff to the lower level pools. | |
356 for (SSLSocketPoolMap::const_iterator it = | |
357 ssl_socket_pools_for_proxies_.begin(); | |
358 it != ssl_socket_pools_for_proxies_.end(); | |
359 ++it) | |
360 it->second->CloseIdleSockets(); | |
361 | |
362 for (HTTPProxySocketPoolMap::const_iterator it = | |
363 http_proxy_socket_pools_.begin(); | |
364 it != http_proxy_socket_pools_.end(); | |
365 ++it) | |
366 it->second->CloseIdleSockets(); | |
367 | |
368 for (SSLSocketPoolMap::const_iterator it = | |
369 ssl_socket_pools_for_https_proxies_.begin(); | |
370 it != ssl_socket_pools_for_https_proxies_.end(); | |
371 ++it) | |
372 it->second->CloseIdleSockets(); | |
373 | |
374 for (TransportSocketPoolMap::const_iterator it = | |
375 transport_socket_pools_for_https_proxies_.begin(); | |
376 it != transport_socket_pools_for_https_proxies_.end(); | |
377 ++it) | |
378 it->second->CloseIdleSockets(); | |
379 | |
380 for (TransportSocketPoolMap::const_iterator it = | |
381 transport_socket_pools_for_http_proxies_.begin(); | |
382 it != transport_socket_pools_for_http_proxies_.end(); | |
383 ++it) | |
384 it->second->CloseIdleSockets(); | |
385 | |
386 for (SOCKSSocketPoolMap::const_iterator it = | |
387 socks_socket_pools_.begin(); | |
388 it != socks_socket_pools_.end(); | |
389 ++it) | |
390 it->second->CloseIdleSockets(); | |
391 | |
392 for (TransportSocketPoolMap::const_iterator it = | |
393 transport_socket_pools_for_socks_proxies_.begin(); | |
394 it != transport_socket_pools_for_socks_proxies_.end(); | |
395 ++it) | |
396 it->second->CloseIdleSockets(); | |
397 | |
398 ssl_socket_pool_->CloseIdleSockets(); | |
399 transport_socket_pool_->CloseIdleSockets(); | |
400 } | |
401 | |
402 SOCKSClientSocketPool* ClientSocketPoolManager::GetSocketPoolForSOCKSProxy( | |
403 const HostPortPair& socks_proxy) { | |
404 SOCKSSocketPoolMap::const_iterator it = socks_socket_pools_.find(socks_proxy); | |
405 if (it != socks_socket_pools_.end()) { | |
406 DCHECK(ContainsKey(transport_socket_pools_for_socks_proxies_, socks_proxy)); | |
407 return it->second; | |
408 } | |
409 | |
410 DCHECK(!ContainsKey(transport_socket_pools_for_socks_proxies_, socks_proxy)); | |
411 | |
412 std::pair<TransportSocketPoolMap::iterator, bool> tcp_ret = | |
413 transport_socket_pools_for_socks_proxies_.insert( | |
414 std::make_pair( | |
415 socks_proxy, | |
416 new TransportClientSocketPool( | |
417 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | |
418 &transport_for_socks_pool_histograms_, | |
419 host_resolver_, | |
420 socket_factory_, | |
421 net_log_))); | |
422 DCHECK(tcp_ret.second); | |
423 | |
424 std::pair<SOCKSSocketPoolMap::iterator, bool> ret = | |
425 socks_socket_pools_.insert( | |
426 std::make_pair(socks_proxy, new SOCKSClientSocketPool( | |
427 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | |
428 &socks_pool_histograms_, | |
429 host_resolver_, | |
430 tcp_ret.first->second, | |
431 net_log_))); | |
432 | |
433 return ret.first->second; | |
434 } | |
435 | |
436 HttpProxyClientSocketPool* ClientSocketPoolManager::GetSocketPoolForHTTPProxy( | |
437 const HostPortPair& http_proxy) { | |
438 HTTPProxySocketPoolMap::const_iterator it = | |
439 http_proxy_socket_pools_.find(http_proxy); | |
440 if (it != http_proxy_socket_pools_.end()) { | |
441 DCHECK(ContainsKey(transport_socket_pools_for_http_proxies_, http_proxy)); | |
442 DCHECK(ContainsKey(transport_socket_pools_for_https_proxies_, http_proxy)); | |
443 DCHECK(ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy)); | |
444 return it->second; | |
445 } | |
446 | |
447 DCHECK(!ContainsKey(transport_socket_pools_for_http_proxies_, http_proxy)); | |
448 DCHECK(!ContainsKey(transport_socket_pools_for_https_proxies_, http_proxy)); | |
449 DCHECK(!ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy)); | |
450 | |
451 std::pair<TransportSocketPoolMap::iterator, bool> tcp_http_ret = | |
452 transport_socket_pools_for_http_proxies_.insert( | |
453 std::make_pair( | |
454 http_proxy, | |
455 new TransportClientSocketPool( | |
456 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | |
457 &transport_for_http_proxy_pool_histograms_, | |
458 host_resolver_, | |
459 socket_factory_, | |
460 net_log_))); | |
461 DCHECK(tcp_http_ret.second); | |
462 | |
463 std::pair<TransportSocketPoolMap::iterator, bool> tcp_https_ret = | |
464 transport_socket_pools_for_https_proxies_.insert( | |
465 std::make_pair( | |
466 http_proxy, | |
467 new TransportClientSocketPool( | |
468 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | |
469 &transport_for_https_proxy_pool_histograms_, | |
470 host_resolver_, | |
471 socket_factory_, | |
472 net_log_))); | |
473 DCHECK(tcp_https_ret.second); | |
474 | |
475 std::pair<SSLSocketPoolMap::iterator, bool> ssl_https_ret = | |
476 ssl_socket_pools_for_https_proxies_.insert( | |
477 std::make_pair( | |
478 http_proxy, | |
479 new SSLClientSocketPool( | |
480 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | |
481 &ssl_for_https_proxy_pool_histograms_, | |
482 host_resolver_, | |
483 cert_verifier_, | |
484 origin_bound_cert_service_, | |
485 dnsrr_resolver_, | |
486 dns_cert_checker_, | |
487 ssl_host_info_factory_, | |
488 socket_factory_, | |
489 tcp_https_ret.first->second /* https proxy */, | |
490 NULL /* no socks proxy */, | |
491 NULL /* no http proxy */, | |
492 ssl_config_service_, net_log_))); | |
493 DCHECK(tcp_https_ret.second); | |
494 | |
495 std::pair<HTTPProxySocketPoolMap::iterator, bool> ret = | |
496 http_proxy_socket_pools_.insert( | |
497 std::make_pair( | |
498 http_proxy, | |
499 new HttpProxyClientSocketPool( | |
500 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | |
501 &http_proxy_pool_histograms_, | |
502 host_resolver_, | |
503 tcp_http_ret.first->second, | |
504 ssl_https_ret.first->second, | |
505 net_log_))); | |
506 | |
507 return ret.first->second; | |
508 } | |
509 | |
510 SSLClientSocketPool* ClientSocketPoolManager::GetSocketPoolForSSLWithProxy( | |
511 const HostPortPair& proxy_server) { | |
512 SSLSocketPoolMap::const_iterator it = | |
513 ssl_socket_pools_for_proxies_.find(proxy_server); | |
514 if (it != ssl_socket_pools_for_proxies_.end()) | |
515 return it->second; | |
516 | |
517 SSLClientSocketPool* new_pool = new SSLClientSocketPool( | |
518 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | |
519 &ssl_pool_histograms_, | |
520 host_resolver_, | |
521 cert_verifier_, | |
522 origin_bound_cert_service_, | |
523 dnsrr_resolver_, | |
524 dns_cert_checker_, | |
525 ssl_host_info_factory_, | |
526 socket_factory_, | |
527 NULL, /* no tcp pool, we always go through a proxy */ | |
528 GetSocketPoolForSOCKSProxy(proxy_server), | |
529 GetSocketPoolForHTTPProxy(proxy_server), | |
530 ssl_config_service_, | |
531 net_log_); | |
532 | |
533 std::pair<SSLSocketPoolMap::iterator, bool> ret = | |
534 ssl_socket_pools_for_proxies_.insert(std::make_pair(proxy_server, | |
535 new_pool)); | |
536 | |
537 return ret.first->second; | |
538 } | 230 } |
539 | 231 |
540 // static | 232 // static |
541 void ClientSocketPoolManager::set_max_sockets_per_pool(int socket_count) { | 233 void ClientSocketPoolManager::set_max_sockets_per_pool(int socket_count) { |
542 DCHECK_LT(0, socket_count); | 234 DCHECK_LT(0, socket_count); |
543 DCHECK_GT(1000, socket_count); // Sanity check. | 235 DCHECK_GT(1000, socket_count); // Sanity check. |
544 g_max_sockets_per_pool = socket_count; | 236 g_max_sockets_per_pool = socket_count; |
545 DCHECK_GE(g_max_sockets_per_pool, g_max_sockets_per_group); | 237 DCHECK_GE(g_max_sockets_per_pool, g_max_sockets_per_group); |
546 } | 238 } |
547 | 239 |
548 // static | 240 // static |
549 int ClientSocketPoolManager::max_sockets_per_group() { | 241 int ClientSocketPoolManager::max_sockets_per_group() { |
550 return g_max_sockets_per_group; | 242 return g_max_sockets_per_group; |
551 } | 243 } |
552 | 244 |
553 // static | 245 // static |
554 void ClientSocketPoolManager::set_max_sockets_per_group(int socket_count) { | 246 void ClientSocketPoolManager::set_max_sockets_per_group(int socket_count) { |
555 DCHECK_LT(0, socket_count); | 247 DCHECK_LT(0, socket_count); |
556 // The following is a sanity check... but we should NEVER be near this value. | 248 // The following is a sanity check... but we should NEVER be near this value. |
557 DCHECK_GT(100, socket_count); | 249 DCHECK_GT(100, socket_count); |
558 g_max_sockets_per_group = socket_count; | 250 g_max_sockets_per_group = socket_count; |
559 | 251 |
560 DCHECK_GE(g_max_sockets_per_pool, g_max_sockets_per_group); | 252 DCHECK_GE(g_max_sockets_per_pool, g_max_sockets_per_group); |
561 DCHECK_GE(g_max_sockets_per_proxy_server, g_max_sockets_per_group); | 253 DCHECK_GE(g_max_sockets_per_proxy_server, g_max_sockets_per_group); |
562 } | 254 } |
563 | 255 |
564 // static | 256 // static |
| 257 int ClientSocketPoolManager::max_sockets_per_proxy_server() { |
| 258 return g_max_sockets_per_proxy_server; |
| 259 } |
| 260 |
| 261 // static |
565 void ClientSocketPoolManager::set_max_sockets_per_proxy_server( | 262 void ClientSocketPoolManager::set_max_sockets_per_proxy_server( |
566 int socket_count) { | 263 int socket_count) { |
567 DCHECK_LT(0, socket_count); | 264 DCHECK_LT(0, socket_count); |
568 DCHECK_GT(100, socket_count); // Sanity check. | 265 DCHECK_GT(100, socket_count); // Sanity check. |
569 // Assert this case early on. The max number of sockets per group cannot | 266 // Assert this case early on. The max number of sockets per group cannot |
570 // exceed the max number of sockets per proxy server. | 267 // exceed the max number of sockets per proxy server. |
571 DCHECK_LE(g_max_sockets_per_group, socket_count); | 268 DCHECK_LE(g_max_sockets_per_group, socket_count); |
572 g_max_sockets_per_proxy_server = socket_count; | 269 g_max_sockets_per_proxy_server = socket_count; |
573 } | 270 } |
574 | 271 |
575 Value* ClientSocketPoolManager::SocketPoolInfoToValue() const { | 272 int InitSocketHandleForHttpRequest( |
576 ListValue* list = new ListValue(); | |
577 list->Append(transport_socket_pool_->GetInfoAsValue("transport_socket_pool", | |
578 "transport_socket_pool", | |
579 false)); | |
580 // Third parameter is false because |ssl_socket_pool_| uses | |
581 // |transport_socket_pool_| internally, and do not want to add it a second | |
582 // time. | |
583 list->Append(ssl_socket_pool_->GetInfoAsValue("ssl_socket_pool", | |
584 "ssl_socket_pool", | |
585 false)); | |
586 AddSocketPoolsToList(list, | |
587 http_proxy_socket_pools_, | |
588 "http_proxy_socket_pool", | |
589 true); | |
590 AddSocketPoolsToList(list, | |
591 socks_socket_pools_, | |
592 "socks_socket_pool", | |
593 true); | |
594 | |
595 // Third parameter is false because |ssl_socket_pools_for_proxies_| use | |
596 // socket pools in |http_proxy_socket_pools_| and |socks_socket_pools_|. | |
597 AddSocketPoolsToList(list, | |
598 ssl_socket_pools_for_proxies_, | |
599 "ssl_socket_pool_for_proxies", | |
600 false); | |
601 return list; | |
602 } | |
603 | |
604 void ClientSocketPoolManager::OnUserCertAdded(const X509Certificate* cert) { | |
605 FlushSocketPools(); | |
606 } | |
607 | |
608 void ClientSocketPoolManager::OnCertTrustChanged(const X509Certificate* cert) { | |
609 // We should flush the socket pools if we removed trust from a | |
610 // cert, because a previously trusted server may have become | |
611 // untrusted. | |
612 // | |
613 // We should not flush the socket pools if we added trust to a | |
614 // cert. | |
615 // | |
616 // Since the OnCertTrustChanged method doesn't tell us what | |
617 // kind of trust change it is, we have to flush the socket | |
618 // pools to be safe. | |
619 FlushSocketPools(); | |
620 } | |
621 | |
622 // static | |
623 int ClientSocketPoolManager::InitSocketHandleForHttpRequest( | |
624 const GURL& request_url, | 273 const GURL& request_url, |
625 const HttpRequestHeaders& request_extra_headers, | 274 const HttpRequestHeaders& request_extra_headers, |
626 int request_load_flags, | 275 int request_load_flags, |
627 RequestPriority request_priority, | 276 RequestPriority request_priority, |
628 HttpNetworkSession* session, | 277 HttpNetworkSession* session, |
629 const ProxyInfo& proxy_info, | 278 const ProxyInfo& proxy_info, |
630 bool force_spdy_over_ssl, | 279 bool force_spdy_over_ssl, |
631 bool want_spdy_over_npn, | 280 bool want_spdy_over_npn, |
632 const SSLConfig& ssl_config_for_origin, | 281 const SSLConfig& ssl_config_for_origin, |
633 const SSLConfig& ssl_config_for_proxy, | 282 const SSLConfig& ssl_config_for_proxy, |
(...skipping 11 matching lines...) Expand all Loading... |
645 want_spdy_over_npn, | 294 want_spdy_over_npn, |
646 ssl_config_for_origin, | 295 ssl_config_for_origin, |
647 ssl_config_for_proxy, | 296 ssl_config_for_proxy, |
648 false, | 297 false, |
649 net_log, | 298 net_log, |
650 0, | 299 0, |
651 socket_handle, | 300 socket_handle, |
652 callback); | 301 callback); |
653 } | 302 } |
654 | 303 |
655 // static | 304 int InitSocketHandleForRawConnect( |
656 int ClientSocketPoolManager::InitSocketHandleForRawConnect( | |
657 const HostPortPair& host_port_pair, | 305 const HostPortPair& host_port_pair, |
658 HttpNetworkSession* session, | 306 HttpNetworkSession* session, |
659 const ProxyInfo& proxy_info, | 307 const ProxyInfo& proxy_info, |
660 const SSLConfig& ssl_config_for_origin, | 308 const SSLConfig& ssl_config_for_origin, |
661 const SSLConfig& ssl_config_for_proxy, | 309 const SSLConfig& ssl_config_for_proxy, |
662 const BoundNetLog& net_log, | 310 const BoundNetLog& net_log, |
663 ClientSocketHandle* socket_handle, | 311 ClientSocketHandle* socket_handle, |
664 OldCompletionCallback* callback) { | 312 OldCompletionCallback* callback) { |
665 DCHECK(socket_handle); | 313 DCHECK(socket_handle); |
666 // Synthesize an HttpRequestInfo. | 314 // Synthesize an HttpRequestInfo. |
(...skipping 12 matching lines...) Expand all Loading... |
679 false, | 327 false, |
680 ssl_config_for_origin, | 328 ssl_config_for_origin, |
681 ssl_config_for_proxy, | 329 ssl_config_for_proxy, |
682 true, | 330 true, |
683 net_log, | 331 net_log, |
684 0, | 332 0, |
685 socket_handle, | 333 socket_handle, |
686 callback); | 334 callback); |
687 } | 335 } |
688 | 336 |
689 // static | 337 int PreconnectSocketsForHttpRequest( |
690 int ClientSocketPoolManager::PreconnectSocketsForHttpRequest( | |
691 const GURL& request_url, | 338 const GURL& request_url, |
692 const HttpRequestHeaders& request_extra_headers, | 339 const HttpRequestHeaders& request_extra_headers, |
693 int request_load_flags, | 340 int request_load_flags, |
694 RequestPriority request_priority, | 341 RequestPriority request_priority, |
695 HttpNetworkSession* session, | 342 HttpNetworkSession* session, |
696 const ProxyInfo& proxy_info, | 343 const ProxyInfo& proxy_info, |
697 bool force_spdy_over_ssl, | 344 bool force_spdy_over_ssl, |
698 bool want_spdy_over_npn, | 345 bool want_spdy_over_npn, |
699 const SSLConfig& ssl_config_for_origin, | 346 const SSLConfig& ssl_config_for_origin, |
700 const SSLConfig& ssl_config_for_proxy, | 347 const SSLConfig& ssl_config_for_proxy, |
701 const BoundNetLog& net_log, | 348 const BoundNetLog& net_log, |
702 int num_preconnect_streams) { | 349 int num_preconnect_streams) { |
703 return InitSocketPoolHelper(request_url, | 350 return InitSocketPoolHelper(request_url, |
704 request_extra_headers, | 351 request_extra_headers, |
705 request_load_flags, | 352 request_load_flags, |
706 request_priority, | 353 request_priority, |
707 session, | 354 session, |
708 proxy_info, | 355 proxy_info, |
709 force_spdy_over_ssl, | 356 force_spdy_over_ssl, |
710 want_spdy_over_npn, | 357 want_spdy_over_npn, |
711 ssl_config_for_origin, | 358 ssl_config_for_origin, |
712 ssl_config_for_proxy, | 359 ssl_config_for_proxy, |
713 false, | 360 false, |
714 net_log, | 361 net_log, |
715 num_preconnect_streams, | 362 num_preconnect_streams, |
716 NULL, | 363 NULL, |
717 NULL); | 364 NULL); |
718 } | 365 } |
719 | 366 |
720 | |
721 } // namespace net | 367 } // namespace net |
OLD | NEW |