Index: net/dns/host_resolver_impl.cc |
diff --git a/net/dns/host_resolver_impl.cc b/net/dns/host_resolver_impl.cc |
index fd4c065b7d7e724f47f3646ffd9fe32689b1a2e7..c8cd7e2914c570c3e33ee57d977beb30b59661bf 100644 |
--- a/net/dns/host_resolver_impl.cc |
+++ b/net/dns/host_resolver_impl.cc |
@@ -38,6 +38,7 @@ |
#include "base/metrics/field_trial.h" |
#include "base/metrics/histogram_macros.h" |
#include "base/metrics/sparse_histogram.h" |
+#include "base/power_monitor/power_monitor.h" |
#include "base/profiler/scoped_tracker.h" |
#include "base/single_thread_task_runner.h" |
#include "base/strings/string_util.h" |
@@ -1958,6 +1959,10 @@ HostResolverImpl::~HostResolverImpl() { |
NetworkChangeNotifier::RemoveIPAddressObserver(this); |
NetworkChangeNotifier::RemoveConnectionTypeObserver(this); |
NetworkChangeNotifier::RemoveDNSObserver(this); |
+ |
+ base::PowerMonitor* power_monitor = base::PowerMonitor::Get(); |
+ if (power_monitor) |
+ power_monitor->RemoveObserver(this); |
} |
void HostResolverImpl::SetMaxQueuedJobs(size_t value) { |
@@ -2068,6 +2073,11 @@ HostResolverImpl::HostResolverImpl( |
#if defined(OS_WIN) |
EnsureWinsockInit(); |
#endif |
+ |
+ base::PowerMonitor* power_monitor = base::PowerMonitor::Get(); |
+ if (power_monitor) |
+ power_monitor->AddObserver(this); |
+ |
#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) |
RunLoopbackProbeJob(); |
#endif |
@@ -2554,12 +2564,20 @@ void HostResolverImpl::OnConnectionTypeChanged( |
type); |
} |
+void HostResolverImpl::OnDNSChanged() { |
+ UpdateDNSConfig(true); |
+} |
+ |
void HostResolverImpl::OnInitialDNSConfigRead() { |
UpdateDNSConfig(false); |
} |
-void HostResolverImpl::OnDNSChanged() { |
- UpdateDNSConfig(true); |
+void HostResolverImpl::OnSuspend() { |
+ // Existing jobs are unlikely to receive a response, so they need to be |
+ // aborted. |
+ // TODO(mmenke): This can result in starting new jobs just before suspend |
+ // mode starts. Would it make more sense to do this on resume? |
+ AbortAllInProgressJobs(); |
} |
void HostResolverImpl::UpdateDNSConfig(bool config_changed) { |