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:
Marshall Greenblatt
2020-07-06 14:14:57 -04:00
parent 02cdf05848
commit 03c9156c80
20 changed files with 745 additions and 326 deletions

View File

@ -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