Index: net/socket/client_socket_pool_base.cc |
diff --git a/net/socket/client_socket_pool_base.cc b/net/socket/client_socket_pool_base.cc |
index eb1cd5134c2ca190cf65e3bf2a4388f8e9e0c262..4b6cff0820b55697dca63d1916a2477b1af1a3b2 100644 |
--- a/net/socket/client_socket_pool_base.cc |
+++ b/net/socket/client_socket_pool_base.cc |
@@ -110,7 +110,8 @@ ClientSocketPoolBaseHelper::ClientSocketPoolBaseHelper( |
int max_sockets_per_group, |
base::TimeDelta unused_idle_socket_timeout, |
base::TimeDelta used_idle_socket_timeout, |
- ConnectJobFactory* connect_job_factory) |
+ ConnectJobFactory* connect_job_factory, |
+ NetworkChangeNotifier* network_change_notifier) |
: idle_socket_count_(0), |
connecting_socket_count_(0), |
handed_out_socket_count_(0), |
@@ -120,10 +121,14 @@ ClientSocketPoolBaseHelper::ClientSocketPoolBaseHelper( |
used_idle_socket_timeout_(used_idle_socket_timeout), |
may_have_stalled_group_(false), |
connect_job_factory_(connect_job_factory), |
+ network_change_notifier_(network_change_notifier), |
backup_jobs_enabled_(false), |
ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { |
DCHECK_LE(0, max_sockets_per_group); |
DCHECK_LE(max_sockets_per_group, max_sockets); |
+ |
+ if (network_change_notifier_) |
+ network_change_notifier_->AddObserver(this); |
} |
ClientSocketPoolBaseHelper::~ClientSocketPoolBaseHelper() { |
@@ -135,6 +140,9 @@ ClientSocketPoolBaseHelper::~ClientSocketPoolBaseHelper() { |
CloseIdleSockets(); |
CHECK(group_map_.empty()); |
DCHECK_EQ(0, connecting_socket_count_); |
+ |
+ if (network_change_notifier_) |
+ network_change_notifier_->RemoveObserver(this); |
} |
// InsertRequestIntoQueue inserts the request into the queue based on |
@@ -583,6 +591,10 @@ void ClientSocketPoolBaseHelper::OnConnectJobComplete( |
} |
} |
+void ClientSocketPoolBaseHelper::OnIPAddressChanged() { |
+ CloseIdleSockets(); |
+} |
+ |
void ClientSocketPoolBaseHelper::RemoveConnectJob(const ConnectJob *job, |
Group* group) { |
CHECK_GT(connecting_socket_count_, 0); |