#include "sandbox/policy/sandbox.h"
#include "base/command_line.h"
#include "base/metrics/histogram_functions.h"
#include "build/build_config.h"
#include "sandbox/policy/mojom/sandbox.mojom.h"
#include "sandbox/policy/switches.h"
#if BUILDFLAG(IS_ANDROID)
#include "base/android/jni_android.h"
#endif
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
#include "sandbox/policy/linux/sandbox_linux.h"
#endif
#if BUILDFLAG(IS_MAC)
#include "sandbox/mac/seatbelt.h"
#endif
#if BUILDFLAG(IS_WIN)
#include "base/check_op.h"
#include "base/process/process_info.h"
#include "sandbox/policy/win/sandbox_win.h"
#include "sandbox/win/src/sandbox.h"
#endif
namespace sandbox {
namespace policy {
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
bool Sandbox::Initialize(sandbox::mojom::Sandbox sandbox_type,
SandboxLinux::PreSandboxHook hook,
const SandboxLinux::Options& options) { … }
#endif
#if BUILDFLAG(IS_WIN)
bool Sandbox::Initialize(sandbox::mojom::Sandbox sandbox_type,
SandboxInterfaceInfo* sandbox_info) {
BrokerServices* broker_services = sandbox_info->broker_services;
if (broker_services) {
const base::CommandLine& command_line =
*base::CommandLine::ForCurrentProcess();
if (!SandboxWin::InitBrokerServices(broker_services))
return false;
if (!command_line.HasSwitch(switches::kNoSandbox)) {
ResultCode result = broker_services->CreateAlternateDesktop(
Desktop::kAlternateWinstation);
CHECK(result == SBOX_ALL_OK);
}
return true;
}
return IsUnsandboxedSandboxType(sandbox_type) ||
SandboxWin::InitTargetServices(sandbox_info->target_services);
}
#endif
bool Sandbox::IsProcessSandboxed() { … }
}
}