OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 * Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
5 */ | 5 */ |
6 | 6 |
7 #define NACL_LOG_MODULE_NAME "Plugin_ServiceRuntime" | 7 #define NACL_LOG_MODULE_NAME "Plugin_ServiceRuntime" |
8 | 8 |
9 #include "ppapi/native_client/src/trusted/plugin/service_runtime.h" | 9 #include "ppapi/native_client/src/trusted/plugin/service_runtime.h" |
10 | 10 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 #include "ppapi/native_client/src/trusted/plugin/plugin.h" | 44 #include "ppapi/native_client/src/trusted/plugin/plugin.h" |
45 #include "ppapi/native_client/src/trusted/plugin/plugin_error.h" | 45 #include "ppapi/native_client/src/trusted/plugin/plugin_error.h" |
46 #include "ppapi/native_client/src/trusted/plugin/pnacl_resources.h" | 46 #include "ppapi/native_client/src/trusted/plugin/pnacl_resources.h" |
47 #include "ppapi/native_client/src/trusted/plugin/sel_ldr_launcher_chrome.h" | 47 #include "ppapi/native_client/src/trusted/plugin/sel_ldr_launcher_chrome.h" |
48 #include "ppapi/native_client/src/trusted/plugin/srpc_client.h" | 48 #include "ppapi/native_client/src/trusted/plugin/srpc_client.h" |
49 #include "ppapi/native_client/src/trusted/plugin/utility.h" | 49 #include "ppapi/native_client/src/trusted/plugin/utility.h" |
50 #include "ppapi/native_client/src/trusted/weak_ref/call_on_main_thread.h" | 50 #include "ppapi/native_client/src/trusted/weak_ref/call_on_main_thread.h" |
51 | 51 |
52 namespace plugin { | 52 namespace plugin { |
53 | 53 |
54 namespace { | |
55 | |
56 class ManifestService { | |
57 public: | |
58 ManifestService(nacl::WeakRefAnchor* anchor, | |
59 PluginReverseInterface* plugin_reverse) | |
60 : anchor_(anchor), | |
61 plugin_reverse_(plugin_reverse) { | |
62 } | |
63 | |
64 ~ManifestService() { | |
65 anchor_->Unref(); | |
66 } | |
67 | |
68 bool Quit() { | |
69 delete this; | |
70 return false; | |
71 } | |
72 | |
73 bool StartupInitializationComplete() { | |
74 // Release this instance if the ServiceRuntime is already destructed. | |
75 if (anchor_->is_abandoned()) { | |
76 delete this; | |
77 return false; | |
78 } | |
79 | |
80 plugin_reverse_->StartupInitializationComplete(); | |
81 return true; | |
82 } | |
83 | |
84 static PP_Bool QuitTrampoline(void* user_data) { | |
85 return PP_FromBool(static_cast<ManifestService*>(user_data)->Quit()); | |
86 } | |
87 | |
88 static PP_Bool StartupInitializationCompleteTrampoline(void* user_data) { | |
89 return PP_FromBool(static_cast<ManifestService*>(user_data)-> | |
90 StartupInitializationComplete()); | |
91 } | |
92 | |
93 private: | |
94 // Weak reference to check if plugin_reverse is legally accessible or not. | |
95 nacl::WeakRefAnchor* anchor_; | |
96 PluginReverseInterface* plugin_reverse_; | |
97 | |
98 DISALLOW_COPY_AND_ASSIGN(ManifestService); | |
99 }; | |
100 | |
101 // Vtable to pass functions to LaunchSelLdr. | |
102 const PPP_ManifestService kManifestServiceVTable = { | |
103 &ManifestService::QuitTrampoline, | |
104 &ManifestService::StartupInitializationCompleteTrampoline, | |
105 }; | |
106 | |
107 } // namespace | |
108 | |
109 OpenManifestEntryResource::~OpenManifestEntryResource() { | 54 OpenManifestEntryResource::~OpenManifestEntryResource() { |
110 } | 55 } |
111 | 56 |
112 PluginReverseInterface::PluginReverseInterface( | 57 PluginReverseInterface::PluginReverseInterface( |
113 nacl::WeakRefAnchor* anchor, | 58 nacl::WeakRefAnchor* anchor, |
114 Plugin* plugin, | 59 Plugin* plugin, |
115 ServiceRuntime* service_runtime, | 60 ServiceRuntime* service_runtime, |
116 pp::CompletionCallback init_done_cb, | 61 pp::CompletionCallback init_done_cb, |
117 pp::CompletionCallback crash_cb) | 62 pp::CompletionCallback crash_cb) |
118 : anchor_(anchor), | 63 : anchor_(anchor), |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
455 ErrorInfo error_info; | 400 ErrorInfo error_info; |
456 error_info.SetReport( | 401 error_info.SetReport( |
457 PP_NACL_ERROR_SEL_LDR_CREATE_LAUNCHER, | 402 PP_NACL_ERROR_SEL_LDR_CREATE_LAUNCHER, |
458 "ServiceRuntime: failed to create sel_ldr launcher"); | 403 "ServiceRuntime: failed to create sel_ldr launcher"); |
459 plugin_->ReportLoadError(error_info); | 404 plugin_->ReportLoadError(error_info); |
460 } | 405 } |
461 pp::Module::Get()->core()->CallOnMainThread(0, callback, PP_ERROR_FAILED); | 406 pp::Module::Get()->core()->CallOnMainThread(0, callback, PP_ERROR_FAILED); |
462 return; | 407 return; |
463 } | 408 } |
464 | 409 |
465 ManifestService* manifest_service = | |
466 new ManifestService(anchor_->Ref(), rev_interface_); | |
467 bool enable_dev_interfaces = | 410 bool enable_dev_interfaces = |
468 GetNaClInterface()->DevInterfacesEnabled(plugin_->pp_instance()); | 411 GetNaClInterface()->DevInterfacesEnabled(plugin_->pp_instance()); |
469 | 412 |
470 tmp_subprocess->Start(plugin_->pp_instance(), | 413 tmp_subprocess->Start(plugin_->pp_instance(), |
471 main_service_runtime_, | 414 main_service_runtime_, |
472 params.url.c_str(), | 415 params.url.c_str(), |
473 ¶ms.file_info, | 416 ¶ms.file_info, |
474 params.uses_irt, | 417 params.uses_irt, |
475 params.uses_ppapi, | 418 params.uses_ppapi, |
476 uses_nonsfi_mode_, | 419 uses_nonsfi_mode_, |
477 enable_dev_interfaces, | 420 enable_dev_interfaces, |
478 params.enable_dyncode_syscalls, | 421 params.enable_dyncode_syscalls, |
479 params.enable_exception_handling, | 422 params.enable_exception_handling, |
480 params.enable_crash_throttling, | 423 params.enable_crash_throttling, |
481 &kManifestServiceVTable, | |
482 manifest_service, | |
483 callback); | 424 callback); |
484 subprocess_.reset(tmp_subprocess.release()); | 425 subprocess_.reset(tmp_subprocess.release()); |
485 } | 426 } |
486 | 427 |
487 bool ServiceRuntime::WaitForSelLdrStart() { | 428 bool ServiceRuntime::WaitForSelLdrStart() { |
488 // Time to wait on condvar (for browser to create a new sel_ldr process on | 429 // Time to wait on condvar (for browser to create a new sel_ldr process on |
489 // our behalf). Use 6 seconds to be *fairly* conservative. | 430 // our behalf). Use 6 seconds to be *fairly* conservative. |
490 // | 431 // |
491 // On surfaway, the CallOnMainThread above may never get scheduled | 432 // On surfaway, the CallOnMainThread above may never get scheduled |
492 // to unblock this condvar, or the IPC reply from the browser to renderer | 433 // to unblock this condvar, or the IPC reply from the browser to renderer |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 | 630 |
690 nacl::string ServiceRuntime::GetCrashLogOutput() { | 631 nacl::string ServiceRuntime::GetCrashLogOutput() { |
691 if (NULL != subprocess_.get()) { | 632 if (NULL != subprocess_.get()) { |
692 return subprocess_->GetCrashLogOutput(); | 633 return subprocess_->GetCrashLogOutput(); |
693 } else { | 634 } else { |
694 return std::string(); | 635 return std::string(); |
695 } | 636 } |
696 } | 637 } |
697 | 638 |
698 } // namespace plugin | 639 } // namespace plugin |
OLD | NEW |