diff options
Diffstat (limited to 'net/dns/dns_config_service.cc')
-rw-r--r-- | net/dns/dns_config_service.cc | 24 |
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()); |