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

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: update net.gypi Created 6 years, 7 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
« no previous file with comments | « remoting/client/plugin/chromoting_instance.h ('k') | remoting/client/plugin/pepper_module.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "ppapi/cpp/var_array_buffer.h" 36 #include "ppapi/cpp/var_array_buffer.h"
32 #include "ppapi/cpp/var_dictionary.h" 37 #include "ppapi/cpp/var_dictionary.h"
33 #include "remoting/base/constants.h" 38 #include "remoting/base/constants.h"
34 #include "remoting/base/util.h" 39 #include "remoting/base/util.h"
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 initialized_(false), 208 initialized_(false),
204 plugin_task_runner_(new PluginThreadTaskRunner(&plugin_thread_delegate_)), 209 plugin_task_runner_(new PluginThreadTaskRunner(&plugin_thread_delegate_)),
205 context_(plugin_task_runner_.get()), 210 context_(plugin_task_runner_.get()),
206 input_tracker_(&mouse_input_filter_), 211 input_tracker_(&mouse_input_filter_),
207 key_mapper_(&input_tracker_), 212 key_mapper_(&input_tracker_),
208 normalizing_input_filter_(CreateNormalizingInputFilter(&key_mapper_)), 213 normalizing_input_filter_(CreateNormalizingInputFilter(&key_mapper_)),
209 input_handler_(this, normalizing_input_filter_.get()), 214 input_handler_(this, normalizing_input_filter_.get()),
210 use_async_pin_dialog_(false), 215 use_async_pin_dialog_(false),
211 use_media_source_rendering_(false), 216 use_media_source_rendering_(false),
212 weak_factory_(this) { 217 weak_factory_(this) {
218 #if defined(OS_NACL)
219 // In NaCl global resources need to be initialized differently because they
220 // are not shared with Chrome.
221 thread_task_runner_handle_.reset(
222 new base::ThreadTaskRunnerHandle(plugin_task_runner_));
223 thread_wrapper_.reset(
224 new jingle_glue::JingleThreadWrapper(plugin_task_runner_));
225 media::InitializeCPUSpecificYUVConversions();
226 #else
227 jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop();
228 #endif
229
230 #if defined(OS_NACL)
231 nacl_io_init_ppapi(pp_instance, pp::Module::Get()->get_browser_interface());
232 mount("", "/etc", "memfs", 0, "");
233 mount("", "/usr", "memfs", 0, "");
234 #endif
235
213 RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE | PP_INPUTEVENT_CLASS_WHEEL); 236 RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE | PP_INPUTEVENT_CLASS_WHEEL);
214 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD); 237 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD);
215 238
216 // Resister this instance to handle debug log messsages. 239 // Resister this instance to handle debug log messsages.
217 RegisterLoggingInstance(); 240 RegisterLoggingInstance();
218 241
219 #if defined(USE_OPENSSL) 242 #if defined(USE_OPENSSL)
220 // Initialize random seed for libjingle. It's necessary only with OpenSSL. 243 // Initialize random seed for libjingle. It's necessary only with OpenSSL.
221 char random_seed[kRandomSeedSize]; 244 char random_seed[kRandomSeedSize];
222 crypto::RandBytes(random_seed, sizeof(random_seed)); 245 crypto::RandBytes(random_seed, sizeof(random_seed));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 } 280 }
258 281
259 bool ChromotingInstance::Init(uint32_t argc, 282 bool ChromotingInstance::Init(uint32_t argc,
260 const char* argn[], 283 const char* argn[],
261 const char* argv[]) { 284 const char* argv[]) {
262 CHECK(!initialized_); 285 CHECK(!initialized_);
263 initialized_ = true; 286 initialized_ = true;
264 287
265 VLOG(1) << "Started ChromotingInstance::Init"; 288 VLOG(1) << "Started ChromotingInstance::Init";
266 289
267 // Check to make sure the media library is initialized. 290 // Check that the calling content is part of an app or extension. This is only
268 // http://crbug.com/91521. 291 // necessary for non-PNaCl version of the plugin. Also PPB_URLUtil_Dev doesn't
269 if (!media::IsMediaLibraryInitialized()) { 292 // work in NaCl at the moment so the check fails in NaCl builds.
270 LOG(ERROR) << "Media library not initialized."; 293 #if !defined(OS_NACL)
271 return false;
272 }
273
274 // Check that the calling content is part of an app or extension.
275 if (!IsCallerAppOrExtension()) { 294 if (!IsCallerAppOrExtension()) {
276 LOG(ERROR) << "Not an app or extension"; 295 LOG(ERROR) << "Not an app or extension";
277 return false; 296 return false;
278 } 297 }
298 #endif
279 299
280 // Start all the threads. 300 // Start all the threads.
281 context_.Start(); 301 context_.Start();
282 302
283 return true; 303 return true;
284 } 304 }
285 305
286 void ChromotingInstance::HandleMessage(const pp::Var& message) { 306 void ChromotingInstance::HandleMessage(const pp::Var& message) {
287 if (!message.is_string()) { 307 if (!message.is_string()) {
288 LOG(ERROR) << "Received a message that is not a string."; 308 LOG(ERROR) << "Received a message that is not a string.";
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 } else if (method == "allowMouseLock") { 358 } else if (method == "allowMouseLock") {
339 HandleAllowMouseLockMessage(); 359 HandleAllowMouseLockMessage();
340 } else if (method == "enableMediaSourceRendering") { 360 } else if (method == "enableMediaSourceRendering") {
341 HandleEnableMediaSourceRendering(); 361 HandleEnableMediaSourceRendering();
342 } 362 }
343 } 363 }
344 364
345 void ChromotingInstance::DidChangeFocus(bool has_focus) { 365 void ChromotingInstance::DidChangeFocus(bool has_focus) {
346 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 366 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
347 367
368 if (!IsConnected())
369 return;
370
348 input_handler_.DidChangeFocus(has_focus); 371 input_handler_.DidChangeFocus(has_focus);
349 } 372 }
350 373
351 void ChromotingInstance::DidChangeView(const pp::View& view) { 374 void ChromotingInstance::DidChangeView(const pp::View& view) {
352 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 375 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
353 376
354 plugin_view_ = view; 377 plugin_view_ = view;
355 mouse_input_filter_.set_input_size( 378 mouse_input_filter_.set_input_size(
356 webrtc::DesktopSize(view.GetRect().width(), view.GetRect().height())); 379 webrtc::DesktopSize(view.GetRect().width(), view.GetRect().height()));
357 380
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 } 643 }
621 } 644 }
622 645
623 ConnectWithConfig(config, local_jid); 646 ConnectWithConfig(config, local_jid);
624 } 647 }
625 648
626 void ChromotingInstance::ConnectWithConfig(const ClientConfig& config, 649 void ChromotingInstance::ConnectWithConfig(const ClientConfig& config,
627 const std::string& local_jid) { 650 const std::string& local_jid) {
628 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 651 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
629 652
630 jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop();
631
632 if (use_media_source_rendering_) { 653 if (use_media_source_rendering_) {
633 video_renderer_.reset(new MediaSourceVideoRenderer(this)); 654 video_renderer_.reset(new MediaSourceVideoRenderer(this));
634 } else { 655 } else {
635 view_.reset(new PepperView(this, &context_)); 656 view_.reset(new PepperView(this, &context_));
636 view_weak_factory_.reset( 657 view_weak_factory_.reset(
637 new base::WeakPtrFactory<FrameConsumer>(view_.get())); 658 new base::WeakPtrFactory<FrameConsumer>(view_.get()));
638 659
639 // SoftwareVideoRenderer runs on a separate thread so for now we wrap 660 // SoftwareVideoRenderer runs on a separate thread so for now we wrap
640 // PepperView with a ref-counted proxy object. 661 // PepperView with a ref-counted proxy object.
641 scoped_refptr<FrameConsumerProxy> consumer_proxy = 662 scoped_refptr<FrameConsumerProxy> consumer_proxy =
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
1123 pp::VarArrayBuffer array_buffer(buffer_size); 1144 pp::VarArrayBuffer array_buffer(buffer_size);
1124 void* data_ptr = array_buffer.Map(); 1145 void* data_ptr = array_buffer.Map();
1125 memcpy(data_ptr, buffer, buffer_size); 1146 memcpy(data_ptr, buffer, buffer_size);
1126 array_buffer.Unmap(); 1147 array_buffer.Unmap();
1127 pp::VarDictionary data_dictionary; 1148 pp::VarDictionary data_dictionary;
1128 data_dictionary.Set(pp::Var("buffer"), array_buffer); 1149 data_dictionary.Set(pp::Var("buffer"), array_buffer);
1129 PostChromotingMessage("mediaSourceData", data_dictionary); 1150 PostChromotingMessage("mediaSourceData", data_dictionary);
1130 } 1151 }
1131 1152
1132 } // namespace remoting 1153 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/client/plugin/chromoting_instance.h ('k') | remoting/client/plugin/pepper_module.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698