| Index: chromeos/dbus/dbus_thread_manager.cc
|
| diff --git a/chromeos/dbus/dbus_thread_manager.cc b/chromeos/dbus/dbus_thread_manager.cc
|
| index 11ebb6ac94ff7594a4e432aaaf35d0c4b8935845..79de3d08bcae50cf202bf53986ef6827a795cf0e 100644
|
| --- a/chromeos/dbus/dbus_thread_manager.cc
|
| +++ b/chromeos/dbus/dbus_thread_manager.cc
|
| @@ -54,13 +54,15 @@ static bool g_dbus_thread_manager_set_for_testing = false;
|
| // The DBusThreadManager implementation used in production.
|
| class DBusThreadManagerImpl : public DBusThreadManager {
|
| public:
|
| - explicit DBusThreadManagerImpl(DBusClientImplementationType client_type) {
|
| + explicit DBusThreadManagerImpl(DBusClientImplementationType client_type)
|
| + : client_type_(client_type),
|
| + client_type_override_(client_type) {
|
| // If --dbus-stub was requested, pass STUB to specific components;
|
| // Many components like login are not useful with a stub implementation.
|
| - DBusClientImplementationType client_type_maybe_stub = client_type;
|
| if (CommandLine::ForCurrentProcess()->HasSwitch(
|
| - chromeos::switches::kDbusStub))
|
| - client_type_maybe_stub = STUB_DBUS_CLIENT_IMPLEMENTATION;
|
| + chromeos::switches::kDbusStub)) {
|
| + client_type_override_ = STUB_DBUS_CLIENT_IMPLEMENTATION;
|
| + }
|
|
|
| // Create the D-Bus thread.
|
| base::Thread::Options thread_options;
|
| @@ -74,53 +76,60 @@ class DBusThreadManagerImpl : public DBusThreadManager {
|
| system_bus_options.connection_type = dbus::Bus::PRIVATE;
|
| system_bus_options.dbus_task_runner = dbus_thread_->message_loop_proxy();
|
| system_bus_ = new dbus::Bus(system_bus_options);
|
| + }
|
|
|
| + // InitializeClients gets called after g_dbus_thread_manager is set.
|
| + // NOTE: Clients that access other clients in their constructor must be
|
| + // construced in the correct order.
|
| + void InitializeClients() {
|
| bluetooth_manager_client_.reset(BluetoothManagerClient::Create(
|
| - client_type, system_bus_.get()));
|
| + client_type_, system_bus_.get()));
|
| bluetooth_adapter_client_.reset(BluetoothAdapterClient::Create(
|
| - client_type, system_bus_.get(), bluetooth_manager_client_.get()));
|
| + client_type_, system_bus_.get(), bluetooth_manager_client_.get()));
|
| bluetooth_device_client_.reset(BluetoothDeviceClient::Create(
|
| - client_type, system_bus_.get(), bluetooth_adapter_client_.get()));
|
| + client_type_, system_bus_.get(), bluetooth_adapter_client_.get()));
|
| bluetooth_input_client_.reset(BluetoothInputClient::Create(
|
| - client_type, system_bus_.get(), bluetooth_adapter_client_.get()));
|
| + client_type_, system_bus_.get(), bluetooth_adapter_client_.get()));
|
| bluetooth_node_client_.reset(BluetoothNodeClient::Create(
|
| - client_type, system_bus_.get(), bluetooth_device_client_.get()));
|
| + client_type_, system_bus_.get(), bluetooth_device_client_.get()));
|
| bluetooth_out_of_band_client_.reset(BluetoothOutOfBandClient::Create(
|
| - client_type, system_bus_.get()));
|
| + client_type_, system_bus_.get()));
|
| cros_disks_client_.reset(
|
| - CrosDisksClient::Create(client_type, system_bus_.get()));
|
| + CrosDisksClient::Create(client_type_, system_bus_.get()));
|
| cryptohome_client_.reset(
|
| - CryptohomeClient::Create(client_type, system_bus_.get()));
|
| + CryptohomeClient::Create(client_type_, system_bus_.get()));
|
| debug_daemon_client_.reset(
|
| - DebugDaemonClient::Create(client_type, system_bus_.get()));
|
| + DebugDaemonClient::Create(client_type_, system_bus_.get()));
|
| +
|
| + shill_manager_client_.reset(
|
| + ShillManagerClient::Create(client_type_override_, system_bus_.get()));
|
| shill_device_client_.reset(
|
| - ShillDeviceClient::Create(client_type, system_bus_.get()));
|
| + ShillDeviceClient::Create(client_type_override_, system_bus_.get()));
|
| shill_ipconfig_client_.reset(
|
| - ShillIPConfigClient::Create(client_type, system_bus_.get()));
|
| - shill_manager_client_.reset(
|
| - ShillManagerClient::Create(client_type, system_bus_.get()));
|
| + ShillIPConfigClient::Create(client_type_override_, system_bus_.get()));
|
| shill_profile_client_.reset(
|
| - ShillProfileClient::Create(client_type, system_bus_.get()));
|
| + ShillProfileClient::Create(client_type_override_, system_bus_.get()));
|
| shill_service_client_.reset(
|
| - ShillServiceClient::Create(client_type, system_bus_.get()));
|
| + ShillServiceClient::Create(client_type_override_, system_bus_.get()));
|
| gsm_sms_client_.reset(
|
| - GsmSMSClient::Create(client_type, system_bus_.get()));
|
| - image_burner_client_.reset(ImageBurnerClient::Create(client_type,
|
| + GsmSMSClient::Create(client_type_override_, system_bus_.get()));
|
| +
|
| + image_burner_client_.reset(ImageBurnerClient::Create(client_type_,
|
| system_bus_.get()));
|
| introspectable_client_.reset(
|
| - IntrospectableClient::Create(client_type, system_bus_.get()));
|
| + IntrospectableClient::Create(client_type_, system_bus_.get()));
|
| modem_messaging_client_.reset(
|
| - ModemMessagingClient::Create(client_type, system_bus_.get()));
|
| + ModemMessagingClient::Create(client_type_, system_bus_.get()));
|
| permission_broker_client_.reset(
|
| - PermissionBrokerClient::Create(client_type, system_bus_.get()));
|
| + PermissionBrokerClient::Create(client_type_, system_bus_.get()));
|
| power_manager_client_.reset(
|
| - PowerManagerClient::Create(client_type_maybe_stub, system_bus_.get()));
|
| + PowerManagerClient::Create(client_type_override_, system_bus_.get()));
|
| session_manager_client_.reset(
|
| - SessionManagerClient::Create(client_type, system_bus_.get()));
|
| + SessionManagerClient::Create(client_type_, system_bus_.get()));
|
| sms_client_.reset(
|
| - SMSClient::Create(client_type, system_bus_.get()));
|
| + SMSClient::Create(client_type_, system_bus_.get()));
|
| update_engine_client_.reset(
|
| - UpdateEngineClient::Create(client_type, system_bus_.get()));
|
| + UpdateEngineClient::Create(client_type_, system_bus_.get()));
|
|
|
| // PowerPolicyController is dependent on PowerManagerClient, so
|
| // initialize it after the main list of clients.
|
| @@ -346,6 +355,9 @@ class DBusThreadManagerImpl : public DBusThreadManager {
|
| return ibus_panel_service_.get();
|
| }
|
|
|
| + DBusClientImplementationType client_type_;
|
| + DBusClientImplementationType client_type_override_;
|
| +
|
| // Note: Keep this before other members so they can call AddObserver() in
|
| // their c'tors.
|
| ObserverList<DBusThreadManagerObserver> observers_;
|
| @@ -396,15 +408,18 @@ void DBusThreadManager::Initialize() {
|
| // early; do not allow that.
|
| CHECK(g_dbus_thread_manager == NULL);
|
| // Determine whether we use stub or real client implementations.
|
| + DBusThreadManagerImpl* dbus_thread_manager_impl;
|
| if (base::chromeos::IsRunningOnChromeOS()) {
|
| - g_dbus_thread_manager =
|
| + dbus_thread_manager_impl =
|
| new DBusThreadManagerImpl(REAL_DBUS_CLIENT_IMPLEMENTATION);
|
| VLOG(1) << "DBusThreadManager initialized for ChromeOS";
|
| } else {
|
| - g_dbus_thread_manager =
|
| + dbus_thread_manager_impl =
|
| new DBusThreadManagerImpl(STUB_DBUS_CLIENT_IMPLEMENTATION);
|
| VLOG(1) << "DBusThreadManager initialized with Stub";
|
| }
|
| + g_dbus_thread_manager = dbus_thread_manager_impl;
|
| + dbus_thread_manager_impl->InitializeClients();
|
| }
|
|
|
| // static
|
| @@ -424,8 +439,10 @@ void DBusThreadManager::InitializeWithStub() {
|
| // If we initialize DBusThreadManager twice we may also be shutting it down
|
| // early; do not allow that.
|
| CHECK(g_dbus_thread_manager == NULL);
|
| - g_dbus_thread_manager =
|
| - new DBusThreadManagerImpl(STUB_DBUS_CLIENT_IMPLEMENTATION);
|
| + DBusThreadManagerImpl* dbus_thread_manager_impl =
|
| + new DBusThreadManagerImpl(STUB_DBUS_CLIENT_IMPLEMENTATION);
|
| + g_dbus_thread_manager = dbus_thread_manager_impl;
|
| + dbus_thread_manager_impl->InitializeClients();
|
| VLOG(1) << "DBusThreadManager initialized with stub implementation";
|
| }
|
|
|
|
|