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

Side by Side Diff: remoting/client/plugin/chromoting_instance.cc

Issue 7453003: Change Chromoting client to use Pepper's new Resource-base InputEvents. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup Created 9 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "remoting/client/plugin/chromoting_instance.h" 5 #include "remoting/client/plugin/chromoting_instance.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/message_loop.h" 12 #include "base/message_loop.h"
13 #include "base/stringprintf.h" 13 #include "base/stringprintf.h"
14 #include "base/synchronization/waitable_event.h" 14 #include "base/synchronization/waitable_event.h"
15 #include "base/task.h" 15 #include "base/task.h"
16 #include "base/threading/thread.h" 16 #include "base/threading/thread.h"
17 // TODO(sergeyu): We should not depend on renderer here. Instead P2P 17 // TODO(sergeyu): We should not depend on renderer here. Instead P2P
18 // Pepper API should be used. Remove this dependency. 18 // Pepper API should be used. Remove this dependency.
19 // crbug.com/74951 19 // crbug.com/74951
20 #include "content/renderer/p2p/ipc_network_manager.h" 20 #include "content/renderer/p2p/ipc_network_manager.h"
21 #include "content/renderer/p2p/ipc_socket_factory.h" 21 #include "content/renderer/p2p/ipc_socket_factory.h"
22 #include "ppapi/c/pp_input_event.h"
23 #include "ppapi/cpp/completion_callback.h" 22 #include "ppapi/cpp/completion_callback.h"
23 #include "ppapi/cpp/input_event.h"
24 #include "ppapi/cpp/rect.h" 24 #include "ppapi/cpp/rect.h"
25 // TODO(wez): Remove this when crbug.com/86353 is complete. 25 // TODO(wez): Remove this when crbug.com/86353 is complete.
26 #include "ppapi/cpp/private/var_private.h" 26 #include "ppapi/cpp/private/var_private.h"
27 #include "remoting/client/client_config.h" 27 #include "remoting/client/client_config.h"
28 #include "remoting/client/chromoting_client.h" 28 #include "remoting/client/chromoting_client.h"
29 #include "remoting/client/rectangle_update_decoder.h" 29 #include "remoting/client/rectangle_update_decoder.h"
30 #include "remoting/client/plugin/chromoting_scriptable_object.h" 30 #include "remoting/client/plugin/chromoting_scriptable_object.h"
31 #include "remoting/client/plugin/pepper_client_logger.h" 31 #include "remoting/client/plugin/pepper_client_logger.h"
32 #include "remoting/client/plugin/pepper_input_handler.h" 32 #include "remoting/client/plugin/pepper_input_handler.h"
33 #include "remoting/client/plugin/pepper_port_allocator_session.h" 33 #include "remoting/client/plugin/pepper_port_allocator_session.h"
(...skipping 14 matching lines...) Expand all
48 #include "webkit/plugins/ppapi/resource_tracker.h" 48 #include "webkit/plugins/ppapi/resource_tracker.h"
49 49
50 namespace remoting { 50 namespace remoting {
51 51
52 const char* ChromotingInstance::kMimeType = "pepper-application/x-chromoting"; 52 const char* ChromotingInstance::kMimeType = "pepper-application/x-chromoting";
53 53
54 ChromotingInstance::ChromotingInstance(PP_Instance pp_instance) 54 ChromotingInstance::ChromotingInstance(PP_Instance pp_instance)
55 : pp::InstancePrivate(pp_instance), 55 : pp::InstancePrivate(pp_instance),
56 initialized_(false), 56 initialized_(false),
57 logger_(this) { 57 logger_(this) {
58 RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE | PP_INPUTEVENT_CLASS_WHEEL);
59 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD);
58 } 60 }
59 61
60 ChromotingInstance::~ChromotingInstance() { 62 ChromotingInstance::~ChromotingInstance() {
61 DCHECK(CurrentlyOnPluginThread()); 63 DCHECK(CurrentlyOnPluginThread());
62 64
63 if (client_.get()) { 65 if (client_.get()) {
64 base::WaitableEvent done_event(true, false); 66 base::WaitableEvent done_event(true, false);
65 client_->Stop(base::Bind(&base::WaitableEvent::Signal, 67 client_->Stop(base::Bind(&base::WaitableEvent::Signal,
66 base::Unretained(&done_event))); 68 base::Unretained(&done_event)));
67 done_event.Wait(); 69 done_event.Wait();
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 164
163 void ChromotingInstance::DidChangeView(const pp::Rect& position, 165 void ChromotingInstance::DidChangeView(const pp::Rect& position,
164 const pp::Rect& clip) { 166 const pp::Rect& clip) {
165 // This lets |view_| implement scale-to-fit. But it only specifies a 167 // This lets |view_| implement scale-to-fit. But it only specifies a
166 // sub-rectangle of the plugin window as the rectangle on which the host 168 // sub-rectangle of the plugin window as the rectangle on which the host
167 // screen can be displayed, so |view_| has to make sure the plugin window 169 // screen can be displayed, so |view_| has to make sure the plugin window
168 // is large. 170 // is large.
169 view_->SetScreenSize(clip.width(), clip.height()); 171 view_->SetScreenSize(clip.width(), clip.height());
170 } 172 }
171 173
172 bool ChromotingInstance::HandleInputEvent(const PP_InputEvent& event) { 174 bool ChromotingInstance::HandleInputEvent(const pp::InputEvent& event) {
173 DCHECK(CurrentlyOnPluginThread()); 175 DCHECK(CurrentlyOnPluginThread());
174 176
175 PepperInputHandler* pih 177 PepperInputHandler* pih
176 = static_cast<PepperInputHandler*>(input_handler_.get()); 178 = static_cast<PepperInputHandler*>(input_handler_.get());
177 179
178 switch (event.type) { 180 switch (event.GetType()) {
179 case PP_INPUTEVENT_TYPE_MOUSEDOWN: 181 case PP_INPUTEVENT_TYPE_MOUSEDOWN:
180 pih->HandleMouseButtonEvent(true, event.u.mouse); 182 pih->HandleMouseButtonEvent(true, pp::MouseInputEvent(event));
181 return true; 183 return true;
182 184
183 case PP_INPUTEVENT_TYPE_MOUSEUP: 185 case PP_INPUTEVENT_TYPE_MOUSEUP:
184 pih->HandleMouseButtonEvent(false, event.u.mouse); 186 pih->HandleMouseButtonEvent(false, pp::MouseInputEvent(event));
185 return true; 187 return true;
186 188
187 case PP_INPUTEVENT_TYPE_MOUSEMOVE: 189 case PP_INPUTEVENT_TYPE_MOUSEMOVE:
188 case PP_INPUTEVENT_TYPE_MOUSEENTER: 190 case PP_INPUTEVENT_TYPE_MOUSEENTER:
189 case PP_INPUTEVENT_TYPE_MOUSELEAVE: 191 case PP_INPUTEVENT_TYPE_MOUSELEAVE:
190 pih->HandleMouseMoveEvent(event.u.mouse); 192 pih->HandleMouseMoveEvent(pp::MouseInputEvent(event));
191 return true; 193 return true;
192 194
193 case PP_INPUTEVENT_TYPE_CONTEXTMENU: 195 case PP_INPUTEVENT_TYPE_CONTEXTMENU:
194 // We need to return true here or else we'll get a local (plugin) context 196 // We need to return true here or else we'll get a local (plugin) context
195 // menu instead of the mouseup event for the right click. 197 // menu instead of the mouseup event for the right click.
196 return true; 198 return true;
197 199
198 case PP_INPUTEVENT_TYPE_KEYDOWN: 200 case PP_INPUTEVENT_TYPE_KEYDOWN:
199 case PP_INPUTEVENT_TYPE_KEYUP: 201 case PP_INPUTEVENT_TYPE_KEYUP:
200 logger_.VLog(3, "PP_INPUTEVENT_TYPE_KEY%s key=%d", 202 {
201 (event.type==PP_INPUTEVENT_TYPE_KEYDOWN ? "DOWN" : "UP"), 203 pp::KeyboardInputEvent key = pp::KeyboardInputEvent(event);
202 event.u.key.key_code); 204 logger_.VLog(3, "PP_INPUTEVENT_TYPE_KEY%s key=%d",
203 pih->HandleKeyEvent(event.type == PP_INPUTEVENT_TYPE_KEYDOWN, 205 (event.GetType()==PP_INPUTEVENT_TYPE_KEYDOWN ? "DOWN" : "UP"),
dmac 2011/07/20 00:34:31 space between ) and ==
garykac 2011/07/20 18:55:28 Done.
204 event.u.key); 206 key.GetKeyCode());
205 return true; 207 pih->HandleKeyEvent(event.GetType() == PP_INPUTEVENT_TYPE_KEYDOWN, key);
Wez 2011/07/20 00:58:35 nit: Why use event.GetType() == foo here, but not
garykac 2011/07/20 18:55:28 made consistent
208 return true;
209 }
206 210
207 case PP_INPUTEVENT_TYPE_CHAR: 211 case PP_INPUTEVENT_TYPE_CHAR:
208 pih->HandleCharacterEvent(event.u.character); 212 pih->HandleCharacterEvent(pp::KeyboardInputEvent(event));
209 return true; 213 return true;
210 214
211 default: 215 default:
216 LOG(INFO) << "Unhandled input event: " << event.GetType();
212 break; 217 break;
213 } 218 }
214 219
215 return false; 220 return false;
216 } 221 }
217 222
218 ChromotingScriptableObject* ChromotingInstance::GetScriptableObject() { 223 ChromotingScriptableObject* ChromotingInstance::GetScriptableObject() {
219 pp::VarPrivate object = GetInstanceObject(); 224 pp::VarPrivate object = GetInstanceObject();
220 if (!object.is_undefined()) { 225 if (!object.is_undefined()) {
221 pp::deprecated::ScriptableObject* so = object.AsScriptableObject(); 226 pp::deprecated::ScriptableObject* so = object.AsScriptableObject();
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 if (!client_.get()) 286 if (!client_.get())
282 return NULL; 287 return NULL;
283 return client_->GetStats(); 288 return client_->GetStats();
284 } 289 }
285 290
286 void ChromotingInstance::ReleaseAllKeys() { 291 void ChromotingInstance::ReleaseAllKeys() {
287 input_handler_->ReleaseAllKeys(); 292 input_handler_->ReleaseAllKeys();
288 } 293 }
289 294
290 } // namespace remoting 295 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698