blob: dae9b4570c9602a7b21be2ee7de7268cd13e3a72 [file] [log] [blame]
// Copyright 2017 The Chromium Embedded Framework Authors. Portions copyright
// 2011 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 "libcef/common/util_mac.h"
#include "libcef/common/cef_switches.h"
#include "base/base_paths.h"
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/mac/bundle_locations.h"
#include "base/mac/foundation_util.h"
#include "base/path_service.h"
#include "base/strings/sys_string_conversions.h"
namespace util_mac {
namespace {
// Returns the path to the Frameworks directory inside the top-level app bundle.
base::FilePath GetFrameworksPath() {
base::FilePath bundle_path = GetMainBundlePath();
if (bundle_path.empty())
return base::FilePath();
return bundle_path.Append(FILE_PATH_LITERAL("Contents"))
.Append(FILE_PATH_LITERAL("Frameworks"));
}
} // namespace
bool GetLocalLibraryDirectory(base::FilePath* result) {
return base::mac::GetLocalDirectory(NSLibraryDirectory, result);
}
base::FilePath GetFrameworkDirectory() {
base::FilePath frameworks_path =
base::CommandLine::ForCurrentProcess()->GetSwitchValuePath(
switches::kFrameworkDirPath);
if (!frameworks_path.empty())
return frameworks_path;
frameworks_path = GetFrameworksPath();
if (frameworks_path.empty())
return base::FilePath();
return frameworks_path.Append(
FILE_PATH_LITERAL("Chromium Embedded Framework.framework"));
}
base::FilePath GetFrameworkResourcesDirectory() {
base::FilePath frameworks_path = GetFrameworkDirectory();
if (frameworks_path.empty())
return base::FilePath();
return frameworks_path.Append(FILE_PATH_LITERAL("Resources"));
}
base::FilePath GetMainProcessPath() {
base::FilePath path;
base::PathService::Get(base::FILE_EXE, &path);
DCHECK(!path.empty());
return path;
}
base::FilePath GetMainBundlePath() {
base::FilePath main_bundle_path =
base::CommandLine::ForCurrentProcess()->GetSwitchValuePath(
switches::kMainBundlePath);
if (!main_bundle_path.empty())
return main_bundle_path;
return base::mac::GetAppBundlePath(GetMainProcessPath());
}
std::string GetMainBundleID() {
NSBundle* bundle = base::mac::OuterBundle();
return base::SysNSStringToUTF8([bundle bundleIdentifier]);
}
base::FilePath GetMainResourcesDirectory() {
base::FilePath bundle_path = GetMainBundlePath();
if (bundle_path.empty())
return base::FilePath();
return bundle_path.Append(FILE_PATH_LITERAL("Contents"))
.Append(FILE_PATH_LITERAL("Resources"));
}
base::FilePath GetChildProcessPath() {
base::FilePath frameworks_path = GetFrameworksPath();
if (frameworks_path.empty())
return base::FilePath();
std::string exe_name = GetMainProcessPath().BaseName().value();
return frameworks_path.Append(FILE_PATH_LITERAL(exe_name + " Helper.app"))
.Append(FILE_PATH_LITERAL("Contents"))
.Append(FILE_PATH_LITERAL("MacOS"))
.Append(FILE_PATH_LITERAL(exe_name + " Helper"));
}
} // namespace util_mac