diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-08 01:48:31 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-08 01:48:31 +0000 |
commit | 9b3ef464c036a62a58a073e14b79cf9ecb790578 (patch) | |
tree | 816e67d3cf423e3f27997a3fc259d7cf855883d3 /net/http/http_network_session.cc | |
parent | 65695a1fa1d175e85663eeb8ae0f1942c3d09703 (diff) | |
download | chromium_src-9b3ef464c036a62a58a073e14b79cf9ecb790578.zip chromium_src-9b3ef464c036a62a58a073e14b79cf9ecb790578.tar.gz chromium_src-9b3ef464c036a62a58a073e14b79cf9ecb790578.tar.bz2 |
Flush socket pools and SPDY session pool properly on explicit requests and network changes.
BUG=40455,40457
Review URL: http://codereview.chromium.org/1615005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43908 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http/http_network_session.cc')
-rw-r--r-- | net/http/http_network_session.cc | 65 |
1 files changed, 42 insertions, 23 deletions
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc index 3c44b81..90e865f 100644 --- a/net/http/http_network_session.cc +++ b/net/http/http_network_session.cc @@ -29,30 +29,26 @@ HttpNetworkSession::HttpNetworkSession( ProxyService* proxy_service, ClientSocketFactory* client_socket_factory, SSLConfigService* ssl_config_service, - SpdySessionPool* spdy_session_pool, HttpAuthHandlerFactory* http_auth_handler_factory) : network_change_notifier_(network_change_notifier), - tcp_socket_pool_(new TCPClientSocketPool( - max_sockets_, max_sockets_per_group_, "Transport", - host_resolver, client_socket_factory, network_change_notifier_)), - socks_socket_pool_(new SOCKSClientSocketPool( - max_sockets_, max_sockets_per_group_, "SOCKS", host_resolver, - new TCPClientSocketPool(max_sockets_, max_sockets_per_group_, - "TCPForSOCKS", host_resolver, - client_socket_factory, - network_change_notifier_), - network_change_notifier_)), socket_factory_(client_socket_factory), host_resolver_(host_resolver), + tcp_socket_pool_(CreateNewTCPSocketPool()), + socks_socket_pool_(CreateNewSOCKSSocketPool()), proxy_service_(proxy_service), ssl_config_service_(ssl_config_service), - spdy_session_pool_(spdy_session_pool), + spdy_session_pool_(new SpdySessionPool()), http_auth_handler_factory_(http_auth_handler_factory) { DCHECK(proxy_service); DCHECK(ssl_config_service); + + if (network_change_notifier) + network_change_notifier_->AddObserver(this); } HttpNetworkSession::~HttpNetworkSession() { + if (network_change_notifier_) + network_change_notifier_->RemoveObserver(this); } URLSecurityManager* HttpNetworkSession::GetURLSecurityManager() { @@ -67,21 +63,44 @@ URLSecurityManager* HttpNetworkSession::GetURLSecurityManager() { // static void HttpNetworkSession::set_max_sockets_per_group(int socket_count) { - DCHECK(0 < socket_count); + DCHECK_LT(0, socket_count); // The following is a sanity check... but we should NEVER be near this value. - DCHECK(100 > socket_count); + DCHECK_GT(100, socket_count); max_sockets_per_group_ = socket_count; } -// TODO(vandebo) when we've completely converted to pools, the base TCP -// pool name should get changed to TCP instead of Transport. -void HttpNetworkSession::ReplaceTCPSocketPool() { - tcp_socket_pool_ = new TCPClientSocketPool(max_sockets_, - max_sockets_per_group_, - "Transport", - host_resolver_, - socket_factory_, - network_change_notifier_); +void HttpNetworkSession::Flush() { + host_resolver()->Flush(); + tcp_socket_pool()->CloseIdleSockets(); + tcp_socket_pool_ = CreateNewTCPSocketPool(); + socks_socket_pool()->CloseIdleSockets(); + socks_socket_pool_ = CreateNewSOCKSSocketPool(); + spdy_session_pool_->CloseAllSessions(); + spdy_session_pool_ = new SpdySessionPool; +} + +void HttpNetworkSession::OnIPAddressChanged() { + Flush(); +} + +scoped_refptr<TCPClientSocketPool> +HttpNetworkSession::CreateNewTCPSocketPool() { + // TODO(vandebo) when we've completely converted to pools, the base TCP + // pool name should get changed to TCP instead of Transport. + return new TCPClientSocketPool(max_sockets_, + max_sockets_per_group_, + "Transport", + host_resolver_, + socket_factory_); +} + +scoped_refptr<SOCKSClientSocketPool> +HttpNetworkSession::CreateNewSOCKSSocketPool() { + return new SOCKSClientSocketPool( + max_sockets_, max_sockets_per_group_, "SOCKS", host_resolver_, + new TCPClientSocketPool(max_sockets_, max_sockets_per_group_, + "TCPForSOCKS", host_resolver_, + socket_factory_)); } } // namespace net |