Index: base/power_monitor/power_monitor.cc |
diff --git a/base/power_monitor/power_monitor.cc b/base/power_monitor/power_monitor.cc |
index 14dc4b517832785c07153abfed2bcc4a3a738940..547318e02b9af2e80f506d4d0079fdd8df9724b3 100644 |
--- a/base/power_monitor/power_monitor.cc |
+++ b/base/power_monitor/power_monitor.cc |
@@ -3,6 +3,7 @@ |
// found in the LICENSE file. |
#include "base/power_monitor/power_monitor.h" |
+#include "base/logging.h" |
#include "base/power_monitor/power_monitor_source.h" |
namespace base { |
@@ -27,11 +28,17 @@ PowerMonitor* PowerMonitor::Get() { |
} |
void PowerMonitor::AddObserver(PowerObserver* obs) { |
+ DCHECK(!obs->power_monitor_thread_checker_); |
+ obs->power_monitor_thread_checker_.reset(new base::ThreadChecker()); |
observers_->AddObserver(obs); |
} |
void PowerMonitor::RemoveObserver(PowerObserver* obs) { |
+ // PowerObservers must be removed on the same thread on which they were added. |
+ DCHECK(obs->power_monitor_thread_checker_); |
+ DCHECK(obs->power_monitor_thread_checker_->CalledOnValidThread()); |
observers_->RemoveObserver(obs); |
+ obs->power_monitor_thread_checker_.reset(); |
} |
PowerMonitorSource* PowerMonitor::Source() { |