diff options
author | szym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-16 18:10:53 +0000 |
---|---|---|
committer | szym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-16 18:10:53 +0000 |
commit | 05aad32d741012a173ea8f1a4b5072dabe7c0188 (patch) | |
tree | f9b8535284f0503ef96bac3a451f995b5fcd508f /net/base/network_change_notifier.cc | |
parent | 1a92b28469774982203a8c88be0bb49d8275cf68 (diff) | |
download | chromium_src-05aad32d741012a173ea8f1a4b5072dabe7c0188.zip chromium_src-05aad32d741012a173ea8f1a4b5072dabe7c0188.tar.gz chromium_src-05aad32d741012a173ea8f1a4b5072dabe7c0188.tar.bz2 |
[net/dns] Isolate DnsConfigWatcher from DnsConfigService.
DnsConfigWatcher is installed at NetworkChangeNotifier and provides signals to DNSObservers.
DnsConfigService becomes a DNSObserver.
BUG=114827,114223,128166
TEST=./net_unittests --gtest_filter=DnsConfigService*
Review URL: https://chromiumcodereview.appspot.com/10377092
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137457 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/network_change_notifier.cc')
-rw-r--r-- | net/base/network_change_notifier.cc | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/net/base/network_change_notifier.cc b/net/base/network_change_notifier.cc index ec9cae0..7a14d0e 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,28 @@ 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; + } + DCHECK(!(detail & NetworkChangeNotifier::CHANGE_DNS_WATCH_FAILED) || + !(detail & NetworkChangeNotifier::CHANGE_DNS_WATCH_STARTED)); 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( |