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( |