Skip to content

Commit

Permalink
Make CrosDBusService chrome-independent
Browse files Browse the repository at this point in the history
It is the caller's responsibility to pass the needed provider instances to CrosDBusService::Initialize().

BUG=429354

Review URL: https://codereview.chromium.org/728343002

Cr-Commit-Position: refs/heads/master@{#304395}
  • Loading branch information
hashimoto authored and Commit bot committed Nov 17, 2014
1 parent 7d0a5c5 commit 6415f78
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 39 deletions.
20 changes: 19 additions & 1 deletion chrome/browser/chromeos/chrome_browser_main_chromeos.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -164,7 +170,19 @@ class DBusServices {
DBusThreadManager::Initialize();
PowerPolicyController::Initialize(
DBusThreadManager::Get()->GetPowerManagerClient());
CrosDBusService::Initialize();

ScopedVector<CrosDBusService::ServiceProviderInterface> 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();
Expand Down
43 changes: 11 additions & 32 deletions chrome/browser/chromeos/dbus/cros_dbus_service.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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<ServiceProviderInterface> 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.
Expand Down Expand Up @@ -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() {
Expand All @@ -99,7 +88,7 @@ class CrosDBusServiceImpl : public CrosDBusService {
scoped_refptr<dbus::ExportedObject> exported_object_;

// Service providers that form CrosDBusService.
std::vector<ServiceProviderInterface*> service_providers_;
ScopedVector<ServiceProviderInterface> service_providers_;
};

// The stub CrosDBusService implementation used on Linux desktop,
Expand All @@ -114,24 +103,15 @@ class CrosDBusServiceStubImpl : public CrosDBusService {
};

// static
void CrosDBusService::Initialize() {
void CrosDBusService::Initialize(
ScopedVector<ServiceProviderInterface> 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 {
Expand All @@ -143,13 +123,12 @@ void CrosDBusService::Initialize() {
// static
void CrosDBusService::InitializeForTesting(
dbus::Bus* bus,
ServiceProviderInterface* proxy_resolution_service) {
ScopedVector<ServiceProviderInterface> 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";
Expand Down
12 changes: 7 additions & 5 deletions chrome/browser/chromeos/dbus/cros_dbus_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <vector>

#include "base/memory/ref_counted.h"
#include "base/memory/scoped_vector.h"
#include "base/threading/platform_thread.h"

namespace dbus {
Expand Down Expand Up @@ -44,22 +45,23 @@ class CrosDBusService {
};

// Initializes the global instance.
static void Initialize();
static void Initialize(
ScopedVector<ServiceProviderInterface> service_providers);
// Destroys the global instance.
static void Shutdown();

protected:
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<ServiceProviderInterface> service_providers);
};

} // namespace
} // namespace chromeos

#endif // CHROME_BROWSER_CHROMEOS_DBUS_CROS_DBUS_SERVICE_H_
4 changes: 3 additions & 1 deletion chrome/browser/chromeos/dbus/cros_dbus_service_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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<CrosDBusService::ServiceProviderInterface> 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() {
Expand Down

0 comments on commit 6415f78

Please sign in to comment.