summaryrefslogtreecommitdiffstats
path: root/net/base/network_change_notifier_helper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/base/network_change_notifier_helper.cc')
-rw-r--r--net/base/network_change_notifier_helper.cc45
1 files changed, 45 insertions, 0 deletions
diff --git a/net/base/network_change_notifier_helper.cc b/net/base/network_change_notifier_helper.cc
new file mode 100644
index 0000000..052e3ef8
--- /dev/null
+++ b/net/base/network_change_notifier_helper.cc
@@ -0,0 +1,45 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/base/network_change_notifier_helper.h"
+#include <algorithm>
+#include "base/logging.h"
+
+namespace net {
+
+namespace internal {
+
+NetworkChangeNotifierHelper::NetworkChangeNotifierHelper()
+ : is_notifying_observers_(false) {}
+
+NetworkChangeNotifierHelper::~NetworkChangeNotifierHelper() {
+ // TODO(willchan): Re-enable this DCHECK after fixing http://crbug.com/34391
+ // since we're leaking URLRequestContextGetters that cause this DCHECK to
+ // fire.
+ // DCHECK(observers_.empty());
+}
+
+void NetworkChangeNotifierHelper::AddObserver(Observer* observer) {
+ DCHECK(!is_notifying_observers_);
+ observers_.push_back(observer);
+}
+
+void NetworkChangeNotifierHelper::RemoveObserver(Observer* observer) {
+ DCHECK(!is_notifying_observers_);
+ observers_.erase(std::remove(observers_.begin(), observers_.end(), observer));
+}
+
+void NetworkChangeNotifierHelper::OnIPAddressChanged() {
+ DCHECK(!is_notifying_observers_);
+ is_notifying_observers_ = true;
+ for (std::vector<Observer*>::iterator it = observers_.begin();
+ it != observers_.end(); ++it) {
+ (*it)->OnIPAddressChanged();
+ }
+ is_notifying_observers_ = false;
+}
+
+} // namespace internal
+
+} // namespace net