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

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

Issue 799233004: Add touch events to the protocol, the stub layer, and to the client plugin. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 5 years, 9 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #if defined(OS_NACL) 10 #if defined(OS_NACL)
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 180
181 const char ChromotingInstance::kRequestedCapabilities[] = ""; 181 const char ChromotingInstance::kRequestedCapabilities[] = "";
182 const char ChromotingInstance::kSupportedCapabilities[] = "desktopShape"; 182 const char ChromotingInstance::kSupportedCapabilities[] = "desktopShape";
183 183
184 ChromotingInstance::ChromotingInstance(PP_Instance pp_instance) 184 ChromotingInstance::ChromotingInstance(PP_Instance pp_instance)
185 : pp::Instance(pp_instance), 185 : pp::Instance(pp_instance),
186 initialized_(false), 186 initialized_(false),
187 plugin_task_runner_(new PluginThreadTaskRunner(&plugin_thread_delegate_)), 187 plugin_task_runner_(new PluginThreadTaskRunner(&plugin_thread_delegate_)),
188 context_(plugin_task_runner_.get()), 188 context_(plugin_task_runner_.get()),
189 input_tracker_(&mouse_input_filter_), 189 input_tracker_(&mouse_input_filter_),
190 key_mapper_(&input_tracker_), 190 touch_input_scaler_(&input_tracker_),
191 key_mapper_(&touch_input_scaler_),
191 cursor_setter_(this), 192 cursor_setter_(this),
192 empty_cursor_filter_(&cursor_setter_), 193 empty_cursor_filter_(&cursor_setter_),
193 text_input_controller_(this), 194 text_input_controller_(this),
194 use_async_pin_dialog_(false), 195 use_async_pin_dialog_(false),
195 weak_factory_(this) { 196 weak_factory_(this) {
196 #if defined(OS_NACL) 197 #if defined(OS_NACL)
197 // In NaCl global resources need to be initialized differently because they 198 // In NaCl global resources need to be initialized differently because they
198 // are not shared with Chrome. 199 // are not shared with Chrome.
199 thread_task_runner_handle_.reset( 200 thread_task_runner_handle_.reset(
200 new base::ThreadTaskRunnerHandle(plugin_task_runner_)); 201 new base::ThreadTaskRunnerHandle(plugin_task_runner_));
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 } else if (method == "extensionMessage") { 346 } else if (method == "extensionMessage") {
346 HandleExtensionMessage(*data); 347 HandleExtensionMessage(*data);
347 } else if (method == "allowMouseLock") { 348 } else if (method == "allowMouseLock") {
348 HandleAllowMouseLockMessage(); 349 HandleAllowMouseLockMessage();
349 } else if (method == "sendMouseInputWhenUnfocused") { 350 } else if (method == "sendMouseInputWhenUnfocused") {
350 HandleSendMouseInputWhenUnfocused(); 351 HandleSendMouseInputWhenUnfocused();
351 } else if (method == "delegateLargeCursors") { 352 } else if (method == "delegateLargeCursors") {
352 HandleDelegateLargeCursors(); 353 HandleDelegateLargeCursors();
353 } else if (method == "enableDebugRegion") { 354 } else if (method == "enableDebugRegion") {
354 HandleEnableDebugRegion(*data); 355 HandleEnableDebugRegion(*data);
356 } else if (method == "enableTouchEvents") {
357 HandleEnableTouchEvents();
355 } 358 }
356 } 359 }
357 360
358 void ChromotingInstance::DidChangeFocus(bool has_focus) { 361 void ChromotingInstance::DidChangeFocus(bool has_focus) {
359 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 362 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
360 363
361 if (!IsConnected()) 364 if (!IsConnected())
362 return; 365 return;
363 366
364 input_handler_.DidChangeFocus(has_focus); 367 input_handler_.DidChangeFocus(has_focus);
365 if (mouse_locker_) 368 if (mouse_locker_)
366 mouse_locker_->DidChangeFocus(has_focus); 369 mouse_locker_->DidChangeFocus(has_focus);
367 } 370 }
368 371
369 void ChromotingInstance::DidChangeView(const pp::View& view) { 372 void ChromotingInstance::DidChangeView(const pp::View& view) {
370 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 373 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
371 374
372 plugin_view_ = view; 375 plugin_view_ = view;
373 mouse_input_filter_.set_input_size( 376 webrtc::DesktopSize size(
374 webrtc::DesktopSize(view.GetRect().width(), view.GetRect().height())); 377 webrtc::DesktopSize(view.GetRect().width(), view.GetRect().height()));
378 mouse_input_filter_.set_input_size(size);
379 touch_input_scaler_.set_input_size(size);
375 380
376 if (video_renderer_) 381 if (video_renderer_)
377 video_renderer_->OnViewChanged(view); 382 video_renderer_->OnViewChanged(view);
378 } 383 }
379 384
380 bool ChromotingInstance::HandleInputEvent(const pp::InputEvent& event) { 385 bool ChromotingInstance::HandleInputEvent(const pp::InputEvent& event) {
381 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 386 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
382 387
383 if (!IsConnected()) 388 if (!IsConnected())
384 return false; 389 return false;
(...skipping 11 matching lines...) Expand all
396 OnConnectionState(protocol::ConnectionToHost::FAILED, 401 OnConnectionState(protocol::ConnectionToHost::FAILED,
397 protocol::INCOMPATIBLE_PROTOCOL); 402 protocol::INCOMPATIBLE_PROTOCOL);
398 } 403 }
399 404
400 void ChromotingInstance::OnVideoFirstFrameReceived() { 405 void ChromotingInstance::OnVideoFirstFrameReceived() {
401 scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue()); 406 scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue());
402 PostLegacyJsonMessage("onFirstFrameReceived", data.Pass()); 407 PostLegacyJsonMessage("onFirstFrameReceived", data.Pass());
403 } 408 }
404 409
405 void ChromotingInstance::OnVideoSize(const webrtc::DesktopSize& size, 410 void ChromotingInstance::OnVideoSize(const webrtc::DesktopSize& size,
406 const webrtc::DesktopVector& dpi) { 411 const webrtc::DesktopVector& dpi) {
407 mouse_input_filter_.set_output_size(size); 412 mouse_input_filter_.set_output_size(size);
413 touch_input_scaler_.set_output_size(size);
408 414
409 scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue()); 415 scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue());
410 data->SetInteger("width", size.width()); 416 data->SetInteger("width", size.width());
411 data->SetInteger("height", size.height()); 417 data->SetInteger("height", size.height());
412 if (dpi.x()) 418 if (dpi.x())
413 data->SetInteger("x_dpi", dpi.x()); 419 data->SetInteger("x_dpi", dpi.x());
414 if (dpi.y()) 420 if (dpi.y())
415 data->SetInteger("y_dpi", dpi.y()); 421 data->SetInteger("y_dpi", dpi.y());
416 PostLegacyJsonMessage("onDesktopSize", data.Pass()); 422 PostLegacyJsonMessage("onDesktopSize", data.Pass());
417 } 423 }
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 687
682 if (!plugin_view_.is_null()) 688 if (!plugin_view_.is_null())
683 video_renderer_->OnViewChanged(plugin_view_); 689 video_renderer_->OnViewChanged(plugin_view_);
684 690
685 scoped_ptr<AudioPlayer> audio_player(new PepperAudioPlayer(this)); 691 scoped_ptr<AudioPlayer> audio_player(new PepperAudioPlayer(this));
686 client_.reset(new ChromotingClient(&context_, this, video_renderer_.get(), 692 client_.reset(new ChromotingClient(&context_, this, video_renderer_.get(),
687 audio_player.Pass())); 693 audio_player.Pass()));
688 694
689 // Connect the input pipeline to the protocol stub & initialize components. 695 // Connect the input pipeline to the protocol stub & initialize components.
690 mouse_input_filter_.set_input_stub(client_->input_stub()); 696 mouse_input_filter_.set_input_stub(client_->input_stub());
697 touch_input_scaler_.set_input_stub(client_->input_stub());
691 if (!plugin_view_.is_null()) { 698 if (!plugin_view_.is_null()) {
692 mouse_input_filter_.set_input_size(webrtc::DesktopSize( 699 webrtc::DesktopSize size(plugin_view_.GetRect().width(),
693 plugin_view_.GetRect().width(), plugin_view_.GetRect().height())); 700 plugin_view_.GetRect().height());
701 mouse_input_filter_.set_input_size(size);
702 touch_input_scaler_.set_input_size(size);
694 } 703 }
695 704
696 // Setup the signal strategy. 705 // Setup the signal strategy.
697 signal_strategy_.reset(new DelegatingSignalStrategy( 706 signal_strategy_.reset(new DelegatingSignalStrategy(
698 local_jid, base::Bind(&ChromotingInstance::SendOutgoingIq, 707 local_jid, base::Bind(&ChromotingInstance::SendOutgoingIq,
699 weak_factory_.GetWeakPtr()))); 708 weak_factory_.GetWeakPtr())));
700 709
701 // Create TransportFactory. 710 // Create TransportFactory.
702 scoped_ptr<protocol::TransportFactory> transport_factory( 711 scoped_ptr<protocol::TransportFactory> transport_factory(
703 new protocol::LibjingleTransportFactory( 712 new protocol::LibjingleTransportFactory(
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 const base::DictionaryValue& data) { 981 const base::DictionaryValue& data) {
973 bool enable = false; 982 bool enable = false;
974 if (!data.GetBoolean("enable", &enable)) { 983 if (!data.GetBoolean("enable", &enable)) {
975 LOG(ERROR) << "Invalid enableDebugRegion."; 984 LOG(ERROR) << "Invalid enableDebugRegion.";
976 return; 985 return;
977 } 986 }
978 987
979 video_renderer_->EnableDebugDirtyRegion(enable); 988 video_renderer_->EnableDebugDirtyRegion(enable);
980 } 989 }
981 990
991 void ChromotingInstance::HandleEnableTouchEvents() {
992 RequestInputEvents(PP_INPUTEVENT_CLASS_TOUCH);
993 }
994
982 void ChromotingInstance::Disconnect() { 995 void ChromotingInstance::Disconnect() {
983 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 996 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
984 997
985 VLOG(0) << "Disconnecting from host."; 998 VLOG(0) << "Disconnecting from host.";
986 999
987 // Disconnect the input pipeline and teardown the connection. 1000 // Disconnect the input pipeline and teardown the connection.
988 mouse_input_filter_.set_input_stub(nullptr); 1001 mouse_input_filter_.set_input_stub(nullptr);
989 client_.reset(); 1002 client_.reset();
990 video_renderer_.reset(); 1003 video_renderer_.reset();
991 } 1004 }
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
1175 1188
1176 #if !defined(OS_NACL) 1189 #if !defined(OS_NACL)
1177 // Log messages are forwarded to the webapp only in PNaCl version of the 1190 // Log messages are forwarded to the webapp only in PNaCl version of the
1178 // plugin, so ProcessLogToUI() needs to be called explicitly in the non-PNaCl 1191 // plugin, so ProcessLogToUI() needs to be called explicitly in the non-PNaCl
1179 // version. 1192 // version.
1180 ProcessLogToUI(message); 1193 ProcessLogToUI(message);
1181 #endif // !defined(OS_NACL) 1194 #endif // !defined(OS_NACL)
1182 } 1195 }
1183 1196
1184 } // namespace remoting 1197 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/client/plugin/chromoting_instance.h ('k') | remoting/client/plugin/pepper_input_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698