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