// Copyright 2018 The Chromium Embedded Framework Authors. Portions Copyright // 2018 the Chromium Authors. All rights reserved. Use of this source code is // governed by a BSD-style license that can be found in the LICENSE file. #include #include #include #include "sandbox/mac/seatbelt_exec.h" #include "include/cef_sandbox_mac.h" void* cef_sandbox_initialize(int argc, char** argv) { uint32_t exec_path_size = 0; int rv = _NSGetExecutablePath(NULL, &exec_path_size); if (rv != -1) { return NULL; } std::unique_ptr exec_path(new char[exec_path_size]); rv = _NSGetExecutablePath(exec_path.get(), &exec_path_size); if (rv != 0) { return NULL; } sandbox::SeatbeltExecServer::CreateFromArgumentsResult seatbelt = sandbox::SeatbeltExecServer::CreateFromArguments(exec_path.get(), argc, argv); if (seatbelt.sandbox_required) { if (!seatbelt.server) { fprintf(stderr, "Failed to create the seatbelt sandbox server.\n"); return NULL; } if (!seatbelt.server->InitializeSandbox()) { fprintf(stderr, "Failed to initialize the sandbox.\n"); return NULL; } } auto* copy = new sandbox::SeatbeltExecServer::CreateFromArgumentsResult(); copy->sandbox_required = seatbelt.sandbox_required; copy->server.swap(seatbelt.server); return copy; } void cef_sandbox_destroy(void* sandbox_context) { delete static_cast( sandbox_context); } CefScopedSandboxContext::CefScopedSandboxContext() : sandbox_context_(NULL) {} CefScopedSandboxContext::~CefScopedSandboxContext() { if (sandbox_context_) { cef_sandbox_destroy(sandbox_context_); } } bool CefScopedSandboxContext::Initialize(int argc, char** argv) { if (sandbox_context_) return false; sandbox_context_ = cef_sandbox_initialize(argc, argv); return !!sandbox_context_; }