Index: media/base/user_input_monitor.cc |
diff --git a/media/base/user_input_monitor.cc b/media/base/user_input_monitor.cc |
index 34e07d8136eecac450eac62e59d9886c3a571e87..e43cd626a8f704561372ae5f506806bf0ad679f9 100644 |
--- a/media/base/user_input_monitor.cc |
+++ b/media/base/user_input_monitor.cc |
@@ -4,6 +4,7 @@ |
#include "media/base/user_input_monitor.h" |
+#include "base/logging.h" |
#include "third_party/skia/include/core/SkPoint.h" |
namespace media { |
@@ -17,30 +18,37 @@ scoped_ptr<UserInputMonitor> UserInputMonitor::Create( |
#endif // DISABLE_USER_INPUT_MONITOR |
UserInputMonitor::UserInputMonitor() |
- : monitoring_mouse_(false), key_press_counter_references_(0) {} |
+ : key_press_counter_references_(0), |
+ mouse_listeners_count_(0), |
+ mouse_listeners_(new MouseListenerList()) {} |
UserInputMonitor::~UserInputMonitor() { |
- DCHECK(!monitoring_mouse_); |
- DCHECK(!key_press_counter_references_); |
+ DCHECK_EQ(0u, key_press_counter_references_); |
+ mouse_listeners_->AssertEmpty(); |
} |
void UserInputMonitor::AddMouseListener(MouseEventListener* listener) { |
- base::AutoLock auto_lock(lock_); |
- mouse_listeners_.AddObserver(listener); |
- if (!monitoring_mouse_) { |
- StartMouseMonitoring(); |
- monitoring_mouse_ = true; |
- DVLOG(2) << "Started mouse monitoring."; |
+ mouse_listeners_->AddObserver(listener); |
+ { |
+ base::AutoLock auto_lock(lock_); |
+ mouse_listeners_count_++; |
+ if (mouse_listeners_count_ == 1) { |
+ StartMouseMonitoring(); |
+ DVLOG(2) << "Started mouse monitoring."; |
+ } |
} |
} |
void UserInputMonitor::RemoveMouseListener(MouseEventListener* listener) { |
- base::AutoLock auto_lock(lock_); |
- mouse_listeners_.RemoveObserver(listener); |
- if (!mouse_listeners_.might_have_observers()) { |
- StopMouseMonitoring(); |
- monitoring_mouse_ = false; |
- DVLOG(2) << "Stopped mouse monitoring."; |
+ mouse_listeners_->RemoveObserver(listener); |
+ { |
+ base::AutoLock auto_lock(lock_); |
+ DCHECK_NE(mouse_listeners_count_, 0u); |
+ mouse_listeners_count_--; |
+ if (mouse_listeners_count_ == 0) { |
+ StopMouseMonitoring(); |
+ DVLOG(2) << "Stopped mouse monitoring."; |
+ } |
} |
} |
@@ -63,12 +71,4 @@ void UserInputMonitor::DisableKeyPressMonitoring() { |
} |
} |
-void UserInputMonitor::OnMouseEvent(const SkIPoint& position) { |
- base::AutoLock auto_lock(lock_); |
- if (!monitoring_mouse_) |
- return; |
- FOR_EACH_OBSERVER( |
- MouseEventListener, mouse_listeners_, OnMouseMoved(position)); |
-} |
- |
} // namespace media |