1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include <utility> 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include "base/command_line.h" 8*6777b538SAndroid Build Coastguard Worker #include "base/feature_list.h" 9*6777b538SAndroid Build Coastguard Worker #include "base/message_loop/message_pump_type.h" 10*6777b538SAndroid Build Coastguard Worker #include "base/power_monitor/power_monitor.h" 11*6777b538SAndroid Build Coastguard Worker #include "base/power_monitor/power_monitor_source.h" 12*6777b538SAndroid Build Coastguard Worker #include "base/task/single_thread_task_executor.h" 13*6777b538SAndroid Build Coastguard Worker #include "base/timer/hi_res_timer_manager.h" 14*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h" 15*6777b538SAndroid Build Coastguard Worker #include "components/nacl/loader/nacl_listener.h" 16*6777b538SAndroid Build Coastguard Worker #include "components/nacl/loader/nacl_main_platform_delegate.h" 17*6777b538SAndroid Build Coastguard Worker #include "components/power_monitor/make_power_monitor_device_source.h" 18*6777b538SAndroid Build Coastguard Worker #include "content/public/common/main_function_params.h" 19*6777b538SAndroid Build Coastguard Worker #include "mojo/core/embedder/embedder.h" 20*6777b538SAndroid Build Coastguard Worker #include "sandbox/policy/switches.h" 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker // main() routine for the NaCl loader process. NaClMain(content::MainFunctionParams parameters)23*6777b538SAndroid Build Coastguard Workerint NaClMain(content::MainFunctionParams parameters) { 24*6777b538SAndroid Build Coastguard Worker const base::CommandLine& parsed_command_line = *parameters.command_line; 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker // The Mojo EDK must be initialized before using IPC. 27*6777b538SAndroid Build Coastguard Worker mojo::core::InitFeatures(); 28*6777b538SAndroid Build Coastguard Worker mojo::core::Init(); 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker // The main thread of the plugin services IO. 31*6777b538SAndroid Build Coastguard Worker base::SingleThreadTaskExecutor main_task_executor(base::MessagePumpType::IO); 32*6777b538SAndroid Build Coastguard Worker base::PlatformThread::SetName("CrNaClMain"); 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker base::PowerMonitor::Initialize(MakePowerMonitorDeviceSource()); 35*6777b538SAndroid Build Coastguard Worker base::HighResolutionTimerManager hi_res_timer_manager; 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) 38*6777b538SAndroid Build Coastguard Worker NaClMainPlatformDelegate platform; 39*6777b538SAndroid Build Coastguard Worker bool no_sandbox = 40*6777b538SAndroid Build Coastguard Worker parsed_command_line.HasSwitch(sandbox::policy::switches::kNoSandbox); 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_POSIX) 43*6777b538SAndroid Build Coastguard Worker // The number of cores must be obtained before the invocation of 44*6777b538SAndroid Build Coastguard Worker // platform.EnableSandbox(), so cannot simply be inlined below. 45*6777b538SAndroid Build Coastguard Worker int number_of_cores = sysconf(_SC_NPROCESSORS_ONLN); 46*6777b538SAndroid Build Coastguard Worker #endif 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker if (!no_sandbox) { 49*6777b538SAndroid Build Coastguard Worker platform.EnableSandbox(parameters); 50*6777b538SAndroid Build Coastguard Worker } 51*6777b538SAndroid Build Coastguard Worker NaClListener listener; 52*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_POSIX) 53*6777b538SAndroid Build Coastguard Worker listener.set_number_of_cores(number_of_cores); 54*6777b538SAndroid Build Coastguard Worker #endif 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Worker listener.Listen(); 57*6777b538SAndroid Build Coastguard Worker #else 58*6777b538SAndroid Build Coastguard Worker NOTIMPLEMENTED() << " not implemented startup, plugin startup dialog etc."; 59*6777b538SAndroid Build Coastguard Worker #endif 60*6777b538SAndroid Build Coastguard Worker return 0; 61*6777b538SAndroid Build Coastguard Worker } 62