1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "media/base/user_input_monitor.h"
6
7#include "base/logging.h"
8#include "third_party/skia/include/core/SkPoint.h"
9
10namespace media {
11
12#ifdef DISABLE_USER_INPUT_MONITOR
13scoped_ptr<UserInputMonitor> UserInputMonitor::Create(
14    const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
15    const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner) {
16  return scoped_ptr<UserInputMonitor>();
17}
18#endif  // DISABLE_USER_INPUT_MONITOR
19
20UserInputMonitor::UserInputMonitor()
21    : key_press_counter_references_(0),
22      mouse_listeners_count_(0),
23      mouse_listeners_(new MouseListenerList()) {}
24
25UserInputMonitor::~UserInputMonitor() {
26  DCHECK_EQ(0u, key_press_counter_references_);
27  mouse_listeners_->AssertEmpty();
28}
29
30void UserInputMonitor::AddMouseListener(MouseEventListener* listener) {
31  mouse_listeners_->AddObserver(listener);
32  {
33    base::AutoLock auto_lock(lock_);
34    mouse_listeners_count_++;
35    if (mouse_listeners_count_ == 1) {
36      StartMouseMonitoring();
37      DVLOG(2) << "Started mouse monitoring.";
38    }
39  }
40}
41
42void UserInputMonitor::RemoveMouseListener(MouseEventListener* listener) {
43  mouse_listeners_->RemoveObserver(listener);
44  {
45    base::AutoLock auto_lock(lock_);
46    DCHECK_NE(mouse_listeners_count_, 0u);
47    mouse_listeners_count_--;
48    if (mouse_listeners_count_ == 0) {
49      StopMouseMonitoring();
50      DVLOG(2) << "Stopped mouse monitoring.";
51    }
52  }
53}
54
55void UserInputMonitor::EnableKeyPressMonitoring() {
56  base::AutoLock auto_lock(lock_);
57  ++key_press_counter_references_;
58  if (key_press_counter_references_ == 1) {
59    StartKeyboardMonitoring();
60    DVLOG(2) << "Started keyboard monitoring.";
61  }
62}
63
64void UserInputMonitor::DisableKeyPressMonitoring() {
65  base::AutoLock auto_lock(lock_);
66  DCHECK_NE(key_press_counter_references_, 0u);
67  --key_press_counter_references_;
68  if (key_press_counter_references_ == 0) {
69    StopKeyboardMonitoring();
70    DVLOG(2) << "Stopped keyboard monitoring.";
71  }
72}
73
74}  // namespace media
75