Chromium Code Reviews| Index: media/base/user_input_monitor.cc |
| diff --git a/media/base/user_input_monitor.cc b/media/base/user_input_monitor.cc |
| index 18b4c8060f64e34437d4e3e9222fde4d18af520a..dc19574a11feb03fc531de15818b6d28e039e290 100644 |
| --- a/media/base/user_input_monitor.cc |
| +++ b/media/base/user_input_monitor.cc |
| @@ -18,7 +18,7 @@ scoped_ptr<UserInputMonitor> UserInputMonitor::Create( |
| UserInputMonitor::~UserInputMonitor() { |
| DCHECK(!monitoring_mouse_); |
| - DCHECK(!monitoring_keyboard_); |
| + DCHECK(!key_press_counter_references_); |
| } |
| void UserInputMonitor::AddMouseListener(MouseEventListener* listener) { |
| @@ -30,6 +30,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,30 +40,43 @@ 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_++; |
|
DaleCurtis
2013/08/23 02:16:22
style perfers ++var or you can inline it in the if
|
| + 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_.size() == 0) { |
| + DCHECK(key_press_counter_references_ > 0); |
|
DaleCurtis
2013/08/23 02:16:22
DCHECK_GT
|
| + key_press_counter_references_--; |
|
DaleCurtis
2013/08/23 02:16:22
prefer --var ditto on inline if you want.
|
| + if (key_press_counter_references_ == 0) { |
| StopKeyboardMonitoring(); |
| - monitoring_keyboard_ = false; |
| + pressed_keys_.clear(); |
| + total_key_presses_ = 0; |
| DVLOG(2) << "Stopped keyboard monitoring."; |
| } |
| } |
| +size_t UserInputMonitor::GetKeyPressCount() const { |
| + base::AutoLock auto_lock(lock_); |
| + DCHECK(key_press_counter_references_); |
| + return total_key_presses_; |
| +} |
| + |
| UserInputMonitor::UserInputMonitor() |
| - : monitoring_mouse_(false), monitoring_keyboard_(false) {} |
| + : monitoring_mouse_(false), |
| + key_press_counter_references_(0), |
| + total_key_presses_(0) {} |
| void UserInputMonitor::OnMouseEvent(const SkIPoint& position) { |
| base::AutoLock auto_lock(lock_); |
| + if (!monitoring_mouse_) |
| + return; |
| FOR_EACH_OBSERVER( |
| MouseEventListener, mouse_listeners_, OnMouseMoved(position)); |
| } |
| @@ -70,13 +84,15 @@ void UserInputMonitor::OnMouseEvent(const SkIPoint& 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 (!key_press_counter_references_) |
| + return; |
| + // Updates the pressed keys and the total count of key presses. |
| 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()); |
| + total_key_presses_++; |
|
DaleCurtis
2013/08/23 02:16:22
Prefer ++var.
|
| + DVLOG(6) << "Key press detected, total count: " << total_key_presses_; |
| } else { |
| DCHECK_EQ(ui::ET_KEY_RELEASED, event); |
| DCHECK(pressed_keys_.find(key_code) != pressed_keys_.end()); |