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 5a18f5af94cfa640c13c9c5245227014cd1b0a5d..d41e58e2341eb614c73360f8d1491955ee963ee1 100644 |
--- a/ppapi/native_client/src/trusted/plugin/service_runtime.cc |
+++ b/ppapi/native_client/src/trusted/plugin/service_runtime.cc |
@@ -451,10 +451,12 @@ void PluginReverseInterface::AddTempQuotaManagedFile( |
ServiceRuntime::ServiceRuntime(Plugin* plugin, |
const Manifest* manifest, |
bool main_service_runtime, |
+ bool nonsfi_enabled, |
pp::CompletionCallback init_done_cb, |
pp::CompletionCallback crash_cb) |
: plugin_(plugin), |
main_service_runtime_(main_service_runtime), |
+ nonsfi_enabled_(nonsfi_enabled), |
reverse_service_(NULL), |
anchor_(new nacl::WeakRefAnchor()), |
rev_interface_(new PluginReverseInterface(anchor_, plugin, |
@@ -492,6 +494,17 @@ bool ServiceRuntime::LoadModule(nacl::DescWrapper* nacl_desc, |
} |
bool ServiceRuntime::InitReverseService(ErrorInfo* error_info) { |
+ if (nonsfi_enabled_) { |
+ // In non-SFI mode, open_resource() has not yet been supported, so we |
Mark Seaborn
2014/02/27 17:10:22
"is not yet supported"
hidehiko
2014/02/28 06:41:54
Done.
|
+ // do not need the reverse service. So, skip the initialization (with |
+ // calling the completion callback). |
+ // Note that there is on going work to replace SRPC by Chrome IPC (not only |
Mark Seaborn
2014/02/27 17:10:22
You might link to the issue here...
hidehiko
2014/02/28 06:41:54
Done.
|
+ // for non-SFI mode, but also for SFI mode), and non-SFI mode will use |
+ // Chrome IPC for open_resource() after the refacrogin is done. |
Mark Seaborn
2014/02/27 17:10:22
"refactoring"
hidehiko
2014/02/28 06:41:54
Oops. Done.
|
+ rev_interface_->StartupInitializationComplete(); |
+ return true; |
+ } |
+ |
// Hook up the reverse service channel. We are the IMC client, but |
// provide SRPC service. |
NaClDesc* out_conn_cap; |
@@ -532,18 +545,24 @@ bool ServiceRuntime::StartModule(ErrorInfo* error_info) { |
// 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(PP_NACL_ERROR_SEL_LDR_START_MODULE, |
- "ServiceRuntime: could not start nacl module"); |
- return false; |
+ if (nonsfi_enabled_) { |
+ // In non-SFI mode, we don't need to call start_module SRPC to launch |
+ // the plugin. |
+ load_status = LOAD_OK; |
+ } else { |
+ NaClSrpcResultCodes rpc_result = |
+ NaClSrpcInvokeBySignature(&command_channel_, |
+ "start_module::i", |
+ &load_status); |
+ |
+ if (NACL_SRPC_RESULT_OK != rpc_result) { |
+ error_info->SetReport(PP_NACL_ERROR_SEL_LDR_START_MODULE, |
+ "ServiceRuntime: could not start nacl module"); |
+ return false; |
+ } |
} |
- NaClLog(4, "ServiceRuntime::StartModule (load_status=%d)\n", |
- load_status); |
+ |
+ NaClLog(4, "ServiceRuntime::StartModule (load_status=%d)\n", load_status); |
if (main_service_runtime_) { |
plugin_->ReportSelLdrLoadStatus(load_status); |
} |
@@ -586,6 +605,7 @@ void ServiceRuntime::StartSelLdr(const SelLdrStartParams& params, |
params.enable_dyncode_syscalls, |
params.enable_exception_handling, |
params.enable_crash_throttling, |
+ params.enable_nonsfi, |
&start_sel_ldr_error_message_, |
internal_callback); |
subprocess_.reset(tmp_subprocess.release()); |