Chromium Code Reviews| 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..53f604c188c9b14a57ff07676e614a89f76238fc 100644 |
| --- a/chrome/browser/chromeos/dbus/dbus_thread_manager.cc |
| +++ b/chrome/browser/chromeos/dbus/dbus_thread_manager.cc |
| @@ -20,68 +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 { |
|
oshima
2011/10/28 23:35:20
Not requirement, but I prefer to put class in .cc
|
| + 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())); |
| + } |
|
oshima
2011/10/28 23:35:20
nuke {}
satorux1
2011/10/28 23:43:29
Done.
|
| + |
| + // 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. |
|
oshima
2011/10/28 23:35:20
Given that we now have initialize for test, should
satorux1
2011/10/28 23:43:29
Tests are not yet converted to use InitializeForTe
|
| - LOG(WARNING) << "DBusThreadManager::Initialize() was already called"; |
| + LOG(WARNING) << "DBusThreadManager was already initialized"; |
| return; |
| } |
| - g_dbus_thread_manager = new DBusThreadManager; |
| + g_dbus_thread_manager = new DBusThreadManagerImpl; |
| VLOG(1) << "DBusThreadManager initialized"; |
| } |
| +// static |
| +void DBusThreadManager::InitializeForTesting( |
| + DBusThreadManager* dbus_thread_manager) { |
| + if (g_dbus_thread_manager) { |
| + // This can happen in tests. |
| + LOG(WARNING) << "DBusThreadManager was already initialized"; |
|
oshima
2011/10/28 23:35:20
If this is expected, please change this to INFO or
satorux1
2011/10/28 23:43:29
This is not expected. I removed the irrelevant com
|
| + return; |
| + } |
| + 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. |
| @@ -93,15 +157,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 |