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

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

Issue 10377092: [net/dns] Isolate DnsConfigWatcher from DnsConfigService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments. Braces. Created 8 years, 7 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "net/base/network_change_notifier_factory.h" 6 #include "net/base/network_change_notifier_factory.h"
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 #if defined(OS_WIN) 8 #if defined(OS_WIN)
9 #include "net/base/network_change_notifier_win.h" 9 #include "net/base/network_change_notifier_win.h"
10 #elif defined(OS_LINUX) && !defined(OS_CHROMEOS) 10 #elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 #endif 74 #endif
75 } 75 }
76 76
77 // static 77 // static
78 bool NetworkChangeNotifier::IsOffline() { 78 bool NetworkChangeNotifier::IsOffline() {
79 return g_network_change_notifier && 79 return g_network_change_notifier &&
80 g_network_change_notifier->IsCurrentlyOffline(); 80 g_network_change_notifier->IsCurrentlyOffline();
81 } 81 }
82 82
83 // static 83 // static
84 bool NetworkChangeNotifier::IsWatchingDNS() {
85 if (!g_network_change_notifier)
86 return false;
87 base::AutoLock(g_network_change_notifier->watching_dns_lock_);
88 return g_network_change_notifier->watching_dns_;
89 }
90
91 // static
84 NetworkChangeNotifier* NetworkChangeNotifier::CreateMock() { 92 NetworkChangeNotifier* NetworkChangeNotifier::CreateMock() {
85 return new MockNetworkChangeNotifier(); 93 return new MockNetworkChangeNotifier();
86 } 94 }
87 95
88 void NetworkChangeNotifier::AddIPAddressObserver(IPAddressObserver* observer) { 96 void NetworkChangeNotifier::AddIPAddressObserver(IPAddressObserver* observer) {
89 if (g_network_change_notifier) 97 if (g_network_change_notifier)
90 g_network_change_notifier->ip_address_observer_list_->AddObserver(observer); 98 g_network_change_notifier->ip_address_observer_list_->AddObserver(observer);
91 } 99 }
92 100
93 void NetworkChangeNotifier::AddOnlineStateObserver( 101 void NetworkChangeNotifier::AddOnlineStateObserver(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 138
131 NetworkChangeNotifier::NetworkChangeNotifier() 139 NetworkChangeNotifier::NetworkChangeNotifier()
132 : ip_address_observer_list_( 140 : ip_address_observer_list_(
133 new ObserverListThreadSafe<IPAddressObserver>( 141 new ObserverListThreadSafe<IPAddressObserver>(
134 ObserverListBase<IPAddressObserver>::NOTIFY_EXISTING_ONLY)), 142 ObserverListBase<IPAddressObserver>::NOTIFY_EXISTING_ONLY)),
135 online_state_observer_list_( 143 online_state_observer_list_(
136 new ObserverListThreadSafe<OnlineStateObserver>( 144 new ObserverListThreadSafe<OnlineStateObserver>(
137 ObserverListBase<OnlineStateObserver>::NOTIFY_EXISTING_ONLY)), 145 ObserverListBase<OnlineStateObserver>::NOTIFY_EXISTING_ONLY)),
138 resolver_state_observer_list_( 146 resolver_state_observer_list_(
139 new ObserverListThreadSafe<DNSObserver>( 147 new ObserverListThreadSafe<DNSObserver>(
140 ObserverListBase<DNSObserver>::NOTIFY_EXISTING_ONLY)) { 148 ObserverListBase<DNSObserver>::NOTIFY_EXISTING_ONLY)),
149 watching_dns_(false) {
141 DCHECK(!g_network_change_notifier); 150 DCHECK(!g_network_change_notifier);
142 g_network_change_notifier = this; 151 g_network_change_notifier = this;
143 } 152 }
144 153
154 // static
145 void NetworkChangeNotifier::NotifyObserversOfIPAddressChange() { 155 void NetworkChangeNotifier::NotifyObserversOfIPAddressChange() {
146 if (g_network_change_notifier) { 156 if (g_network_change_notifier) {
147 g_network_change_notifier->ip_address_observer_list_->Notify( 157 g_network_change_notifier->ip_address_observer_list_->Notify(
148 &IPAddressObserver::OnIPAddressChanged); 158 &IPAddressObserver::OnIPAddressChanged);
149 } 159 }
150 } 160 }
151 161
162 // static
152 void NetworkChangeNotifier::NotifyObserversOfDNSChange(unsigned detail) { 163 void NetworkChangeNotifier::NotifyObserversOfDNSChange(unsigned detail) {
153 if (g_network_change_notifier) { 164 if (g_network_change_notifier) {
165 {
166 base::AutoLock(g_network_change_notifier->watching_dns_lock_);
167 if (detail & NetworkChangeNotifier::CHANGE_DNS_WATCH_STARTED) {
168 g_network_change_notifier->watching_dns_ = true;
169 } else if (detail & NetworkChangeNotifier::CHANGE_DNS_WATCH_FAILED) {
170 g_network_change_notifier->watching_dns_ = false;
171 }
172 // Include detail that watch is off to spare the call to IsWatchingDNS.
173 if (!g_network_change_notifier->watching_dns_)
174 detail |= NetworkChangeNotifier::CHANGE_DNS_WATCH_FAILED;
mmenke 2012/05/16 16:18:03 Suggest a: DCHECK(!(detail & NetworkChangeNotifie
175 }
154 g_network_change_notifier->resolver_state_observer_list_->Notify( 176 g_network_change_notifier->resolver_state_observer_list_->Notify(
155 &DNSObserver::OnDNSChanged, detail); 177 &DNSObserver::OnDNSChanged, detail);
156 } 178 }
157 } 179 }
158 180
181 // static
159 void NetworkChangeNotifier::NotifyObserversOfOnlineStateChange() { 182 void NetworkChangeNotifier::NotifyObserversOfOnlineStateChange() {
160 if (g_network_change_notifier) { 183 if (g_network_change_notifier) {
161 g_network_change_notifier->online_state_observer_list_->Notify( 184 g_network_change_notifier->online_state_observer_list_->Notify(
162 &OnlineStateObserver::OnOnlineStateChanged, !IsOffline()); 185 &OnlineStateObserver::OnOnlineStateChanged, !IsOffline());
163 } 186 }
164 } 187 }
165 188
166 NetworkChangeNotifier::DisableForTest::DisableForTest() 189 NetworkChangeNotifier::DisableForTest::DisableForTest()
167 : network_change_notifier_(g_network_change_notifier) { 190 : network_change_notifier_(g_network_change_notifier) {
168 DCHECK(g_network_change_notifier); 191 DCHECK(g_network_change_notifier);
169 g_network_change_notifier = NULL; 192 g_network_change_notifier = NULL;
170 } 193 }
171 194
172 NetworkChangeNotifier::DisableForTest::~DisableForTest() { 195 NetworkChangeNotifier::DisableForTest::~DisableForTest() {
173 DCHECK(!g_network_change_notifier); 196 DCHECK(!g_network_change_notifier);
174 g_network_change_notifier = network_change_notifier_; 197 g_network_change_notifier = network_change_notifier_;
175 } 198 }
176 199
177 } // namespace net 200 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698