Index: net/http/http_network_session.cc |
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc |
index 3c44b814ca8cd602a3e6d41526b9dd9be6a511dc..90e865f0b182e1070f088017cd447725fe878816 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 |