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

Side by Side Diff: net/base/network_change_notifier.cc

Issue 2802015: Massively simplify the NetworkChangeNotifier infrastructure:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/base/network_change_notifier.h" 5 #include "net/base/network_change_notifier.h"
6 #include "build/build_config.h" 6 #include "build/build_config.h"
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include "net/base/network_change_notifier_win.h" 8 #include "net/base/network_change_notifier_win.h"
9 #elif defined(OS_LINUX) 9 #elif defined(OS_LINUX)
10 #include "net/base/network_change_notifier_linux.h" 10 #include "net/base/network_change_notifier_linux.h"
11 #elif defined(OS_MACOSX) 11 #elif defined(OS_MACOSX)
12 #include "net/base/network_change_notifier_mac.h" 12 #include "net/base/network_change_notifier_mac.h"
13 #endif 13 #endif
14 14
15 namespace net { 15 namespace net {
16 16
17 // static 17 namespace {
18 NetworkChangeNotifier* 18
19 NetworkChangeNotifier::CreateDefaultNetworkChangeNotifier() { 19 // The actual singleton notifier. The class contract forbids usage of the API
20 // in ways that would require us to place locks around access to this object.
21 // (The prohibition on global non-POD objects makes it tricky to do such a thing
22 // anyway.)
23 NetworkChangeNotifier* g_network_change_notifier = NULL;
24
25 } // namespace
26
27 NetworkChangeNotifier::~NetworkChangeNotifier() {
28 DCHECK_EQ(this, g_network_change_notifier);
29 g_network_change_notifier = NULL;
30 }
31
32 NetworkChangeNotifier* NetworkChangeNotifier::Create() {
20 #if defined(OS_WIN) 33 #if defined(OS_WIN)
21 return new NetworkChangeNotifierWin(); 34 return new NetworkChangeNotifierWin();
22 #elif defined(OS_LINUX) 35 #elif defined(OS_LINUX)
23 return new NetworkChangeNotifierLinux(); 36 return new NetworkChangeNotifierLinux();
24 #elif defined(OS_MACOSX) 37 #elif defined(OS_MACOSX)
25 return new NetworkChangeNotifierMac(); 38 return new NetworkChangeNotifierMac();
26 #else 39 #else
27 NOTIMPLEMENTED(); 40 NOTIMPLEMENTED();
28 return NULL; 41 return NULL;
29 #endif 42 #endif
30 } 43 }
31 44
45 void NetworkChangeNotifier::AddObserver(Observer* observer) {
46 if (g_network_change_notifier)
47 g_network_change_notifier->observer_list_->AddObserver(observer);
48 }
49
50 void NetworkChangeNotifier::RemoveObserver(Observer* observer) {
51 if (g_network_change_notifier)
52 g_network_change_notifier->observer_list_->RemoveObserver(observer);
53 }
54
55 NetworkChangeNotifier::NetworkChangeNotifier()
56 : observer_list_(new ObserverListThreadSafe<Observer>()) {
57 DCHECK(!g_network_change_notifier);
58 g_network_change_notifier = this;
59 }
60
61 void NetworkChangeNotifier::NotifyObserversOfIPAddressChange() {
62 if (g_network_change_notifier) {
63 g_network_change_notifier->observer_list_->Notify(
64 &Observer::OnIPAddressChanged);
65 }
66 }
67
32 } // namespace net 68 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698