From 28a64c824fd14da89b4befbeeea326808ad21188 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 08:42:10 +0000 Subject: [PATCH 1/2] fix: crash using powerMonitor before ready event Co-authored-by: Shelley Vohr --- shell/browser/electron_browser_main_parts.cc | 9 ++++++--- shell/browser/lib/power_observer_linux.cc | 4 ++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/shell/browser/electron_browser_main_parts.cc b/shell/browser/electron_browser_main_parts.cc index 7418f13fa66d2..f9de875fb1c4b 100644 --- a/shell/browser/electron_browser_main_parts.cc +++ b/shell/browser/electron_browser_main_parts.cc @@ -81,7 +81,8 @@ #include "base/environment.h" #include "chrome/browser/ui/views/dark_mode_manager_linux.h" #include "device/bluetooth/bluetooth_adapter_factory.h" -#include "device/bluetooth/dbus/dbus_bluez_manager_wrapper_linux.h" +#include "device/bluetooth/dbus/bluez_dbus_manager.h" +#include "device/bluetooth/dbus/bluez_dbus_thread_manager.h" #include "electron/electron_gtk_stubs.h" #include "ui/base/cursor/cursor_factory.h" #include "ui/base/ime/linux/linux_input_method_context_factory.h" @@ -386,7 +387,8 @@ void ElectronBrowserMainParts::PostDestroyThreads() { #endif #if BUILDFLAG(IS_LINUX) device::BluetoothAdapterFactory::Shutdown(); - bluez::DBusBluezManagerWrapperLinux::Shutdown(); + bluez::BluezDBusManager::Shutdown(); + bluez::BluezDBusThreadManager::Shutdown(); #endif fake_browser_process_->PostDestroyThreads(); } @@ -508,7 +510,8 @@ void ElectronBrowserMainParts::PostCreateMainMessageLoop() { ui::OzonePlatform::GetInstance()->PostCreateMainMessageLoop( std::move(shutdown_cb), content::GetUIThreadTaskRunner({content::BrowserTaskType::kUserInput})); - bluez::DBusBluezManagerWrapperLinux::Initialize(); + if (!bluez::BluezDBusManager::IsInitialized()) + bluez::BluezDBusManager::Initialize(nullptr /* system_bus */); // Set up crypt config. This needs to be done before anything starts the // network service, as the raw encryption key needs to be shared with the diff --git a/shell/browser/lib/power_observer_linux.cc b/shell/browser/lib/power_observer_linux.cc index 881c40c0fb0b9..7b552fb959efd 100644 --- a/shell/browser/lib/power_observer_linux.cc +++ b/shell/browser/lib/power_observer_linux.cc @@ -11,6 +11,7 @@ #include "base/files/file_path.h" #include "base/functional/bind.h" #include "base/logging.h" +#include "device/bluetooth/dbus/bluez_dbus_manager.h" #include "device/bluetooth/dbus/bluez_dbus_thread_manager.h" namespace { @@ -34,6 +35,9 @@ PowerObserverLinux::PowerObserverLinux( base::PowerSuspendObserver* suspend_observer) : suspend_observer_(suspend_observer), lock_owner_name_(GetExecutableBaseName()) { + if (!bluez::BluezDBusManager::IsInitialized()) + bluez::BluezDBusManager::Initialize(nullptr /* system bus */); + auto* bus = bluez::BluezDBusThreadManager::Get()->GetSystemBus(); if (!bus) { LOG(WARNING) << "Failed to get system bus connection"; From 302e3b9a7c19daed88e748c895c2c3d4e4e400b3 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 08:42:18 +0000 Subject: [PATCH 2/2] refactor: continue using DBusBluezManagerWrapperLinux Co-authored-by: Shelley Vohr --- shell/browser/electron_browser_main_parts.cc | 7 +++---- shell/browser/lib/power_observer_linux.cc | 3 ++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/shell/browser/electron_browser_main_parts.cc b/shell/browser/electron_browser_main_parts.cc index f9de875fb1c4b..1638f64c04006 100644 --- a/shell/browser/electron_browser_main_parts.cc +++ b/shell/browser/electron_browser_main_parts.cc @@ -82,7 +82,7 @@ #include "chrome/browser/ui/views/dark_mode_manager_linux.h" #include "device/bluetooth/bluetooth_adapter_factory.h" #include "device/bluetooth/dbus/bluez_dbus_manager.h" -#include "device/bluetooth/dbus/bluez_dbus_thread_manager.h" +#include "device/bluetooth/dbus/dbus_bluez_manager_wrapper_linux.h" #include "electron/electron_gtk_stubs.h" #include "ui/base/cursor/cursor_factory.h" #include "ui/base/ime/linux/linux_input_method_context_factory.h" @@ -387,8 +387,7 @@ void ElectronBrowserMainParts::PostDestroyThreads() { #endif #if BUILDFLAG(IS_LINUX) device::BluetoothAdapterFactory::Shutdown(); - bluez::BluezDBusManager::Shutdown(); - bluez::BluezDBusThreadManager::Shutdown(); + bluez::DBusBluezManagerWrapperLinux::Shutdown(); #endif fake_browser_process_->PostDestroyThreads(); } @@ -511,7 +510,7 @@ void ElectronBrowserMainParts::PostCreateMainMessageLoop() { std::move(shutdown_cb), content::GetUIThreadTaskRunner({content::BrowserTaskType::kUserInput})); if (!bluez::BluezDBusManager::IsInitialized()) - bluez::BluezDBusManager::Initialize(nullptr /* system_bus */); + bluez::DBusBluezManagerWrapperLinux::Initialize(); // Set up crypt config. This needs to be done before anything starts the // network service, as the raw encryption key needs to be shared with the diff --git a/shell/browser/lib/power_observer_linux.cc b/shell/browser/lib/power_observer_linux.cc index 7b552fb959efd..5d881a8adda1f 100644 --- a/shell/browser/lib/power_observer_linux.cc +++ b/shell/browser/lib/power_observer_linux.cc @@ -13,6 +13,7 @@ #include "base/logging.h" #include "device/bluetooth/dbus/bluez_dbus_manager.h" #include "device/bluetooth/dbus/bluez_dbus_thread_manager.h" +#include "device/bluetooth/dbus/dbus_bluez_manager_wrapper_linux.h" namespace { @@ -36,7 +37,7 @@ PowerObserverLinux::PowerObserverLinux( : suspend_observer_(suspend_observer), lock_owner_name_(GetExecutableBaseName()) { if (!bluez::BluezDBusManager::IsInitialized()) - bluez::BluezDBusManager::Initialize(nullptr /* system bus */); + bluez::DBusBluezManagerWrapperLinux::Initialize(); auto* bus = bluez::BluezDBusThreadManager::Get()->GetSystemBus(); if (!bus) {