Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Side by Side Diff: media/base/user_input_monitor.cc

Issue 21183002: Adding key press detection in the browser process. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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 "third_party/skia/include/core/SkPoint.h"
8
9 namespace media {
10
11 UserInputMonitor::~UserInputMonitor() {
12 DCHECK(!monitoring_mouse_);
13 DCHECK(!monitoring_keyboard_);
14 }
15
16 void UserInputMonitor::AddMouseListener(MouseEventListener* listener) {
17 base::AutoLock auto_lock(lock_);
18 mouse_listeners_.AddObserver(listener);
19 if (!monitoring_mouse_) {
20 StartMouseMonitoring();
21 monitoring_mouse_ = true;
22 DVLOG(2) << "Started mouse monitoring.";
23 }
24 }
25 void UserInputMonitor::RemoveMouseListener(MouseEventListener* listener) {
26 base::AutoLock auto_lock(lock_);
27 mouse_listeners_.RemoveObserver(listener);
28 if (mouse_listeners_.size() == 0) {
29 StopMouseMonitoring();
30 monitoring_mouse_ = false;
31 DVLOG(2) << "Stopped mouse monitoring.";
32 }
33 }
34 void UserInputMonitor::AddRawKeyboardListener(
35 RawKeyboardEventListener* listener) {
36 base::AutoLock auto_lock(lock_);
37 keyboard_listeners_.AddObserver(listener);
38 if (!monitoring_keyboard_) {
39 StartKeyboardMonitoring();
40 monitoring_keyboard_ = true;
41 DVLOG(2) << "Started keyboard monitoring.";
42 }
43 }
44 void UserInputMonitor::RemoveRawKeyboardListener(
45 RawKeyboardEventListener* listener) {
46 base::AutoLock auto_lock(lock_);
47 keyboard_listeners_.RemoveObserver(listener);
48 if (keyboard_listeners_.size() == 0 && key_stroke_listeners_.size() == 0) {
49 StopKeyboardMonitoring();
50 monitoring_keyboard_ = false;
51 DVLOG(2) << "Stoped keyboard monitoring.";
DaleCurtis 2013/08/12 20:24:11 Stopped.
jiayl 2013/08/12 23:13:46 Done.
52 }
53 }
54 void UserInputMonitor::AddKeyStrokeListener(KeyStrokeListener* listener) {
55 base::AutoLock auto_lock(lock_);
56 key_stroke_listeners_.AddObserver(listener);
57 if (!monitoring_keyboard_) {
58 StartKeyboardMonitoring();
59 monitoring_keyboard_ = true;
60 DVLOG(2) << "Started keyboard monitoring.";
61 }
62 }
63 void UserInputMonitor::RemoveKeyStrokeListener(KeyStrokeListener* listener) {
64 base::AutoLock auto_lock(lock_);
65 key_stroke_listeners_.RemoveObserver(listener);
66 if (keyboard_listeners_.size() == 0 && key_stroke_listeners_.size() == 0) {
67 StopKeyboardMonitoring();
68 monitoring_keyboard_ = false;
69 DVLOG(2) << "Stoped keyboard monitoring.";
DaleCurtis 2013/08/12 20:24:11 Stopped.
jiayl 2013/08/12 23:13:46 Done.
70 }
71 }
72
73 UserInputMonitor::UserInputMonitor()
74 : monitoring_mouse_(false), monitoring_keyboard_(false) {}
75
76 void UserInputMonitor::OnMouseEvent(const SkIPoint& position) {
77 base::AutoLock auto_lock(lock_);
78 FOR_EACH_OBSERVER(
79 MouseEventListener, mouse_listeners_, OnMouseMoved(position));
80 }
81
82 void UserInputMonitor::OnKeyboardEvent(ui::EventType event,
83 ui::KeyboardCode key_code) {
84 base::AutoLock auto_lock(lock_);
85 FOR_EACH_OBSERVER(RawKeyboardEventListener,
86 keyboard_listeners_,
87 OnKeyboardEvent(event, key_code));
88
89 // Updates the pressed keys and maybe notifies the key_stroke_listeners_.
90 if (event == ui::ET_KEY_PRESSED) {
91 if (pressed_keys_.find(key_code) != pressed_keys_.end())
92 return;
93 pressed_keys_.insert(key_code);
94 DVLOG(6) << "Key stroke detected.";
95 FOR_EACH_OBSERVER(KeyStrokeListener, key_stroke_listeners_, OnKeyPressed());
96 } else {
97 DCHECK_EQ(ui::ET_KEY_RELEASED, event);
98 DCHECK(pressed_keys_.find(key_code) != pressed_keys_.end());
99 pressed_keys_.erase(key_code);
100 }
101 }
102
103 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698