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

Unified Diff: net/http/http_network_session.cc

Issue 1615005: Flush socket pools and SPDY session pool properly on explicit requests and network changes. (Closed)
Patch Set: Fix minor leak. Created 10 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/http/http_network_session.h ('k') | net/http/http_network_session_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « net/http/http_network_session.h ('k') | net/http/http_network_session_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698