mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Fix build and initial Chrome runtime issues on macOS (see issue #2969)
This change moves shared resource initialization to a common location and disables crash reporting initialization in chrome/ code via patch files. When using the Chrome runtime on macOS the Chrome application window will display, but web content is currently blank and the application does not exit cleanly. This will need to be debugged further in the future.
This commit is contained in:
@@ -1,3 +1,39 @@
|
||||
diff --git chrome/browser/app_controller_mac.mm chrome/browser/app_controller_mac.mm
|
||||
index 559e51776e42..a429421f7c61 100644
|
||||
--- chrome/browser/app_controller_mac.mm
|
||||
+++ chrome/browser/app_controller_mac.mm
|
||||
@@ -1140,6 +1140,7 @@ - (void)commandDispatch:(id)sender {
|
||||
|
||||
// Run a (background) application in a new tab.
|
||||
- (void)executeApplication:(id)sender {
|
||||
+#if BUILDFLAG(ENABLE_BACKGROUND_MODE)
|
||||
NSInteger tag = [sender tag];
|
||||
Profile* profile = [self lastProfile];
|
||||
DCHECK(profile);
|
||||
@@ -1148,6 +1149,7 @@ - (void)executeApplication:(id)sender {
|
||||
tag < static_cast<int>(applications.size()));
|
||||
const extensions::Extension* extension = applications.GetExtension(tag);
|
||||
BackgroundModeManager::LaunchBackgroundApplication(profile, extension);
|
||||
+#endif // BUILDFLAG(ENABLE_BACKGROUND_MODE)
|
||||
}
|
||||
|
||||
// Same as |-commandDispatch:|, but executes commands using a disposition
|
||||
@@ -1529,6 +1531,7 @@ - (NSMenu*)applicationDockMenu:(NSApplication*)sender {
|
||||
// TODO(rickcam): Mock out BackgroundApplicationListModel, then add unit
|
||||
// tests which use the mock in place of the profile-initialized model.
|
||||
|
||||
+#if BUILDFLAG(ENABLE_BACKGROUND_MODE)
|
||||
// Avoid breaking unit tests which have no profile.
|
||||
if (profile) {
|
||||
BackgroundApplicationListModel applications(profile);
|
||||
@@ -1555,6 +1558,7 @@ - (NSMenu*)applicationDockMenu:(NSApplication*)sender {
|
||||
}
|
||||
}
|
||||
}
|
||||
+#endif // BUILDFLAG(ENABLE_BACKGROUND_MODE)
|
||||
|
||||
return dockMenu;
|
||||
}
|
||||
diff --git chrome/browser/browser_process.h chrome/browser/browser_process.h
|
||||
index 6332572ac884..bf555124ce59 100644
|
||||
--- chrome/browser/browser_process.h
|
||||
|
@@ -1,3 +1,82 @@
|
||||
diff --git chrome/app/chrome_main_delegate.cc chrome/app/chrome_main_delegate.cc
|
||||
index d18dbaa7d058..650031520b25 100644
|
||||
--- chrome/app/chrome_main_delegate.cc
|
||||
+++ chrome/app/chrome_main_delegate.cc
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "base/time/time.h"
|
||||
#include "base/trace_event/trace_event_impl.h"
|
||||
#include "build/build_config.h"
|
||||
+#include "cef/libcef/features/runtime.h"
|
||||
#include "chrome/browser/chrome_content_browser_client.h"
|
||||
#include "chrome/browser/chrome_resource_bundle_helper.h"
|
||||
#include "chrome/browser/defaults.h"
|
||||
@@ -391,6 +392,8 @@ struct MainFunction {
|
||||
|
||||
// Initializes the user data dir. Must be called before InitializeLocalState().
|
||||
void InitializeUserDataDir(base::CommandLine* command_line) {
|
||||
+ if (cef::IsChromeRuntimeEnabled())
|
||||
+ return;
|
||||
#if defined(OS_WIN)
|
||||
// Reach out to chrome_elf for the truth on the user data directory.
|
||||
// Note that in tests, this links to chrome_elf_test_stubs.
|
||||
@@ -628,7 +631,9 @@ void ChromeMainDelegate::PostFieldTrialInitialization() {
|
||||
}
|
||||
|
||||
#if defined(OS_WIN)
|
||||
+ if (!cef::IsChromeRuntimeEnabled()) {
|
||||
SetUpExtendedCrashReporting(is_browser_process);
|
||||
+ }
|
||||
base::Time::ReadMinTimerIntervalLowResMs();
|
||||
base::sequence_manager::PostFieldTrialInitialization();
|
||||
#endif
|
||||
@@ -904,6 +909,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
|
||||
std::string process_type =
|
||||
command_line.GetSwitchValueASCII(switches::kProcessType);
|
||||
|
||||
+ if (!cef::IsChromeRuntimeEnabled()) {
|
||||
crash_reporter::InitializeCrashKeys();
|
||||
|
||||
#if defined(OS_POSIX)
|
||||
@@ -914,6 +920,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
|
||||
InitMacCrashReporter(command_line, process_type);
|
||||
SetUpInstallerPreferences(command_line);
|
||||
#endif
|
||||
+ } // !cef::IsChromeRuntimeEnabled()
|
||||
|
||||
#if defined(OS_WIN)
|
||||
child_process_logging::Init();
|
||||
@@ -1037,6 +1044,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
|
||||
locale;
|
||||
}
|
||||
|
||||
+ if (!cef::IsChromeRuntimeEnabled()) {
|
||||
#if defined(OS_POSIX) && !defined(OS_MACOSX)
|
||||
// Zygote needs to call InitCrashReporter() in RunZygote().
|
||||
if (process_type != service_manager::switches::kZygoteProcess) {
|
||||
@@ -1063,6 +1071,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
|
||||
// After all the platform Breakpads have been initialized, store the command
|
||||
// line for crash reporting.
|
||||
crash_keys::SetCrashKeysFromCommandLine(command_line);
|
||||
+ } // !cef::IsChromeRuntimeEnabled()
|
||||
|
||||
#if BUILDFLAG(ENABLE_PDF)
|
||||
MaybeInitializeGDI();
|
||||
@@ -1162,6 +1171,7 @@ void ChromeMainDelegate::ZygoteForked() {
|
||||
SetUpProfilingShutdownHandler();
|
||||
}
|
||||
|
||||
+ if (!cef::IsChromeRuntimeEnabled()) {
|
||||
// Needs to be called after we have chrome::DIR_USER_DATA. BrowserMain sets
|
||||
// this up for the browser process in a different manner.
|
||||
const base::CommandLine* command_line =
|
||||
@@ -1178,6 +1188,7 @@ void ChromeMainDelegate::ZygoteForked() {
|
||||
|
||||
// Reset the command line for the newly spawned process.
|
||||
crash_keys::SetCrashKeysFromCommandLine(*command_line);
|
||||
+ } // !cef::IsChromeRuntimeEnabled()
|
||||
}
|
||||
|
||||
#endif // defined(OS_LINUX)
|
||||
diff --git chrome/browser/chrome_browser_main.cc chrome/browser/chrome_browser_main.cc
|
||||
index c06585b15b8f..763212a575ce 100644
|
||||
--- chrome/browser/chrome_browser_main.cc
|
||||
@@ -37,6 +116,31 @@ index c06585b15b8f..763212a575ce 100644
|
||||
#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
|
||||
// Initialize autoupdate timer. Timer callback costs basically nothing
|
||||
// when browser is not in persistent mode, so it's OK to let it ride on
|
||||
diff --git chrome/browser/notifications/notification_platform_bridge_mac.mm chrome/browser/notifications/notification_platform_bridge_mac.mm
|
||||
index acf1849aa1b3..27efc35d74d6 100644
|
||||
--- chrome/browser/notifications/notification_platform_bridge_mac.mm
|
||||
+++ chrome/browser/notifications/notification_platform_bridge_mac.mm
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "base/system/sys_info.h"
|
||||
#include "base/task/post_task.h"
|
||||
+#include "cef/libcef/features/runtime.h"
|
||||
#include "chrome/browser/browser_process.h"
|
||||
#include "chrome/browser/notifications/notification_common.h"
|
||||
#include "chrome/browser/notifications/notification_display_service_impl.h"
|
||||
@@ -642,6 +643,12 @@ - (void)notificationClick:(NSDictionary*)notificationResponseData {
|
||||
- (id<NotificationDelivery>)serviceProxy {
|
||||
id<NotificationDelivery> proxy = [_xpcConnection remoteObjectProxy];
|
||||
|
||||
+ // Skip exception port configuration when running CEF with crash reporting disabled.
|
||||
+ if (!_setExceptionPort && cef::IsChromeRuntimeEnabled() &&
|
||||
+ !cef::IsCrashReportingEnabled()) {
|
||||
+ _setExceptionPort = YES;
|
||||
+ }
|
||||
+
|
||||
if (!_setExceptionPort) {
|
||||
base::mac::ScopedMachSendRight exceptionPort(
|
||||
crash_reporter::GetCrashpadClient().GetHandlerMachPort());
|
||||
diff --git ui/gtk/select_file_dialog_impl_kde.cc ui/gtk/select_file_dialog_impl_kde.cc
|
||||
index f09501d6cd8e..edfc2a4c9bb5 100644
|
||||
--- ui/gtk/select_file_dialog_impl_kde.cc
|
||||
|
@@ -56,28 +56,68 @@ index 982fbe8d3f0d..e757be4688f1 100644
|
||||
+ "studio path")
|
||||
}
|
||||
diff --git chrome/chrome_paks.gni chrome/chrome_paks.gni
|
||||
index deef406b9273..2dfd2cd8c2ef 100644
|
||||
index deef406b9273..ad338636cf5d 100644
|
||||
--- chrome/chrome_paks.gni
|
||||
+++ chrome/chrome_paks.gni
|
||||
@@ -303,7 +303,7 @@ template("chrome_paks") {
|
||||
@@ -3,6 +3,7 @@
|
||||
# found in the LICENSE file.
|
||||
|
||||
import("//build/config/locales.gni")
|
||||
+import("//cef/libcef/features/features.gni")
|
||||
import("//chrome/browser/buildflags.gni")
|
||||
import("//chrome/common/features.gni")
|
||||
import("//chromeos/components/media_app_ui/media_app_ui.gni")
|
||||
@@ -289,6 +290,7 @@ template("chrome_paks") {
|
||||
}
|
||||
}
|
||||
|
||||
input_locales = locales
|
||||
- output_dir = "${invoker.output_dir}/locales"
|
||||
+ output_dir = "${invoker.output_dir}/chrome/locales"
|
||||
+ if (!enable_cef) {
|
||||
chrome_repack_locales("${target_name}_locales") {
|
||||
forward_variables_from(invoker,
|
||||
[
|
||||
@@ -311,14 +313,17 @@ template("chrome_paks") {
|
||||
output_locales = locales
|
||||
}
|
||||
}
|
||||
+ } # !enable_cef
|
||||
|
||||
if (is_mac) {
|
||||
output_locales = locales_as_mac_outputs
|
||||
group(target_name) {
|
||||
forward_variables_from(invoker, [ "deps" ])
|
||||
public_deps = [
|
||||
":${target_name}_100_percent",
|
||||
":${target_name}_extra",
|
||||
- ":${target_name}_locales",
|
||||
]
|
||||
+ if (!enable_cef) {
|
||||
+ public_deps += [ ":${target_name}_locales" ]
|
||||
+ }
|
||||
if (enable_hidpi) {
|
||||
public_deps += [ ":${target_name}_200_percent" ]
|
||||
}
|
||||
diff --git chrome/installer/mini_installer/BUILD.gn chrome/installer/mini_installer/BUILD.gn
|
||||
index 056d425c4194..dd1a5094ec8d 100644
|
||||
index 056d425c4194..0c0e0f22ab66 100644
|
||||
--- chrome/installer/mini_installer/BUILD.gn
|
||||
+++ chrome/installer/mini_installer/BUILD.gn
|
||||
@@ -134,7 +134,7 @@ template("generate_mini_installer") {
|
||||
@@ -5,6 +5,7 @@
|
||||
import("//build/config/compiler/compiler.gni")
|
||||
import("//build/config/features.gni")
|
||||
import("//build/config/ui.gni")
|
||||
+import("//cef/libcef/features/features.gni")
|
||||
import("//chrome/process_version_rc_template.gni")
|
||||
import("//components/nacl/features.gni")
|
||||
import("//third_party/icu/config.gni")
|
||||
@@ -134,11 +135,13 @@ template("generate_mini_installer") {
|
||||
inputs = [
|
||||
"$chrome_dll_file",
|
||||
"$root_out_dir/chrome.exe",
|
||||
- "$root_out_dir/locales/en-US.pak",
|
||||
+ "$root_out_dir/chrome/locales/en-US.pak",
|
||||
"$root_out_dir/setup.exe",
|
||||
"//chrome/tools/build/win/makecab.py",
|
||||
release_file,
|
||||
]
|
||||
+ if (!enable_cef) {
|
||||
+ inputs += [ "$root_out_dir/locales/en-US.pak" ]
|
||||
+ }
|
||||
|
||||
outputs = [
|
||||
# See also chrome.packed.7z conditionally added below.
|
||||
|
Reference in New Issue
Block a user