Index: net/dns/host_resolver_impl.cc |
diff --git a/net/dns/host_resolver_impl.cc b/net/dns/host_resolver_impl.cc |
index 4a5be1834ffb7e438ac04d330d96a83ed59982a3..acd99aef6e43e3749a6dd380f2048e723942ca24 100644 |
--- a/net/dns/host_resolver_impl.cc |
+++ b/net/dns/host_resolver_impl.cc |
@@ -28,6 +28,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/stl_util.h" |
@@ -1902,6 +1903,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) { |
@@ -2011,6 +2016,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 |
@@ -2446,12 +2456,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(); |
eroman
2016/10/27 19:26:26
This is going to fail the requests with ERR_NETWOR
|
} |
void HostResolverImpl::UpdateDNSConfig(bool config_changed) { |