#include "content/renderer/renderer_main_platform_delegate.h"
#include <errno.h>
#include <sys/stat.h>
#include "arkweb/build/features/features.h"
#include "base/check_op.h"
#include "base/command_line.h"
#include "base/files/file_util.h"
#include "base/logging.h"
#include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h"
#include "sandbox/policy/sandbox.h"
#include "sandbox/policy/sandbox_type.h"
#include "arkweb/chromium_ext/sandbox/seccomp-bpf-helpers/seccomp_starter_ohos.h"
#include "arkweb/chromium_ext/sandbox/seccomp-bpf-helpers/baseline_policy_ohos.h"
#include <unistd.h>
namespace content {
RendererMainPlatformDelegate::RendererMainPlatformDelegate(
const MainFunctionParams& parameters) {}
RendererMainPlatformDelegate::~RendererMainPlatformDelegate() {
}
void RendererMainPlatformDelegate::PlatformInitialize() {
}
void RendererMainPlatformDelegate::PlatformUninitialize() {
}
bool RendererMainPlatformDelegate::EnableSandbox() {
#if BUILDFLAG(ARKWEB_RENDER_REMOVE_BINDER)
#if defined(__arm__) || defined(__aarch64__)
#if !defined(COMPONENT_BUILD)
LOG(INFO) << "EnableSandbox is triggered now, commands related to binder are removed.";
sandbox::SeccompStarterOhos starter;
starter.set_policy(std::make_unique<sandbox::BaselinePolicyOhos>());
starter.StartSandbox();
if (starter.status() == sandbox::SeccompSandboxStatus::ENGAGED) {
return true;
}
return false;
#endif
#else
return true;
#endif
#else
sandbox::policy::SandboxLinux::Options options;
sandbox::policy::Sandbox::Initialize(
sandbox::policy::SandboxTypeFromCommandLine(
*base::CommandLine::ForCurrentProcess()),
sandbox::policy::SandboxLinux::PreSandboxHook(), options);
auto* linux_sandbox = sandbox::policy::SandboxLinux::GetInstance();
if (linux_sandbox->GetStatus() & sandbox::policy::SandboxLinux::kSeccompBPF) {
CHECK(linux_sandbox->seccomp_bpf_started());
}
if (linux_sandbox->GetStatus() & sandbox::policy::SandboxLinux::kSUID) {
CHECK(!base::PathExists(base::FilePath("/proc/cpuinfo")));
}
#if defined(__x86_64__)
if (linux_sandbox->seccomp_bpf_started()) {
errno = 0;
CHECK_EQ(fchmod(-1, 07777), -1);
CHECK_EQ(errno, EPERM);
}
#endif
return true;
#endif
}
}