#include "services/service_manager/service_process_launcher.h"
#include <utility>
#include "base/base_paths.h"
#include "base/base_switches.h"
#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/location.h"
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/metrics/field_trial.h"
#include "base/path_service.h"
#include "base/process/kill.h"
#include "base/process/launch.h"
#include "base/rand_util.h"
#include "base/run_loop.h"
#include "base/sequence_checker.h"
#include "base/strings/string_number_conversions.h"
#include "base/synchronization/lock.h"
#include "base/task/thread_pool.h"
#include "base/threading/thread.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "mojo/public/cpp/platform/platform_channel.h"
#include "mojo/public/cpp/system/invitation.h"
#include "sandbox/policy/mojom/sandbox.mojom.h"
#include "sandbox/policy/sandbox_type.h"
#include "sandbox/policy/switches.h"
#include "services/service_manager/public/cpp/service_executable/switches.h"
#include "services/service_manager/public/mojom/service.mojom.h"
#include "services/service_manager/switches.h"
#if BUILDFLAG(IS_MAC)
#include "base/mac/mach_port_rendezvous.h"
#endif
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
#include "sandbox/linux/services/namespace_sandbox.h"
#endif
#if BUILDFLAG(IS_WIN)
#include <windows.h>
#include "base/win/windows_version.h"
#endif
namespace service_manager {
class ServiceProcessLauncher::ProcessState
: public base::RefCountedThreadSafe<ProcessState> { … };
ServiceProcessLauncher::ServiceProcessLauncher(
ServiceProcessLauncherDelegate* delegate,
const base::FilePath& service_path)
: … { … }
ServiceProcessLauncher::~ServiceProcessLauncher() { … }
mojo::PendingRemote<mojom::Service> ServiceProcessLauncher::Start(
const Identity& target,
sandbox::mojom::Sandbox sandbox_type,
ProcessReadyCallback callback) { … }
mojo::PendingRemote<mojom::Service>
ServiceProcessLauncher::PassServiceRequestOnCommandLine(
mojo::OutgoingInvitation* invitation,
base::CommandLine* command_line) { … }
base::ProcessId ServiceProcessLauncher::ProcessState::LaunchInBackground(
const Identity& target,
sandbox::mojom::Sandbox sandbox_type,
std::unique_ptr<base::CommandLine> child_command_line,
mojo::PlatformChannel::HandlePassingInfo handle_passing_info,
mojo::PlatformChannel channel,
mojo::OutgoingInvitation invitation) { … }
void ServiceProcessLauncher::ProcessState::StopInBackground() { … }
}