Index: ppapi/native_client/src/trusted/plugin/plugin.cc |
diff --git a/ppapi/native_client/src/trusted/plugin/plugin.cc b/ppapi/native_client/src/trusted/plugin/plugin.cc |
index 894337b01fc03a2518174077c81c5cf0aafadab6..1164c2fa57e164e22903561fd27080f075c0566d 100644 |
--- a/ppapi/native_client/src/trusted/plugin/plugin.cc |
+++ b/ppapi/native_client/src/trusted/plugin/plugin.cc |
@@ -283,7 +283,7 @@ bool Plugin::LoadNaClModuleFromBackgroundThread( |
const SelLdrStartParams& params) { |
CHECK(!pp::Module::Get()->core()->IsMainThread()); |
ServiceRuntime* service_runtime = |
- new ServiceRuntime(this, manifest, false, |
+ new ServiceRuntime(this, manifest, false, nonsfi_enabled(), |
pp::BlockUntilComplete(), pp::BlockUntilComplete()); |
subprocess->set_service_runtime(service_runtime); |
PLUGIN_PRINTF(("Plugin::LoadNaClModuleFromBackgroundThread " |
@@ -342,6 +342,7 @@ void Plugin::LoadNaClModule(nacl::DescWrapper* wrapper, |
bool enable_dyncode_syscalls, |
bool enable_exception_handling, |
bool enable_crash_throttling, |
+ bool enable_nonsfi, |
const pp::CompletionCallback& init_done_cb, |
const pp::CompletionCallback& crash_cb) { |
nacl::scoped_ptr<nacl::DescWrapper> scoped_wrapper(wrapper); |
@@ -357,10 +358,12 @@ void Plugin::LoadNaClModule(nacl::DescWrapper* wrapper, |
enable_dev_interfaces_, |
enable_dyncode_syscalls, |
enable_exception_handling, |
- enable_crash_throttling); |
+ enable_crash_throttling, |
+ enable_nonsfi); |
ErrorInfo error_info; |
ServiceRuntime* service_runtime = |
- new ServiceRuntime(this, manifest_.get(), true, init_done_cb, crash_cb); |
+ new ServiceRuntime(this, manifest_.get(), true, nonsfi_enabled(), |
+ init_done_cb, crash_cb); |
main_subprocess_.set_service_runtime(service_runtime); |
PLUGIN_PRINTF(("Plugin::LoadNaClModule (service_runtime=%p)\n", |
static_cast<void*>(service_runtime))); |
@@ -398,16 +401,18 @@ void Plugin::LoadNexeAndStart(int32_t pp_error, |
} |
bool Plugin::LoadNaClModuleContinuationIntern(ErrorInfo* error_info) { |
- if (!main_subprocess_.StartSrpcServices()) { |
- // The NaCl process probably crashed. On Linux, a crash causes this error, |
- // while on other platforms, the error is detected below, when we attempt to |
- // start the proxy. Report a module initialization error here, to make it |
- // less confusing for developers. |
- NaClLog(LOG_ERROR, "LoadNaClModuleContinuationIntern: " |
- "StartSrpcServices failed\n"); |
- error_info->SetReport(PP_NACL_ERROR_START_PROXY_MODULE, |
- "could not initialize module."); |
- return false; |
+ if (!nonsfi_enabled()) { |
+ if (!main_subprocess_.StartSrpcServices()) { |
+ // The NaCl process probably crashed. On Linux, a crash causes this |
+ // error, while on other platforms, the error is detected below, when we |
+ // attempt to start the proxy. Report a module initialization error here, |
+ // to make it less confusing for developers. |
+ NaClLog(LOG_ERROR, "LoadNaClModuleContinuationIntern: " |
+ "StartSrpcServices failed\n"); |
+ error_info->SetReport(PP_NACL_ERROR_START_PROXY_MODULE, |
+ "could not initialize module."); |
+ return false; |
+ } |
} |
PP_ExternalPluginResult ipc_result = |
nacl_interface_->StartPpapiProxy(pp_instance()); |
@@ -458,7 +463,8 @@ NaClSubprocess* Plugin::LoadHelperNaClModule(nacl::DescWrapper* wrapper, |
enable_dev_interfaces_, |
false /* enable_dyncode_syscalls */, |
false /* enable_exception_handling */, |
- true /* enable_crash_throttling */); |
+ true /* enable_crash_throttling */, |
+ false /* enable_nonsfi */); |
if (!LoadNaClModuleFromBackgroundThread(wrapper, nacl_subprocess.get(), |
manifest, params)) { |
return NULL; |
@@ -763,6 +769,7 @@ void Plugin::NexeFileDidOpen(int32_t pp_error) { |
true, /* enable_dyncode_syscalls */ |
true, /* enable_exception_handling */ |
false, /* enable_crash_throttling */ |
+ nonsfi_enabled(), |
callback_factory_.NewCallback(&Plugin::NexeFileDidOpenContinuation), |
callback_factory_.NewCallback(&Plugin::NexeDidCrash)); |
} |
@@ -880,6 +887,7 @@ void Plugin::BitcodeDidTranslate(int32_t pp_error) { |
false, /* enable_dyncode_syscalls */ |
false, /* enable_exception_handling */ |
true, /* enable_crash_throttling */ |
+ false, /* enable_nonsfi */ |
callback_factory_.NewCallback(&Plugin::BitcodeDidTranslateContinuation), |
callback_factory_.NewCallback(&Plugin::NexeDidCrash)); |
} |
@@ -1034,16 +1042,19 @@ void Plugin::NaClManifestFileDidOpen(int32_t pp_error) { |
void Plugin::ProcessNaClManifest(const nacl::string& manifest_json) { |
HistogramSizeKB("NaCl.Perf.Size.Manifest", |
static_cast<int32_t>(manifest_json.length() / 1024)); |
- nacl::string program_url; |
- PnaclOptions pnacl_options; |
ErrorInfo error_info; |
if (!SetManifestObject(manifest_json, &error_info)) { |
ReportLoadError(error_info); |
return; |
} |
- if (manifest_->GetProgramURL(&program_url, &pnacl_options, &error_info)) { |
+ nacl::string program_url; |
+ PnaclOptions pnacl_options; |
+ bool nonsfi_enabled; |
+ if (manifest_->GetProgramURL( |
+ &program_url, &pnacl_options, &nonsfi_enabled, &error_info)) { |
is_installed_ = GetUrlScheme(program_url) == SCHEME_CHROME_EXTENSION; |
+ set_nonsfi_enabled(nonsfi_enabled); |
set_nacl_ready_state(LOADING); |
// Inform JavaScript that we found a nexe URL to load. |
EnqueueProgressEvent(PP_NACL_EVENT_PROGRESS); |
@@ -1137,10 +1148,12 @@ bool Plugin::SetManifestObject(const nacl::string& manifest_json, |
// Determine whether lookups should use portable (i.e., pnacl versions) |
// rather than platform-specific files. |
bool is_pnacl = (mime_type() == kPnaclMIMEType); |
+ bool nonsfi_enabled = PP_ToBool(nacl_interface_->IsNonSFIEnabled()); |
nacl::scoped_ptr<JsonManifest> json_manifest( |
new JsonManifest(url_util_, |
manifest_base_url(), |
- (is_pnacl ? kPortableISA : GetSandboxISA()))); |
+ (is_pnacl ? kPortableISA : GetSandboxISA()), |
+ nonsfi_enabled)); |
if (!json_manifest->Init(manifest_json, error_info)) { |
return false; |
} |