| Index: chrome/browser/chromeos/dbus/dbus_thread_manager.cc
|
| diff --git a/chrome/browser/chromeos/dbus/dbus_thread_manager.cc b/chrome/browser/chromeos/dbus/dbus_thread_manager.cc
|
| index 91f880b1bbffc03fc7c92052ad81e02518e2253b..53ea24c1a4422a63486b827033853640b408706b 100644
|
| --- a/chrome/browser/chromeos/dbus/dbus_thread_manager.cc
|
| +++ b/chrome/browser/chromeos/dbus/dbus_thread_manager.cc
|
| @@ -20,71 +20,132 @@ namespace chromeos {
|
|
|
| static DBusThreadManager* g_dbus_thread_manager = NULL;
|
|
|
| -DBusThreadManager::DBusThreadManager() {
|
| - // Create the D-Bus thread.
|
| - base::Thread::Options thread_options;
|
| - thread_options.message_loop_type = MessageLoop::TYPE_IO;
|
| - dbus_thread_.reset(new base::Thread("D-Bus thread"));
|
| - dbus_thread_->StartWithOptions(thread_options);
|
| -
|
| - // Create the connection to the system bus.
|
| - dbus::Bus::Options system_bus_options;
|
| - system_bus_options.bus_type = dbus::Bus::SYSTEM;
|
| - system_bus_options.connection_type = dbus::Bus::PRIVATE;
|
| - system_bus_options.dbus_thread_message_loop_proxy =
|
| - dbus_thread_->message_loop_proxy();
|
| - system_bus_ = new dbus::Bus(system_bus_options);
|
| -
|
| - // Create and start the cros D-Bus service.
|
| - cros_dbus_service_.reset(CrosDBusService::Create(system_bus_.get()));
|
| - cros_dbus_service_->Start();
|
| -
|
| - // Start monitoring sensors if needed.
|
| - const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| - if (command_line.HasSwitch(switches::kEnableSensors)) {
|
| - sensors_client_.reset(SensorsClient::Create(system_bus_.get()));
|
| +// The DBusThreadManager implementation used in production.
|
| +class DBusThreadManagerImpl : public DBusThreadManager {
|
| + public:
|
| + DBusThreadManagerImpl() {
|
| + // Create the D-Bus thread.
|
| + base::Thread::Options thread_options;
|
| + thread_options.message_loop_type = MessageLoop::TYPE_IO;
|
| + dbus_thread_.reset(new base::Thread("D-Bus thread"));
|
| + dbus_thread_->StartWithOptions(thread_options);
|
| +
|
| + // Create the connection to the system bus.
|
| + dbus::Bus::Options system_bus_options;
|
| + system_bus_options.bus_type = dbus::Bus::SYSTEM;
|
| + system_bus_options.connection_type = dbus::Bus::PRIVATE;
|
| + system_bus_options.dbus_thread_message_loop_proxy =
|
| + dbus_thread_->message_loop_proxy();
|
| + system_bus_ = new dbus::Bus(system_bus_options);
|
| +
|
| + // Create and start the cros D-Bus service.
|
| + cros_dbus_service_.reset(CrosDBusService::Create(system_bus_.get()));
|
| + cros_dbus_service_->Start();
|
| +
|
| + // Start monitoring sensors if needed.
|
| + const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| + if (command_line.HasSwitch(switches::kEnableSensors))
|
| + sensors_client_.reset(SensorsClient::Create(system_bus_.get()));
|
| +
|
| + // Create bluetooth clients if bluetooth is enabled.
|
| + if (command_line.HasSwitch(switches::kEnableBluetooth)) {
|
| + bluetooth_manager_client_.reset(BluetoothManagerClient::Create(
|
| + system_bus_.get()));
|
| + bluetooth_adapter_client_.reset(BluetoothAdapterClient::Create(
|
| + system_bus_.get()));
|
| + }
|
| +
|
| + // Create the power manager client.
|
| + power_manager_client_.reset(PowerManagerClient::Create(system_bus_.get()));
|
| + // Create the session manager client.
|
| + session_manager_client_.reset(
|
| + SessionManagerClient::Create(system_bus_.get()));
|
| + // Create the speech synthesizer client.
|
| + speech_synthesizer_client_.reset(
|
| + SpeechSynthesizerClient::Create(system_bus_.get()));
|
| }
|
|
|
| - // Create bluetooth clients if bluetooth is enabled.
|
| - if (command_line.HasSwitch(switches::kEnableBluetooth)) {
|
| - bluetooth_manager_client_.reset(BluetoothManagerClient::Create(
|
| - system_bus_.get()));
|
| - bluetooth_adapter_client_.reset(BluetoothAdapterClient::Create(
|
| - system_bus_.get()));
|
| + virtual ~DBusThreadManagerImpl() {
|
| + // Shut down the bus. During the browser shutdown, it's ok to shut down
|
| + // the bus synchronously.
|
| + system_bus_->ShutdownOnDBusThreadAndBlock();
|
| +
|
| + // Stop the D-Bus thread.
|
| + dbus_thread_->Stop();
|
| }
|
|
|
| - // Create the power manager client.
|
| - power_manager_client_.reset(PowerManagerClient::Create(system_bus_.get()));
|
| - // Create the session manager client.
|
| - session_manager_client_.reset(
|
| - SessionManagerClient::Create(system_bus_.get()));
|
| - // Create the speech synthesizer client.
|
| - speech_synthesizer_client_.reset(
|
| - SpeechSynthesizerClient::Create(system_bus_.get()));
|
| -}
|
| + // DBusThreadManager override.
|
| + virtual BluetoothAdapterClient* bluetooth_adapter_client() OVERRIDE {
|
| + return bluetooth_adapter_client_.get();
|
| + }
|
|
|
| -DBusThreadManager::~DBusThreadManager() {
|
| - // Shut down the bus. During the browser shutdown, it's ok to shut down
|
| - // the bus synchronously.
|
| - system_bus_->ShutdownOnDBusThreadAndBlock();
|
| + // DBusThreadManager override.
|
| + virtual BluetoothManagerClient* bluetooth_manager_client() OVERRIDE {
|
| + return bluetooth_manager_client_.get();
|
| + }
|
|
|
| - // Stop the D-Bus thread.
|
| - dbus_thread_->Stop();
|
| -}
|
| + // DBusThreadManager override.
|
| + virtual PowerManagerClient* power_manager_client() OVERRIDE {
|
| + return power_manager_client_.get();
|
| + }
|
| +
|
| + // DBusThreadManager override.
|
| + virtual SensorsClient* sensors_client() OVERRIDE {
|
| + return sensors_client_.get();
|
| + }
|
| +
|
| + // DBusThreadManager override.
|
| + virtual SessionManagerClient* session_manager_client() OVERRIDE {
|
| + return session_manager_client_.get();
|
| + }
|
| +
|
| + // DBusThreadManager override.
|
| + virtual SpeechSynthesizerClient* speech_synthesizer_client() OVERRIDE {
|
| + return speech_synthesizer_client_.get();
|
| + }
|
| +
|
| + // DBusThreadManager override.
|
| + virtual void set_session_manager_client_for_testing(
|
| + SessionManagerClient* session_manager_client) OVERRIDE {
|
| + session_manager_client_.reset(session_manager_client);
|
| + }
|
|
|
| + scoped_ptr<base::Thread> dbus_thread_;
|
| + scoped_refptr<dbus::Bus> system_bus_;
|
| + scoped_ptr<CrosDBusService> cros_dbus_service_;
|
| + scoped_ptr<BluetoothAdapterClient> bluetooth_adapter_client_;
|
| + scoped_ptr<BluetoothManagerClient> bluetooth_manager_client_;
|
| + scoped_ptr<PowerManagerClient> power_manager_client_;
|
| + scoped_ptr<SensorsClient> sensors_client_;
|
| + scoped_ptr<SessionManagerClient> session_manager_client_;
|
| + scoped_ptr<SpeechSynthesizerClient> speech_synthesizer_client_;
|
| +};
|
| +
|
| +// static
|
| void DBusThreadManager::Initialize() {
|
| if (g_dbus_thread_manager) {
|
| - // This can happen in tests.
|
| - LOG(WARNING) << "DBusThreadManager::Initialize() was already called";
|
| + LOG(WARNING) << "DBusThreadManager was already initialized";
|
| + return;
|
| + }
|
| + g_dbus_thread_manager = new DBusThreadManagerImpl;
|
| + VLOG(1) << "DBusThreadManager initialized";
|
| +}
|
| +
|
| +// static
|
| +void DBusThreadManager::InitializeForTesting(
|
| + DBusThreadManager* dbus_thread_manager) {
|
| + if (g_dbus_thread_manager) {
|
| + LOG(WARNING) << "DBusThreadManager was already initialized";
|
| return;
|
| }
|
| - g_dbus_thread_manager = new DBusThreadManager;
|
| + g_dbus_thread_manager = dbus_thread_manager;
|
| VLOG(1) << "DBusThreadManager initialized";
|
| }
|
|
|
| +// static
|
| void DBusThreadManager::Shutdown() {
|
| if (!g_dbus_thread_manager) {
|
| - // This can happen in tests.
|
| + // TODO(satorux): Make it a DCHECK() once it's ready.
|
| LOG(WARNING) << "DBusThreadManager::Shutdown() called with NULL manager";
|
| return;
|
| }
|
| @@ -93,15 +154,17 @@ void DBusThreadManager::Shutdown() {
|
| VLOG(1) << "DBusThreadManager Shutdown completed";
|
| }
|
|
|
| +DBusThreadManager::DBusThreadManager() {
|
| +}
|
| +
|
| +DBusThreadManager::~DBusThreadManager() {
|
| +}
|
| +
|
| +// static
|
| DBusThreadManager* DBusThreadManager::Get() {
|
| CHECK(g_dbus_thread_manager)
|
| << "DBusThreadManager::Get() called before Initialize()";
|
| return g_dbus_thread_manager;
|
| }
|
|
|
| -void DBusThreadManager::set_session_manager_client_for_testing(
|
| - SessionManagerClient* session_manager_client) {
|
| - session_manager_client_.reset(session_manager_client);
|
| -}
|
| -
|
| } // namespace chromeos
|
|
|