Index: net/base/network_change_notifier.cc |
=================================================================== |
--- net/base/network_change_notifier.cc (revision 50775) |
+++ net/base/network_change_notifier.cc (working copy) |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2010 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. |
@@ -14,9 +14,22 @@ |
namespace net { |
-// static |
-NetworkChangeNotifier* |
-NetworkChangeNotifier::CreateDefaultNetworkChangeNotifier() { |
+namespace { |
+ |
+// The actual singleton notifier. The class contract forbids usage of the API |
+// in ways that would require us to place locks around access to this object. |
+// (The prohibition on global non-POD objects makes it tricky to do such a thing |
+// anyway.) |
+NetworkChangeNotifier* g_network_change_notifier = NULL; |
+ |
+} // namespace |
+ |
+NetworkChangeNotifier::~NetworkChangeNotifier() { |
+ DCHECK_EQ(this, g_network_change_notifier); |
+ g_network_change_notifier = NULL; |
+} |
+ |
+NetworkChangeNotifier* NetworkChangeNotifier::Create() { |
#if defined(OS_WIN) |
return new NetworkChangeNotifierWin(); |
#elif defined(OS_LINUX) |
@@ -29,4 +42,27 @@ |
#endif |
} |
+void NetworkChangeNotifier::AddObserver(Observer* observer) { |
+ if (g_network_change_notifier) |
+ g_network_change_notifier->observer_list_->AddObserver(observer); |
+} |
+ |
+void NetworkChangeNotifier::RemoveObserver(Observer* observer) { |
+ if (g_network_change_notifier) |
+ g_network_change_notifier->observer_list_->RemoveObserver(observer); |
+} |
+ |
+NetworkChangeNotifier::NetworkChangeNotifier() |
+ : observer_list_(new ObserverListThreadSafe<Observer>()) { |
+ DCHECK(!g_network_change_notifier); |
+ g_network_change_notifier = this; |
+} |
+ |
+void NetworkChangeNotifier::NotifyObserversOfIPAddressChange() { |
+ if (g_network_change_notifier) { |
+ g_network_change_notifier->observer_list_->Notify( |
+ &Observer::OnIPAddressChanged); |
+ } |
+} |
+ |
} // namespace net |