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

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: Added sanity DCHECK. 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
« no previous file with comments | « net/base/network_change_notifier.h ('k') | net/base/network_change_notifier_linux.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
175 }
176 DCHECK(!(detail & NetworkChangeNotifier::CHANGE_DNS_WATCH_FAILED) ||
177 !(detail & NetworkChangeNotifier::CHANGE_DNS_WATCH_STARTED));
154 g_network_change_notifier->resolver_state_observer_list_->Notify( 178 g_network_change_notifier->resolver_state_observer_list_->Notify(
155 &DNSObserver::OnDNSChanged, detail); 179 &DNSObserver::OnDNSChanged, detail);
156 } 180 }
157 } 181 }
158 182
183 // static
159 void NetworkChangeNotifier::NotifyObserversOfOnlineStateChange() { 184 void NetworkChangeNotifier::NotifyObserversOfOnlineStateChange() {
160 if (g_network_change_notifier) { 185 if (g_network_change_notifier) {
161 g_network_change_notifier->online_state_observer_list_->Notify( 186 g_network_change_notifier->online_state_observer_list_->Notify(
162 &OnlineStateObserver::OnOnlineStateChanged, !IsOffline()); 187 &OnlineStateObserver::OnOnlineStateChanged, !IsOffline());
163 } 188 }
164 } 189 }
165 190
166 NetworkChangeNotifier::DisableForTest::DisableForTest() 191 NetworkChangeNotifier::DisableForTest::DisableForTest()
167 : network_change_notifier_(g_network_change_notifier) { 192 : network_change_notifier_(g_network_change_notifier) {
168 DCHECK(g_network_change_notifier); 193 DCHECK(g_network_change_notifier);
169 g_network_change_notifier = NULL; 194 g_network_change_notifier = NULL;
170 } 195 }
171 196
172 NetworkChangeNotifier::DisableForTest::~DisableForTest() { 197 NetworkChangeNotifier::DisableForTest::~DisableForTest() {
173 DCHECK(!g_network_change_notifier); 198 DCHECK(!g_network_change_notifier);
174 g_network_change_notifier = network_change_notifier_; 199 g_network_change_notifier = network_change_notifier_;
175 } 200 }
176 201
177 } // namespace net 202 } // namespace net
OLDNEW
« no previous file with comments | « net/base/network_change_notifier.h ('k') | net/base/network_change_notifier_linux.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698