macOS: Support configuration of the main bundle path (fixes issue #2729)

This commit is contained in:
Rob Sussman 2019-07-25 15:47:46 +00:00 committed by Marshall Greenblatt
parent 30cc80efe3
commit c038bf8198
7 changed files with 26 additions and 0 deletions

View File

@ -183,6 +183,13 @@ typedef struct _cef_settings_t {
/// ///
cef_string_t framework_dir_path; cef_string_t framework_dir_path;
///
// The path to the main bundle on macOS. If this value is empty then it
// defaults to the top-level app bundle. Also configurable using
// the "main-bundle-path" command-line switch.
///
cef_string_t main_bundle_path;
/// ///
// Set to true (1) to have the browser process message loop run in a separate // Set to true (1) to have the browser process message loop run in a separate
// thread. If false (0) than the CefDoMessageLoopWork() function must be // thread. If false (0) than the CefDoMessageLoopWork() function must be

View File

@ -543,6 +543,7 @@ struct CefSettingsTraits {
static inline void clear(struct_type* s) { static inline void clear(struct_type* s) {
cef_string_clear(&s->browser_subprocess_path); cef_string_clear(&s->browser_subprocess_path);
cef_string_clear(&s->framework_dir_path); cef_string_clear(&s->framework_dir_path);
cef_string_clear(&s->main_bundle_path);
cef_string_clear(&s->cache_path); cef_string_clear(&s->cache_path);
cef_string_clear(&s->user_data_path); cef_string_clear(&s->user_data_path);
cef_string_clear(&s->user_agent); cef_string_clear(&s->user_agent);
@ -565,6 +566,8 @@ struct CefSettingsTraits {
&target->browser_subprocess_path, copy); &target->browser_subprocess_path, copy);
cef_string_set(src->framework_dir_path.str, src->framework_dir_path.length, cef_string_set(src->framework_dir_path.str, src->framework_dir_path.length,
&target->framework_dir_path, copy); &target->framework_dir_path, copy);
cef_string_set(src->main_bundle_path.str, src->main_bundle_path.length,
&target->main_bundle_path, copy);
target->multi_threaded_message_loop = src->multi_threaded_message_loop; target->multi_threaded_message_loop = src->multi_threaded_message_loop;
target->external_message_pump = src->external_message_pump; target->external_message_pump = src->external_message_pump;
target->windowless_rendering_enabled = src->windowless_rendering_enabled; target->windowless_rendering_enabled = src->windowless_rendering_enabled;

View File

@ -783,6 +783,7 @@ void CefContentBrowserClient::AppendExtraCommandLineSwitches(
switches::kDisablePackLoading, switches::kDisablePackLoading,
#if defined(OS_MACOSX) #if defined(OS_MACOSX)
switches::kFrameworkDirPath, switches::kFrameworkDirPath,
switches::kMainBundlePath,
#endif #endif
switches::kLocalesDirPath, switches::kLocalesDirPath,
switches::kLogFile, switches::kLogFile,

View File

@ -122,6 +122,7 @@ extern const char kEnablePrintPreview[] = "enable-print-preview";
#if defined(OS_MACOSX) #if defined(OS_MACOSX)
// Path to the framework directory. // Path to the framework directory.
const char kFrameworkDirPath[] = "framework-dir-path"; const char kFrameworkDirPath[] = "framework-dir-path";
const char kMainBundlePath[] = "main-bundle-path";
#endif #endif
} // namespace switches } // namespace switches

View File

@ -56,6 +56,7 @@ extern const char kEnablePrintPreview[];
#if defined(OS_MACOSX) #if defined(OS_MACOSX)
extern const char kFrameworkDirPath[]; extern const char kFrameworkDirPath[];
extern const char kMainBundlePath[];
#endif #endif
} // namespace switches } // namespace switches

View File

@ -476,6 +476,13 @@ bool CefMainDelegate::BasicStartupComplete(int* exit_code) {
if (!file_path.empty()) if (!file_path.empty())
command_line->AppendSwitchPath(switches::kFrameworkDirPath, file_path); command_line->AppendSwitchPath(switches::kFrameworkDirPath, file_path);
} }
if (settings.main_bundle_path.length > 0) {
base::FilePath file_path =
base::FilePath(CefString(&settings.main_bundle_path));
if (!file_path.empty())
command_line->AppendSwitchPath(switches::kMainBundlePath, file_path);
}
#endif #endif
if (no_sandbox) if (no_sandbox)

View File

@ -65,6 +65,12 @@ base::FilePath GetMainProcessPath() {
} }
base::FilePath GetMainBundlePath() { 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()); return base::mac::GetAppBundlePath(GetMainProcessPath());
} }