| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "cobalt/media/base/user_input_monitor.h" |
| |
| #include "base/logging.h" |
| |
| namespace cobalt { |
| namespace media { |
| |
| #ifdef DISABLE_USER_INPUT_MONITOR |
| std::unique_ptr<UserInputMonitor> UserInputMonitor::Create( |
| const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, |
| const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner) { |
| return NULL; |
| } |
| #endif // DISABLE_USER_INPUT_MONITOR |
| |
| UserInputMonitor::UserInputMonitor() |
| : key_press_counter_references_(0), |
| mouse_listeners_count_(0), |
| mouse_listeners_(new MouseListenerList()) {} |
| |
| UserInputMonitor::~UserInputMonitor() { |
| DCHECK_EQ(0u, key_press_counter_references_); |
| mouse_listeners_->AssertEmpty(); |
| } |
| |
| void UserInputMonitor::AddMouseListener(MouseEventListener* listener) { |
| 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) { |
| 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."; |
| } |
| } |
| } |
| |
| void UserInputMonitor::EnableKeyPressMonitoring() { |
| base::AutoLock auto_lock(lock_); |
| ++key_press_counter_references_; |
| if (key_press_counter_references_ == 1) { |
| StartKeyboardMonitoring(); |
| DVLOG(2) << "Started keyboard monitoring."; |
| } |
| } |
| |
| void UserInputMonitor::DisableKeyPressMonitoring() { |
| base::AutoLock auto_lock(lock_); |
| DCHECK_NE(key_press_counter_references_, 0u); |
| --key_press_counter_references_; |
| if (key_press_counter_references_ == 0) { |
| StopKeyboardMonitoring(); |
| DVLOG(2) << "Stopped keyboard monitoring."; |
| } |
| } |
| |
| } // namespace media |
| } // namespace cobalt |