Index: content/browser/sandbox_parameters_mac.mm |
diff --git a/content/browser/sandbox_parameters_mac.mm b/content/browser/sandbox_parameters_mac.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..86d4981679a21ccb359bcf130c95f7f4802f120f |
--- /dev/null |
+++ b/content/browser/sandbox_parameters_mac.mm |
@@ -0,0 +1,69 @@ |
+// Copyright 2017 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 "content/browser/sandbox_parameters_mac.h" |
+ |
+#include <unistd.h> |
+ |
+#include "base/command_line.h" |
+#include "base/files/file_util.h" |
+#include "base/logging.h" |
+#include "base/mac/bundle_locations.h" |
+#include "base/mac/mac_util.h" |
+#include "base/strings/sys_string_conversions.h" |
+#include "content/common/sandbox_mac.h" |
+#include "content/public/browser/content_browser_client.h" |
+#include "content/public/common/content_client.h" |
+#include "content/public/common/content_switches.h" |
+#include "sandbox/mac/seatbelt_exec.h" |
+ |
+namespace content { |
+ |
+void SetupRendererSandboxParameters(sandbox::SeatbeltExecClient* client) { |
+ const base::CommandLine* command_line = |
+ base::CommandLine::ForCurrentProcess(); |
+ bool enable_logging = |
+ command_line->HasSwitch(switches::kEnableSandboxLogging); |
+ |
+ CHECK(client->SetBooleanParameter(Sandbox::kSandboxEnableLogging, |
+ enable_logging)); |
+ CHECK(client->SetBooleanParameter(Sandbox::kSandboxDisableDenialLogging, |
+ !enable_logging)); |
+ |
+ std::string homedir = |
+ Sandbox::GetCanonicalSandboxPath(base::GetHomeDir()).value(); |
+ CHECK(client->SetParameter(Sandbox::kSandboxHomedirAsLiteral, homedir)); |
+ |
+ bool elcap_or_later = base::mac::IsAtLeastOS10_11(); |
+ CHECK(client->SetBooleanParameter(Sandbox::kSandboxElCapOrLater, |
+ elcap_or_later)); |
+ |
+ std::string bundle_path = |
+ Sandbox::GetCanonicalSandboxPath(base::mac::MainBundlePath()).value(); |
+ CHECK(client->SetParameter(Sandbox::kSandboxBundlePath, bundle_path)); |
+ |
+ NSBundle* bundle = base::mac::OuterBundle(); |
+ std::string bundle_id = base::SysNSStringToUTF8([bundle bundleIdentifier]); |
+ CHECK(client->SetParameter(Sandbox::kSandboxChromeBundleId, bundle_id)); |
+ |
+ CHECK(client->SetParameter(Sandbox::kSandboxChromePID, |
+ std::to_string(getpid()))); |
+ |
+ std::string logging_path = |
+ GetContentClient()->browser()->GetLoggingFileName().value(); |
+ CHECK(client->SetParameter(Sandbox::kSandboxLoggingPathAsLiteral, |
+ logging_path)); |
+ |
+#if defined(COMPONENT_BUILD) |
+ // For component builds, allow access to one directory level higher, where |
+ // the dylibs live. |
+ base::FilePath component_path = base::mac::MainBundlePath().Append(".."); |
+ std::string component_path_canonical = |
+ Sandbox::GetCanonicalSandboxPath(component_path).value(); |
+ CHECK(client->SetParameter(Sandbox::kSandboxComponentPath, |
+ component_path_canonical)); |
+#endif |
+} |
+ |
+} // namespace content |