diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc index 464802474b1a..f26b71317982 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc @@ -29,7 +29,13 @@ #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" #include "chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.h" #include "chrome/browser/chromeos/boot_times_loader.h" +#include "chrome/browser/chromeos/dbus/console_service_provider.h" #include "chrome/browser/chromeos/dbus/cros_dbus_service.h" +#include "chrome/browser/chromeos/dbus/display_power_service_provider.h" +#include "chrome/browser/chromeos/dbus/liveness_service_provider.h" +#include "chrome/browser/chromeos/dbus/printer_service_provider.h" +#include "chrome/browser/chromeos/dbus/proxy_resolution_service_provider.h" +#include "chrome/browser/chromeos/dbus/screen_lock_service_provider.h" #include "chrome/browser/chromeos/device/input_service_proxy.h" #include "chrome/browser/chromeos/events/event_rewriter.h" #include "chrome/browser/chromeos/events/event_rewriter_controller.h" @@ -164,7 +170,19 @@ class DBusServices { DBusThreadManager::Initialize(); PowerPolicyController::Initialize( DBusThreadManager::Get()->GetPowerManagerClient()); - CrosDBusService::Initialize(); + + ScopedVector service_providers; + service_providers.push_back(ProxyResolutionServiceProvider::Create()); +#if !defined(USE_ATHENA) + // crbug.com/413897 + service_providers.push_back(new DisplayPowerServiceProvider); + // crbug.com/401285 + service_providers.push_back(new PrinterServiceProvider); +#endif + service_providers.push_back(new LivenessServiceProvider); + service_providers.push_back(new ScreenLockServiceProvider); + service_providers.push_back(new ConsoleServiceProvider); + CrosDBusService::Initialize(service_providers.Pass()); // Initialize PowerDataCollector after DBusThreadManager is initialized. PowerDataCollector::Initialize(); diff --git a/chrome/browser/chromeos/dbus/cros_dbus_service.cc b/chrome/browser/chromeos/dbus/cros_dbus_service.cc index 4bab1e2ec876..7f9598e69461 100644 --- a/chrome/browser/chromeos/dbus/cros_dbus_service.cc +++ b/chrome/browser/chromeos/dbus/cros_dbus_service.cc @@ -8,12 +8,6 @@ #include "base/stl_util.h" #include "base/sys_info.h" #include "base/threading/platform_thread.h" -#include "chrome/browser/chromeos/dbus/console_service_provider.h" -#include "chrome/browser/chromeos/dbus/display_power_service_provider.h" -#include "chrome/browser/chromeos/dbus/liveness_service_provider.h" -#include "chrome/browser/chromeos/dbus/printer_service_provider.h" -#include "chrome/browser/chromeos/dbus/proxy_resolution_service_provider.h" -#include "chrome/browser/chromeos/dbus/screen_lock_service_provider.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "dbus/bus.h" #include "dbus/exported_object.h" @@ -31,14 +25,15 @@ CrosDBusService* g_cros_dbus_service = NULL; // The CrosDBusService implementation used in production, and unit tests. class CrosDBusServiceImpl : public CrosDBusService { public: - explicit CrosDBusServiceImpl(dbus::Bus* bus) + CrosDBusServiceImpl(dbus::Bus* bus, + ScopedVector service_providers) : service_started_(false), origin_thread_id_(base::PlatformThread::CurrentId()), - bus_(bus) { + bus_(bus), + service_providers_(service_providers.Pass()) { } - virtual ~CrosDBusServiceImpl() { - STLDeleteElements(&service_providers_); + ~CrosDBusServiceImpl() override { } // Starts the D-Bus service. @@ -75,12 +70,6 @@ class CrosDBusServiceImpl : public CrosDBusService { VLOG(1) << "CrosDBusServiceImpl started."; } - // Registers a service provider. This must be done before Start(). - // |provider| will be owned by CrosDBusService. - void RegisterServiceProvider(ServiceProviderInterface* provider) { - service_providers_.push_back(provider); - } - private: // Returns true if the current thread is on the origin thread. bool OnOriginThread() { @@ -99,7 +88,7 @@ class CrosDBusServiceImpl : public CrosDBusService { scoped_refptr exported_object_; // Service providers that form CrosDBusService. - std::vector service_providers_; + ScopedVector service_providers_; }; // The stub CrosDBusService implementation used on Linux desktop, @@ -114,24 +103,15 @@ class CrosDBusServiceStubImpl : public CrosDBusService { }; // static -void CrosDBusService::Initialize() { +void CrosDBusService::Initialize( + ScopedVector service_providers) { if (g_cros_dbus_service) { LOG(WARNING) << "CrosDBusService was already initialized"; return; } dbus::Bus* bus = DBusThreadManager::Get()->GetSystemBus(); if (base::SysInfo::IsRunningOnChromeOS() && bus) { - CrosDBusServiceImpl* service = new CrosDBusServiceImpl(bus); - service->RegisterServiceProvider(ProxyResolutionServiceProvider::Create()); -#if !defined(USE_ATHENA) - // crbug.com/413897 - service->RegisterServiceProvider(new DisplayPowerServiceProvider); - // crbug.com/401285 - service->RegisterServiceProvider(new PrinterServiceProvider); -#endif - service->RegisterServiceProvider(new LivenessServiceProvider); - service->RegisterServiceProvider(new ScreenLockServiceProvider); - service->RegisterServiceProvider(new ConsoleServiceProvider); + auto* service = new CrosDBusServiceImpl(bus, service_providers.Pass()); g_cros_dbus_service = service; service->Start(); } else { @@ -143,13 +123,12 @@ void CrosDBusService::Initialize() { // static void CrosDBusService::InitializeForTesting( dbus::Bus* bus, - ServiceProviderInterface* proxy_resolution_service) { + ScopedVector service_providers) { if (g_cros_dbus_service) { LOG(WARNING) << "CrosDBusService was already initialized"; return; } - CrosDBusServiceImpl* service = new CrosDBusServiceImpl(bus); - service->RegisterServiceProvider(proxy_resolution_service); + auto* service = new CrosDBusServiceImpl(bus, service_providers.Pass()); service->Start(); g_cros_dbus_service = service; VLOG(1) << "CrosDBusService initialized"; diff --git a/chrome/browser/chromeos/dbus/cros_dbus_service.h b/chrome/browser/chromeos/dbus/cros_dbus_service.h index 26e4ffc944e9..d745af8692d3 100644 --- a/chrome/browser/chromeos/dbus/cros_dbus_service.h +++ b/chrome/browser/chromeos/dbus/cros_dbus_service.h @@ -8,6 +8,7 @@ #include #include "base/memory/ref_counted.h" +#include "base/memory/scoped_vector.h" #include "base/threading/platform_thread.h" namespace dbus { @@ -44,7 +45,8 @@ class CrosDBusService { }; // Initializes the global instance. - static void Initialize(); + static void Initialize( + ScopedVector service_providers); // Destroys the global instance. static void Shutdown(); @@ -52,14 +54,14 @@ class CrosDBusService { virtual ~CrosDBusService(); private: - // Initializes the global instance for testing. Takes ownership of - // |proxy_resolution_service|. friend class CrosDBusServiceTest; + + // Initializes the global instance for testing. static void InitializeForTesting( dbus::Bus* bus, - ServiceProviderInterface* proxy_resolution_service); + ScopedVector service_providers); }; -} // namespace +} // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_DBUS_CROS_DBUS_SERVICE_H_ diff --git a/chrome/browser/chromeos/dbus/cros_dbus_service_unittest.cc b/chrome/browser/chromeos/dbus/cros_dbus_service_unittest.cc index 4ab293048316..6aba129b4590 100644 --- a/chrome/browser/chromeos/dbus/cros_dbus_service_unittest.cc +++ b/chrome/browser/chromeos/dbus/cros_dbus_service_unittest.cc @@ -64,8 +64,10 @@ class CrosDBusServiceTest : public testing::Test { EXPECT_CALL(*mock_proxy_resolution_service_provider, Start(Eq(mock_exported_object_))).WillOnce(Return()); // Initialize the cros service with the mocks injected. + ScopedVector service_providers; + service_providers.push_back(mock_proxy_resolution_service_provider); CrosDBusService::InitializeForTesting( - mock_bus_.get(), mock_proxy_resolution_service_provider); + mock_bus_.get(), service_providers.Pass()); } virtual void TearDown() {