Index: net/dns/dns_config_service.cc |
diff --git a/net/dns/dns_config_service.cc b/net/dns/dns_config_service.cc |
index ffd5fe91fb8b24be0f6b075fd918e5f1e96b949a..d189def3c1f19e3f5b66dc36a2a344102922d96f 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()); |