summaryrefslogtreecommitdiffstats
path: root/net/dns/dns_config_service.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/dns/dns_config_service.cc')
-rw-r--r--net/dns/dns_config_service.cc24
1 files changed, 23 insertions, 1 deletions
diff --git a/net/dns/dns_config_service.cc b/net/dns/dns_config_service.cc
index ffd5fe9..d189def 100644
--- a/net/dns/dns_config_service.cc
+++ b/net/dns/dns_config_service.cc
@@ -77,7 +77,29 @@ DnsConfigService::DnsConfigService()
have_hosts_(false),
need_update_(false) {}
-DnsConfigService::~DnsConfigService() {}
+DnsConfigService::~DnsConfigService() {
+ // Must always clean up.
+ NetworkChangeNotifier::RemoveDNSObserver(this);
+}
+
+void DnsConfigService::Read(const CallbackType& callback) {
+ DCHECK(CalledOnValidThread());
+ DCHECK(!callback.is_null());
+ DCHECK(callback_.is_null());
+ callback_ = callback;
+ OnDNSChanged(NetworkChangeNotifier::CHANGE_DNS_WATCH_STARTED);
+}
+
+void DnsConfigService::Watch(const CallbackType& callback) {
+ DCHECK(CalledOnValidThread());
+ DCHECK(!callback.is_null());
+ DCHECK(callback_.is_null());
+ NetworkChangeNotifier::AddDNSObserver(this);
+ callback_ = callback;
+ if (NetworkChangeNotifier::IsWatchingDNS())
+ OnDNSChanged(NetworkChangeNotifier::CHANGE_DNS_WATCH_STARTED);
+ // else: Wait until signal before reading.
+}
void DnsConfigService::InvalidateConfig() {
DCHECK(CalledOnValidThread());