Index: components/nacl/browser/nacl_process_host.cc |
diff --git a/components/nacl/browser/nacl_process_host.cc b/components/nacl/browser/nacl_process_host.cc |
index f3c91a97ea7c22ca5bd137ac29c1e7bc11e06adf..8b02435ac578ee6fe213592516961acb49395778 100644 |
--- a/components/nacl/browser/nacl_process_host.cc |
+++ b/components/nacl/browser/nacl_process_host.cc |
@@ -27,6 +27,7 @@ |
#include "base/win/windows_version.h" |
#include "build/build_config.h" |
#include "components/nacl/browser/nacl_browser.h" |
+#include "components/nacl/browser/nacl_browser_delegate.h" |
#include "components/nacl/browser/nacl_host_message_filter.h" |
#include "components/nacl/common/nacl_cmd_line.h" |
#include "components/nacl/common/nacl_host_messages.h" |
@@ -430,15 +431,22 @@ void NaClProcessHost::Launch( |
} |
if (uses_nonsfi_mode_) { |
+ bool nonsfi_mode_forced_by_command_line = false; |
+ bool nonsfi_mode_allowed = false; |
#if defined(OS_LINUX) |
- const bool kNonSFIModeSupported = true; |
-#else |
- const bool kNonSFIModeSupported = false; |
+ nonsfi_mode_forced_by_command_line = |
+ cmd->HasSwitch(switches::kEnableNaClNonSfiMode); |
+# if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) |
+ nonsfi_mode_allowed = |
+ NaClBrowser::GetDelegate()->IsNonSfiModeAllowed(manifest_url_); |
+# endif |
#endif |
- if (!kNonSFIModeSupported || |
- !cmd->HasSwitch(switches::kEnableNaClNonSfiMode)) { |
- SendErrorToRenderer("NaCl non-SFI mode works only on Linux with" |
- " --enable-nacl-nonsfi-mode specified"); |
+ bool nonsfi_mode_enabled = nonsfi_mode_forced_by_command_line || |
+ nonsfi_mode_allowed; |
+ |
+ if (!nonsfi_mode_enabled) { |
+ SendErrorToRenderer("NaCl non-SFI mode is not available for this platform" |
+ " and NaCl module."); |
delete this; |
return; |
} |