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

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

Issue 234023003: Build remoting for PNaCl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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) 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 <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #if defined(OS_NACL)
12 #include <sys/mount.h>
13 #include <nacl_io/nacl_io.h>
14 #endif
15
11 #include "base/bind.h" 16 #include "base/bind.h"
12 #include "base/callback.h" 17 #include "base/callback.h"
13 #include "base/json/json_reader.h" 18 #include "base/json/json_reader.h"
14 #include "base/json/json_writer.h" 19 #include "base/json/json_writer.h"
15 #include "base/lazy_instance.h" 20 #include "base/lazy_instance.h"
16 #include "base/logging.h" 21 #include "base/logging.h"
17 #include "base/strings/string_split.h" 22 #include "base/strings/string_split.h"
18 #include "base/strings/stringprintf.h" 23 #include "base/strings/stringprintf.h"
19 #include "base/synchronization/lock.h" 24 #include "base/synchronization/lock.h"
20 #include "base/threading/thread.h" 25 #include "base/threading/thread.h"
21 #include "base/values.h" 26 #include "base/values.h"
22 #include "crypto/random.h" 27 #include "crypto/random.h"
23 #include "jingle/glue/thread_wrapper.h" 28 #include "jingle/glue/thread_wrapper.h"
24 #include "media/base/media.h" 29 #include "media/base/yuv_convert.h"
25 #include "net/socket/ssl_server_socket.h" 30 #include "net/socket/ssl_server_socket.h"
26 #include "ppapi/cpp/completion_callback.h" 31 #include "ppapi/cpp/completion_callback.h"
27 #include "ppapi/cpp/dev/url_util_dev.h" 32 #include "ppapi/cpp/dev/url_util_dev.h"
28 #include "ppapi/cpp/image_data.h" 33 #include "ppapi/cpp/image_data.h"
29 #include "ppapi/cpp/input_event.h" 34 #include "ppapi/cpp/input_event.h"
30 #include "ppapi/cpp/rect.h" 35 #include "ppapi/cpp/rect.h"
31 #include "remoting/base/constants.h" 36 #include "remoting/base/constants.h"
32 #include "remoting/base/util.h" 37 #include "remoting/base/util.h"
33 #include "remoting/client/chromoting_client.h" 38 #include "remoting/client/chromoting_client.h"
34 #include "remoting/client/client_config.h" 39 #include "remoting/client/client_config.h"
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 initialized_(false), 206 initialized_(false),
202 plugin_task_runner_(new PluginThreadTaskRunner(&plugin_thread_delegate_)), 207 plugin_task_runner_(new PluginThreadTaskRunner(&plugin_thread_delegate_)),
203 context_(plugin_task_runner_.get()), 208 context_(plugin_task_runner_.get()),
204 input_tracker_(&mouse_input_filter_), 209 input_tracker_(&mouse_input_filter_),
205 key_mapper_(&input_tracker_), 210 key_mapper_(&input_tracker_),
206 normalizing_input_filter_(CreateNormalizingInputFilter(&key_mapper_)), 211 normalizing_input_filter_(CreateNormalizingInputFilter(&key_mapper_)),
207 input_handler_(this, normalizing_input_filter_.get()), 212 input_handler_(this, normalizing_input_filter_.get()),
208 use_async_pin_dialog_(false), 213 use_async_pin_dialog_(false),
209 use_media_source_rendering_(false), 214 use_media_source_rendering_(false),
210 weak_factory_(this) { 215 weak_factory_(this) {
216 #if defined(OS_NACL)
217 // In NaCl global resources need to be initialized differently because they
218 // are not shared with Chrome.
219 thread_task_runner_handle_.reset(
220 new base::ThreadTaskRunnerHandle(plugin_task_runner_));
221 thread_wrapper_.reset(
222 new jingle_glue::JingleThreadWrapper(plugin_task_runner_));
223 media::InitializeCPUSpecificYUVConversions();
224 #else
225 jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop();
Jamie 2014/04/14 22:23:42 Is this run on the same thread as it would have be
Sergey Ulanov 2014/04/14 23:16:51 Yes. All code in this file is executed on the main
226 #endif
227
228 #if defined(OS_NACL)
229 nacl_io_init_ppapi(pp_instance, pp::Module::Get()->get_browser_interface());
230 mount("", "/etc", "memfs", 0, "");
231 mount("", "/usr", "memfs", 0, "");
232 #endif
233
211 RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE | PP_INPUTEVENT_CLASS_WHEEL); 234 RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE | PP_INPUTEVENT_CLASS_WHEEL);
212 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD); 235 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD);
213 236
214 // Resister this instance to handle debug log messsages. 237 // Resister this instance to handle debug log messsages.
215 RegisterLoggingInstance(); 238 RegisterLoggingInstance();
216 239
217 #if defined(USE_OPENSSL) 240 #if defined(USE_OPENSSL)
218 // Initialize random seed for libjingle. It's necessary only with OpenSSL. 241 // Initialize random seed for libjingle. It's necessary only with OpenSSL.
219 char random_seed[kRandomSeedSize]; 242 char random_seed[kRandomSeedSize];
220 crypto::RandBytes(random_seed, sizeof(random_seed)); 243 crypto::RandBytes(random_seed, sizeof(random_seed));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 } 278 }
256 279
257 bool ChromotingInstance::Init(uint32_t argc, 280 bool ChromotingInstance::Init(uint32_t argc,
258 const char* argn[], 281 const char* argn[],
259 const char* argv[]) { 282 const char* argv[]) {
260 CHECK(!initialized_); 283 CHECK(!initialized_);
261 initialized_ = true; 284 initialized_ = true;
262 285
263 VLOG(1) << "Started ChromotingInstance::Init"; 286 VLOG(1) << "Started ChromotingInstance::Init";
264 287
265 // Check to make sure the media library is initialized. 288 // Check that the calling content is part of an app or extension. This is only
266 // http://crbug.com/91521. 289 // necessary for non-PNaCl version of the plugin. Also PPB_URLUtil_Dev doesn't
267 if (!media::IsMediaLibraryInitialized()) { 290 // work in NaCl at the moment so the check fails in NaCl builds.
Jamie 2014/04/14 22:23:42 Do we want this to work for non-extensions, or is
Sergey Ulanov 2014/04/14 23:16:51 We don't need this check for NaCl plugin. Pepper p
268 LOG(ERROR) << "Media library not initialized."; 291 #if !defined(OS_NACL)
269 return false;
270 }
271
272 // Check that the calling content is part of an app or extension.
273 if (!IsCallerAppOrExtension()) { 292 if (!IsCallerAppOrExtension()) {
274 LOG(ERROR) << "Not an app or extension"; 293 LOG(ERROR) << "Not an app or extension";
275 return false; 294 return false;
276 } 295 }
277 296 #endif
278 // Enable support for SSL server sockets, which must be done as early as
279 // possible, preferably before any NSS SSL sockets (client or server) have
280 // been created.
281 // It's possible that the hosting process has already made use of SSL, in
282 // which case, there may be a slight race.
283 net::EnableSSLServerSockets();
Jamie 2014/04/14 22:23:42 Did you intend to remove this? If so, please add s
Sergey Ulanov 2014/04/14 23:16:51 Yes, this is intentional. There is no reason to in
284 297
285 // Start all the threads. 298 // Start all the threads.
286 context_.Start(); 299 context_.Start();
287 300
288 return true; 301 return true;
289 } 302 }
290 303
291 void ChromotingInstance::HandleMessage(const pp::Var& message) { 304 void ChromotingInstance::HandleMessage(const pp::Var& message) {
292 if (!message.is_string()) { 305 if (!message.is_string()) {
293 LOG(ERROR) << "Received a message that is not a string."; 306 LOG(ERROR) << "Received a message that is not a string.";
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 } else if (method == "allowMouseLock") { 356 } else if (method == "allowMouseLock") {
344 HandleAllowMouseLockMessage(); 357 HandleAllowMouseLockMessage();
345 } else if (method == "enableMediaSourceRendering") { 358 } else if (method == "enableMediaSourceRendering") {
346 HandleEnableMediaSourceRendering(); 359 HandleEnableMediaSourceRendering();
347 } 360 }
348 } 361 }
349 362
350 void ChromotingInstance::DidChangeFocus(bool has_focus) { 363 void ChromotingInstance::DidChangeFocus(bool has_focus) {
351 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 364 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
352 365
366 if (!IsConnected())
367 return;
Jamie 2014/04/14 22:23:42 Is this required for this CL, or an unrelated bug-
Sergey Ulanov 2014/04/14 23:16:51 It fixes a bug that affects only NaCl build (I did
368
353 input_handler_.DidChangeFocus(has_focus); 369 input_handler_.DidChangeFocus(has_focus);
354 } 370 }
355 371
356 void ChromotingInstance::DidChangeView(const pp::View& view) { 372 void ChromotingInstance::DidChangeView(const pp::View& view) {
357 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 373 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
358 374
359 plugin_view_ = view; 375 plugin_view_ = view;
360 mouse_input_filter_.set_input_size( 376 mouse_input_filter_.set_input_size(
361 webrtc::DesktopSize(view.GetRect().width(), view.GetRect().height())); 377 webrtc::DesktopSize(view.GetRect().width(), view.GetRect().height()));
362 378
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 } 641 }
626 } 642 }
627 643
628 ConnectWithConfig(config, local_jid); 644 ConnectWithConfig(config, local_jid);
629 } 645 }
630 646
631 void ChromotingInstance::ConnectWithConfig(const ClientConfig& config, 647 void ChromotingInstance::ConnectWithConfig(const ClientConfig& config,
632 const std::string& local_jid) { 648 const std::string& local_jid) {
633 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 649 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
634 650
635 jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop();
636
637 if (use_media_source_rendering_) { 651 if (use_media_source_rendering_) {
638 video_renderer_.reset(new MediaSourceVideoRenderer(this)); 652 video_renderer_.reset(new MediaSourceVideoRenderer(this));
639 } else { 653 } else {
640 view_.reset(new PepperView(this, &context_)); 654 view_.reset(new PepperView(this, &context_));
641 view_weak_factory_.reset( 655 view_weak_factory_.reset(
642 new base::WeakPtrFactory<FrameConsumer>(view_.get())); 656 new base::WeakPtrFactory<FrameConsumer>(view_.get()));
643 657
644 // SoftwareVideoRenderer runs on a separate thread so for now we wrap 658 // SoftwareVideoRenderer runs on a separate thread so for now we wrap
645 // PepperView with a ref-counted proxy object. 659 // PepperView with a ref-counted proxy object.
646 scoped_refptr<FrameConsumerProxy> consumer_proxy = 660 scoped_refptr<FrameConsumerProxy> consumer_proxy =
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
1128 pp::VarArrayBuffer array_buffer(buffer_size); 1142 pp::VarArrayBuffer array_buffer(buffer_size);
1129 void* data_ptr = array_buffer.Map(); 1143 void* data_ptr = array_buffer.Map();
1130 memcpy(data_ptr, buffer, buffer_size); 1144 memcpy(data_ptr, buffer, buffer_size);
1131 array_buffer.Unmap(); 1145 array_buffer.Unmap();
1132 pp::VarDictionary data_dictionary; 1146 pp::VarDictionary data_dictionary;
1133 data_dictionary.Set(pp::Var("buffer"), array_buffer); 1147 data_dictionary.Set(pp::Var("buffer"), array_buffer);
1134 PostChromotingMessage("mediaSourceData", data_dictionary); 1148 PostChromotingMessage("mediaSourceData", data_dictionary);
1135 } 1149 }
1136 1150
1137 } // namespace remoting 1151 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698