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

Unified Diff: media/audio/key_press_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 side-by-side diff with in-line comments
Download patch
Index: media/audio/key_press_monitor.cc
diff --git a/media/audio/key_press_monitor.cc b/media/audio/key_press_monitor.cc
new file mode 100644
index 0000000000000000000000000000000000000000..57cb8b0672d6c87c92b98865edc8b32deb78b526
--- /dev/null
+++ b/media/audio/key_press_monitor.cc
@@ -0,0 +1,63 @@
+// Copyright (c) 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 "media/audio/key_press_monitor.h"
+
+#include "base/message_loop/message_loop_proxy.h"
+
+namespace media {
+
+KeyPressMonitor::KeyPressMonitor(
+ const scoped_refptr<base::MessageLoopProxy>& message_loop,
+ const scoped_refptr<base::MessageLoopProxy>& io_message_loop,
+ const scoped_refptr<base::MessageLoopProxy>& ui_message_loop)
+ : message_loop_(message_loop),
+ io_message_loop_(io_message_loop),
+ ui_message_loop_(ui_message_loop),
+ weak_ptr_factory_(this) {}
Sergey Ulanov 2013/08/08 01:25:48 Move } to the next line.
jiayl 2013/08/09 23:30:14 This is auto formatted by "git-cl format".
+
+KeyPressMonitor::~KeyPressMonitor() {}
+
+void KeyPressMonitor::OnMouseMoved(const SkIPoint& position) { NOTREACHED(); }
Sergey Ulanov 2013/08/08 01:25:48 Wrap NOTREACHED();. Putting } for a function on t
jiayl 2013/08/09 23:30:14 This is auto formatted by "git-cl format".
+
+void KeyPressMonitor::OnKeyboardEvent(ui::EventType event,
+ ui::KeyboardCode key_code) {
+ DCHECK(message_loop_->BelongsToCurrentThread());
+ if (event == ui::ET_KEY_PRESSED) {
+ if (pressed_keys_.find(key_code) != pressed_keys_.end())
+ return;
+ pressed_keys_.insert(key_code);
+ FOR_EACH_OBSERVER(KeyPressListener, listeners_, OnKeyPressed());
+ } else {
+ DCHECK(event == ui::ET_KEY_RELEASED);
Sergey Ulanov 2013/08/08 01:25:48 DCHECK_EQ
jiayl 2013/08/09 23:30:14 Done.
+ DCHECK(pressed_keys_.find(key_code) != pressed_keys_.end());
+ pressed_keys_.erase(key_code);
+ }
+}
+
+void KeyPressMonitor::AddKeyPressListener(KeyPressListener* listener) {
+ DCHECK(message_loop_->BelongsToCurrentThread());
+ listeners_.AddObserver(listener);
+
+ if (listeners_.size() == 1 && !monitor_.get()) {
+ monitor_.reset(UserInputMonitor::Create(io_message_loop_,
Sergey Ulanov 2013/08/08 01:25:48 monitor_ = UserInputMonitor::Create(....). Don't
jiayl 2013/08/09 23:30:14 Done.
+ ui_message_loop_,
+ message_loop_,
+ UserInputMonitor::KEYBOARD_EVENT,
+ weak_ptr_factory_.GetWeakPtr())
+ .release());
+ }
+}
+
+void KeyPressMonitor::RemoveKeyPressListener(KeyPressListener* listener) {
+ DCHECK(message_loop_->BelongsToCurrentThread());
+ listeners_.RemoveObserver(listener);
+
+ if (listeners_.size() == 0) {
+ monitor_.reset(NULL);
+ weak_ptr_factory_.InvalidateWeakPtrs();
+ }
+}
+
+} // namespace media

Powered by Google App Engine
This is Rietveld 408576698