summaryrefslogtreecommitdiffstats
path: root/net/base/network_change_notifier.cc
diff options
context:
space:
mode:
authorcraig.schlenter@chromium.org <craig.schlenter@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-05 18:23:44 +0000
committercraig.schlenter@chromium.org <craig.schlenter@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-05 18:23:44 +0000
commit74482ef3290cf71d25bcf9b8d12547363ad8ffe3 (patch)
tree93c182e30e1ad63f48376d993356cf4726fb88aa /net/base/network_change_notifier.cc
parent37dd9ae5eb1449c0153b0404d69ae7663253daf4 (diff)
downloadchromium_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.cc26
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(