diff options
Diffstat (limited to 'net/base/network_change_notifier_helper.cc')
-rw-r--r-- | net/base/network_change_notifier_helper.cc | 45 |
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 |