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

Unified Diff: ppapi/native_client/src/trusted/plugin/service_runtime.cc

Issue 131413009: Prototype: Use Chromium IPC for plugin LOAD_MODULE. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased, some FIXMEs cleaned up Created 6 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: ppapi/native_client/src/trusted/plugin/service_runtime.cc
diff --git a/ppapi/native_client/src/trusted/plugin/service_runtime.cc b/ppapi/native_client/src/trusted/plugin/service_runtime.cc
index 9bc7b713abf58c8b8b8389b32cd38472561a39ec..b3d03bb5da78fe791cf4db7dcb01fd4c4637c184 100644
--- a/ppapi/native_client/src/trusted/plugin/service_runtime.cc
+++ b/ppapi/native_client/src/trusted/plugin/service_runtime.cc
@@ -497,18 +497,34 @@ bool ServiceRuntime::LoadModule(nacl::DescWrapper* nacl_desc,
static_cast<void*>(this),
static_cast<void*>(subprocess_.get()));
CHECK(nacl_desc);
+
// Create the command channel to the sel_ldr and load the nexe from nacl_desc.
if (!subprocess_->SetupCommand(&command_channel_)) {
error_info->SetReport(ERROR_SEL_LDR_COMMUNICATION_CMD_CHANNEL,
"ServiceRuntime: command channel creation failed");
return false;
}
+ struct NaClDesc *desc = nacl_desc->desc();
+ if (NACL_VTBL(NaClDesc, desc)->typeTag != NACL_DESC_HOST_IO)
+ return false;
+ PP_FileHandle h = ((struct NaClDescIoDesc *) desc)->hd->d;
+ uint32_t nacl_error_code;
+ PP_Bool ok = plugin_->nacl_interface()->LoadModule(
+ plugin_->pp_instance(), h, &nacl_error_code);
+ if (ok == PP_FALSE)
+ return false;
- if (!subprocess_->LoadModule(&command_channel_, nacl_desc)) {
- error_info->SetReport(ERROR_SEL_LDR_COMMUNICATION_CMD_CHANNEL,
- "ServiceRuntime: load module failed");
+ if (main_service_runtime_)
+ plugin_->ReportSelLdrLoadStatus(nacl_error_code);
+
+ if (LOAD_OK != nacl_error_code) {
+ error_info->SetReport(
+ ERROR_SEL_LDR_START_STATUS,
+ NaClErrorString(static_cast<NaClErrorCode>(nacl_error_code)));
return false;
}
+
+ fprintf(stderr, "LoadModule finished\n");
return true;
}
@@ -552,32 +568,12 @@ bool ServiceRuntime::StartModule(ErrorInfo* error_info) {
// start the module. otherwise we cannot connect for multimedia
// subsystem since that is handled by user-level code (not secure!)
// in libsrpc.
- int load_status = -1;
- NaClSrpcResultCodes rpc_result =
- NaClSrpcInvokeBySignature(&command_channel_,
- "start_module::i",
- &load_status);
-
- if (NACL_SRPC_RESULT_OK != rpc_result) {
- error_info->SetReport(ERROR_SEL_LDR_START_MODULE,
- "ServiceRuntime: could not start nacl module");
- return false;
- }
- NaClLog(4, "ServiceRuntime::StartModule (load_status=%d)\n",
- load_status);
- if (main_service_runtime_) {
- plugin_->ReportSelLdrLoadStatus(load_status);
- }
- if (LOAD_OK != load_status) {
- error_info->SetReport(
- ERROR_SEL_LDR_START_STATUS,
- NaClErrorString(static_cast<NaClErrorCode>(load_status)));
- return false;
- }
- return true;
+ PP_Bool ok = plugin_->nacl_interface()->StartModule(plugin_->pp_instance());
+ return PP_ToBool(ok);
}
-bool ServiceRuntime::StartSelLdr(const SelLdrStartParams& params) {
+void ServiceRuntime::StartSelLdr(const SelLdrStartParams& params,
+ PP_CompletionCallback callback) {
NaClLog(4, "ServiceRuntime::Start\n");
nacl::scoped_ptr<SelLdrLauncherChrome>
@@ -591,34 +587,20 @@ bool ServiceRuntime::StartSelLdr(const SelLdrStartParams& params) {
"ServiceRuntime: failed to create sel_ldr launcher");
plugin_->ReportLoadError(error_info);
}
- return false;
- }
- nacl::string error_message;
- bool started = tmp_subprocess->Start(plugin_->pp_instance(),
- params.url.c_str(),
- params.uses_irt,
- params.uses_ppapi,
- params.enable_dev_interfaces,
- params.enable_dyncode_syscalls,
- params.enable_exception_handling,
- params.enable_crash_throttling,
- &error_message);
- if (!started) {
- NaClLog(LOG_ERROR, "ServiceRuntime::Start (start failed)\n");
- if (main_service_runtime_) {
- ErrorInfo error_info;
- error_info.SetReportWithConsoleOnlyError(
- ERROR_SEL_LDR_LAUNCH,
- "ServiceRuntime: failed to start",
- error_message);
- plugin_->ReportLoadError(error_info);
- }
- return false;
+ PP_RunCompletionCallback(&callback, PP_ERROR_FAILED);
+ return;
}
-
+ tmp_subprocess->Start(plugin_->pp_instance(),
+ params.url.c_str(),
+ params.uses_irt,
+ params.uses_ppapi,
+ params.enable_dev_interfaces,
+ params.enable_dyncode_syscalls,
+ params.enable_exception_handling,
+ params.enable_crash_throttling,
+ &start_sel_ldr_error_message_, // FIXME: Use.
+ callback);
subprocess_.reset(tmp_subprocess.release());
- NaClLog(4, "ServiceRuntime::StartSelLdr (return 1)\n");
- return true;
}
void ServiceRuntime::WaitForSelLdrStart() {
@@ -640,7 +622,7 @@ bool ServiceRuntime::LoadNexeAndStart(nacl::DescWrapper* nacl_desc,
reinterpret_cast<void*>(nacl_desc));
ErrorInfo error_info;
bool ok = LoadModule(nacl_desc, &error_info) &&
- InitReverseService(&error_info) &&
+ InitReverseService(&error_info);
StartModule(&error_info);
if (!ok) {
if (main_service_runtime_) {

Powered by Google App Engine
This is Rietveld 408576698