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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: net/base/network_change_notifier.cc
diff --git a/net/base/network_change_notifier.cc b/net/base/network_change_notifier.cc
index ec9cae06d79da8f6beac0145b10ff2635e5206e8..62c9249564f376f97e467fd2c01759fd3185f43f 100644
--- a/net/base/network_change_notifier.cc
+++ b/net/base/network_change_notifier.cc
@@ -81,6 +81,14 @@ bool NetworkChangeNotifier::IsOffline() {
}
// static
+bool NetworkChangeNotifier::IsWatchingDNS() {
+ if (!g_network_change_notifier)
+ return false;
+ base::AutoLock(g_network_change_notifier->watching_dns_lock_);
+ return g_network_change_notifier->watching_dns_;
+}
+
+// static
NetworkChangeNotifier* NetworkChangeNotifier::CreateMock() {
return new MockNetworkChangeNotifier();
}
@@ -137,11 +145,13 @@ NetworkChangeNotifier::NetworkChangeNotifier()
ObserverListBase<OnlineStateObserver>::NOTIFY_EXISTING_ONLY)),
resolver_state_observer_list_(
new ObserverListThreadSafe<DNSObserver>(
- ObserverListBase<DNSObserver>::NOTIFY_EXISTING_ONLY)) {
+ ObserverListBase<DNSObserver>::NOTIFY_EXISTING_ONLY)),
+ watching_dns_(false) {
DCHECK(!g_network_change_notifier);
g_network_change_notifier = this;
}
+// static
void NetworkChangeNotifier::NotifyObserversOfIPAddressChange() {
if (g_network_change_notifier) {
g_network_change_notifier->ip_address_observer_list_->Notify(
@@ -149,13 +159,26 @@ void NetworkChangeNotifier::NotifyObserversOfIPAddressChange() {
}
}
+// static
void NetworkChangeNotifier::NotifyObserversOfDNSChange(unsigned detail) {
if (g_network_change_notifier) {
+ {
+ base::AutoLock(g_network_change_notifier->watching_dns_lock_);
+ if (detail & NetworkChangeNotifier::CHANGE_DNS_WATCH_STARTED) {
+ g_network_change_notifier->watching_dns_ = true;
+ } else if (detail & NetworkChangeNotifier::CHANGE_DNS_WATCH_FAILED) {
+ g_network_change_notifier->watching_dns_ = false;
+ }
+ // Include detail that watch is off to spare the call to IsWatchingDNS.
+ if (!g_network_change_notifier->watching_dns_)
+ detail |= NetworkChangeNotifier::CHANGE_DNS_WATCH_FAILED;
mmenke 2012/05/16 16:18:03 Suggest a: DCHECK(!(detail & NetworkChangeNotifie
+ }
g_network_change_notifier->resolver_state_observer_list_->Notify(
&DNSObserver::OnDNSChanged, detail);
}
}
+// static
void NetworkChangeNotifier::NotifyObserversOfOnlineStateChange() {
if (g_network_change_notifier) {
g_network_change_notifier->online_state_observer_list_->Notify(

Powered by Google App Engine
This is Rietveld 408576698