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

Side by Side Diff: remoting/host/local_input_monitor_chromeos.cc

Issue 718313002: Revert "Remote assistance on Chrome OS Part VIII - Compile on Ozone" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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
« no previous file with comments | « remoting/host/input_injector_x11.cc ('k') | remoting/host/local_input_monitor_linux.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 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 "remoting/host/local_input_monitor.h"
6
7 #include "base/bind.h"
8 #include "base/callback.h"
9 #include "base/location.h"
10 #include "base/single_thread_task_runner.h"
11 #include "base/threading/non_thread_safe.h"
12 #include "remoting/host/client_session_control.h"
13 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
14 #include "ui/events/event.h"
15 #include "ui/events/event_utils.h"
16 #include "ui/events/keycodes/keyboard_codes.h"
17 #include "ui/events/platform/platform_event_observer.h"
18 #include "ui/events/platform/platform_event_source.h"
19
20 namespace remoting {
21
22 namespace {
23
24 class LocalInputMonitorChromeos : public LocalInputMonitor {
25 public:
26 LocalInputMonitorChromeos(
27 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
28 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
29 base::WeakPtr<ClientSessionControl> client_session_control);
30 virtual ~LocalInputMonitorChromeos();
31
32 private:
33 class Core : ui::PlatformEventObserver {
34 public:
35 Core(scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
36 base::WeakPtr<ClientSessionControl> client_session_control);
37 ~Core();
38
39 void Start();
40
41 // ui::PlatformEventObserver interface.
42 void WillProcessEvent(const ui::PlatformEvent& event) override;
43 void DidProcessEvent(const ui::PlatformEvent& event) override;
44
45 private:
46 void HandleMouseMove(const ui::PlatformEvent& event);
47 void HandleKeyPressed(const ui::PlatformEvent& event);
48
49 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
50
51 // Points to the object receiving mouse event notifications and session
52 // disconnect requests. Must be called on the |caller_task_runner_|.
53 base::WeakPtr<ClientSessionControl> client_session_control_;
54
55 DISALLOW_COPY_AND_ASSIGN(Core);
56 };
57
58 // Task runner on which ui::events are received.
59 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
60 scoped_ptr<Core> core_;
61
62 DISALLOW_COPY_AND_ASSIGN(LocalInputMonitorChromeos);
63 };
64
65 LocalInputMonitorChromeos::LocalInputMonitorChromeos(
66 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
67 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
68 base::WeakPtr<ClientSessionControl> client_session_control)
69 : input_task_runner_(input_task_runner),
70 core_(new Core(caller_task_runner, client_session_control)) {
71 input_task_runner_->PostTask(
72 FROM_HERE, base::Bind(&Core::Start, base::Unretained(core_.get())));
73 }
74
75 LocalInputMonitorChromeos::~LocalInputMonitorChromeos() {
76 input_task_runner_->DeleteSoon(FROM_HERE, core_.release());
77 }
78
79 LocalInputMonitorChromeos::Core::Core(
80 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
81 base::WeakPtr<ClientSessionControl> client_session_control)
82 : caller_task_runner_(caller_task_runner),
83 client_session_control_(client_session_control) {
84 DCHECK(client_session_control_.get());
85 }
86
87 void LocalInputMonitorChromeos::Core::Start() {
88 ui::PlatformEventSource::GetInstance()->AddPlatformEventObserver(this);
89 }
90
91 LocalInputMonitorChromeos::Core::~Core() {
92 ui::PlatformEventSource::GetInstance()->RemovePlatformEventObserver(this);
93 }
94
95 void LocalInputMonitorChromeos::Core::WillProcessEvent(
96 const ui::PlatformEvent& event) {
97 // No need to handle this callback.
98 }
99
100 void LocalInputMonitorChromeos::Core::DidProcessEvent(
101 const ui::PlatformEvent& event) {
102 ui::EventType type = ui::EventTypeFromNative(event);
103 if (type == ui::ET_MOUSE_MOVED) {
104 HandleMouseMove(event);
105 } else if (type == ui::ET_KEY_PRESSED) {
106 HandleKeyPressed(event);
107 }
108 }
109
110 void LocalInputMonitorChromeos::Core::HandleMouseMove(
111 const ui::PlatformEvent& event) {
112 gfx::Point mouse_position = ui::EventLocationFromNative(event);
113 caller_task_runner_->PostTask(
114 FROM_HERE,
115 base::Bind(
116 &ClientSessionControl::OnLocalMouseMoved, client_session_control_,
117 webrtc::DesktopVector(mouse_position.x(), mouse_position.y())));
118 }
119
120 void LocalInputMonitorChromeos::Core::HandleKeyPressed(
121 const ui::PlatformEvent& event) {
122 ui::KeyEvent key_event(event);
123 DCHECK(key_event.is_char());
124 if (key_event.IsControlDown() && key_event.IsAltDown() &&
125 key_event.key_code() == ui::VKEY_ESCAPE) {
126 caller_task_runner_->PostTask(
127 FROM_HERE, base::Bind(&ClientSessionControl::DisconnectSession,
128 client_session_control_));
129 }
130 }
131
132 } // namespace
133
134 scoped_ptr<LocalInputMonitor> LocalInputMonitor::Create(
135 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
136 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
137 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
138 base::WeakPtr<ClientSessionControl> client_session_control) {
139 return make_scoped_ptr(new LocalInputMonitorChromeos(
140 caller_task_runner, input_task_runner, client_session_control));
141 }
142
143 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/input_injector_x11.cc ('k') | remoting/host/local_input_monitor_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698