xref: /aosp_15_r20/external/cronet/components/nacl/loader/nacl_main.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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 Worker int 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