Index: media/base/user_input_monitor.cc |
diff --git a/media/base/user_input_monitor.cc b/media/base/user_input_monitor.cc |
index 8a1f1da5b895d1ede4f740dda81121786493f484..34e07d8136eecac450eac62e59d9886c3a571e87 100644 |
--- a/media/base/user_input_monitor.cc |
+++ b/media/base/user_input_monitor.cc |
@@ -16,9 +16,12 @@ scoped_ptr<UserInputMonitor> UserInputMonitor::Create( |
} |
#endif // DISABLE_USER_INPUT_MONITOR |
+UserInputMonitor::UserInputMonitor() |
+ : monitoring_mouse_(false), key_press_counter_references_(0) {} |
+ |
UserInputMonitor::~UserInputMonitor() { |
DCHECK(!monitoring_mouse_); |
- DCHECK(!monitoring_keyboard_); |
+ DCHECK(!key_press_counter_references_); |
} |
void UserInputMonitor::AddMouseListener(MouseEventListener* listener) { |
@@ -30,6 +33,7 @@ void UserInputMonitor::AddMouseListener(MouseEventListener* listener) { |
DVLOG(2) << "Started mouse monitoring."; |
} |
} |
+ |
void UserInputMonitor::RemoveMouseListener(MouseEventListener* listener) { |
base::AutoLock auto_lock(lock_); |
mouse_listeners_.RemoveObserver(listener); |
@@ -39,49 +43,32 @@ void UserInputMonitor::RemoveMouseListener(MouseEventListener* listener) { |
DVLOG(2) << "Stopped mouse monitoring."; |
} |
} |
-void UserInputMonitor::AddKeyStrokeListener(KeyStrokeListener* listener) { |
+ |
+void UserInputMonitor::EnableKeyPressMonitoring() { |
base::AutoLock auto_lock(lock_); |
- key_stroke_listeners_.AddObserver(listener); |
- if (!monitoring_keyboard_) { |
+ ++key_press_counter_references_; |
+ if (key_press_counter_references_ == 1) { |
StartKeyboardMonitoring(); |
- monitoring_keyboard_ = true; |
DVLOG(2) << "Started keyboard monitoring."; |
} |
} |
-void UserInputMonitor::RemoveKeyStrokeListener(KeyStrokeListener* listener) { |
+ |
+void UserInputMonitor::DisableKeyPressMonitoring() { |
base::AutoLock auto_lock(lock_); |
- key_stroke_listeners_.RemoveObserver(listener); |
- if (!key_stroke_listeners_.might_have_observers()) { |
+ DCHECK_NE(key_press_counter_references_, 0u); |
+ --key_press_counter_references_; |
+ if (key_press_counter_references_ == 0) { |
StopKeyboardMonitoring(); |
- monitoring_keyboard_ = false; |
DVLOG(2) << "Stopped keyboard monitoring."; |
} |
} |
-UserInputMonitor::UserInputMonitor() |
- : monitoring_mouse_(false), monitoring_keyboard_(false) {} |
- |
void UserInputMonitor::OnMouseEvent(const SkIPoint& position) { |
base::AutoLock auto_lock(lock_); |
+ if (!monitoring_mouse_) |
+ return; |
FOR_EACH_OBSERVER( |
MouseEventListener, mouse_listeners_, OnMouseMoved(position)); |
} |
-void UserInputMonitor::OnKeyboardEvent(ui::EventType event, |
- ui::KeyboardCode key_code) { |
- base::AutoLock auto_lock(lock_); |
- // Updates the pressed keys and maybe notifies the key_stroke_listeners_. |
- if (event == ui::ET_KEY_PRESSED) { |
- if (pressed_keys_.find(key_code) != pressed_keys_.end()) |
- return; |
- pressed_keys_.insert(key_code); |
- DVLOG(6) << "Key stroke detected."; |
- FOR_EACH_OBSERVER(KeyStrokeListener, key_stroke_listeners_, OnKeyStroke()); |
- } else { |
- DCHECK_EQ(ui::ET_KEY_RELEASED, event); |
- DCHECK(pressed_keys_.find(key_code) != pressed_keys_.end()); |
- pressed_keys_.erase(key_code); |
- } |
-} |
- |
} // namespace media |