diff options
author | craig.schlenter@chromium.org <craig.schlenter@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-05 18:23:44 +0000 |
---|---|---|
committer | craig.schlenter@chromium.org <craig.schlenter@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-05 18:23:44 +0000 |
commit | 74482ef3290cf71d25bcf9b8d12547363ad8ffe3 (patch) | |
tree | 93c182e30e1ad63f48376d993356cf4726fb88aa /net/base/network_change_notifier.cc | |
parent | 37dd9ae5eb1449c0153b0404d69ae7663253daf4 (diff) | |
download | chromium_src-74482ef3290cf71d25bcf9b8d12547363ad8ffe3.zip chromium_src-74482ef3290cf71d25bcf9b8d12547363ad8ffe3.tar.gz chromium_src-74482ef3290cf71d25bcf9b8d12547363ad8ffe3.tar.bz2 |
Linux: Monitor resolv.conf for changes and use that to reload resolver.
BUG=67734
TEST=manual testing by poking at resolv.conf
Review URL: http://codereview.chromium.org/6903061
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@99666 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/network_change_notifier.cc')
-rw-r--r-- | net/base/network_change_notifier.cc | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/net/base/network_change_notifier.cc b/net/base/network_change_notifier.cc index 2eb59ad..29b983e 100644 --- a/net/base/network_change_notifier.cc +++ b/net/base/network_change_notifier.cc @@ -90,6 +90,13 @@ void NetworkChangeNotifier::AddOnlineStateObserver( } } +void NetworkChangeNotifier::AddDNSObserver(DNSObserver* observer) { + if (g_network_change_notifier) { + g_network_change_notifier->resolver_state_observer_list_->AddObserver( + observer); + } +} + void NetworkChangeNotifier::RemoveIPAddressObserver( IPAddressObserver* observer) { if (g_network_change_notifier) { @@ -106,13 +113,23 @@ void NetworkChangeNotifier::RemoveOnlineStateObserver( } } +void NetworkChangeNotifier::RemoveDNSObserver(DNSObserver* observer) { + if (g_network_change_notifier) { + g_network_change_notifier->resolver_state_observer_list_->RemoveObserver( + observer); + } +} + NetworkChangeNotifier::NetworkChangeNotifier() : ip_address_observer_list_( new ObserverListThreadSafe<IPAddressObserver>( ObserverListBase<IPAddressObserver>::NOTIFY_EXISTING_ONLY)), online_state_observer_list_( new ObserverListThreadSafe<OnlineStateObserver>( - ObserverListBase<OnlineStateObserver>::NOTIFY_EXISTING_ONLY)) { + ObserverListBase<OnlineStateObserver>::NOTIFY_EXISTING_ONLY)), + resolver_state_observer_list_( + new ObserverListThreadSafe<DNSObserver>( + ObserverListBase<DNSObserver>::NOTIFY_EXISTING_ONLY)) { DCHECK(!g_network_change_notifier); g_network_change_notifier = this; } @@ -124,6 +141,13 @@ void NetworkChangeNotifier::NotifyObserversOfIPAddressChange() { } } +void NetworkChangeNotifier::NotifyObserversOfDNSChange() { + if (g_network_change_notifier) { + g_network_change_notifier->resolver_state_observer_list_->Notify( + &DNSObserver::OnDNSChanged); + } +} + void NetworkChangeNotifier::NotifyObserversOfOnlineStateChange() { if (g_network_change_notifier) { g_network_change_notifier->online_state_observer_list_->Notify( |