OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chromeos/dbus/dbus_thread_manager.h" | 5 #include "chromeos/dbus/dbus_thread_manager.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/observer_list.h" | 10 #include "base/observer_list.h" |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 | 56 |
57 static DBusThreadManager* g_dbus_thread_manager = NULL; | 57 static DBusThreadManager* g_dbus_thread_manager = NULL; |
58 static DBusThreadManager* g_dbus_thread_manager_for_testing = NULL; | 58 static DBusThreadManager* g_dbus_thread_manager_for_testing = NULL; |
59 | 59 |
60 // The bundle of all D-Bus clients used in DBusThreadManagerImpl. The bundle | 60 // The bundle of all D-Bus clients used in DBusThreadManagerImpl. The bundle |
61 // is used to delete them at once in the right order before shutting down the | 61 // is used to delete them at once in the right order before shutting down the |
62 // system bus. See also the comment in the destructor of DBusThreadManagerImpl. | 62 // system bus. See also the comment in the destructor of DBusThreadManagerImpl. |
63 class DBusClientBundle { | 63 class DBusClientBundle { |
64 public: | 64 public: |
65 DBusClientBundle() { | 65 DBusClientBundle() { |
66 DBusClientImplementationType client_type = REAL_DBUS_CLIENT_IMPLEMENTATION; | 66 const DBusClientImplementationType type = REAL_DBUS_CLIENT_IMPLEMENTATION; |
67 DBusClientImplementationType client_type_override = client_type; | |
68 // If --dbus-stub was requested, pass STUB to specific components; | |
69 // Many components like login are not useful with a stub implementation. | |
70 if (CommandLine::ForCurrentProcess()->HasSwitch( | |
71 chromeos::switches::kDbusStub)) { | |
72 client_type_override = STUB_DBUS_CLIENT_IMPLEMENTATION; | |
73 } | |
74 | 67 |
75 bluetooth_adapter_client_.reset(BluetoothAdapterClient::Create()); | 68 bluetooth_adapter_client_.reset(BluetoothAdapterClient::Create()); |
76 bluetooth_agent_manager_client_.reset( | 69 bluetooth_agent_manager_client_.reset( |
77 BluetoothAgentManagerClient::Create()); | 70 BluetoothAgentManagerClient::Create()); |
78 bluetooth_device_client_.reset(BluetoothDeviceClient::Create()); | 71 bluetooth_device_client_.reset(BluetoothDeviceClient::Create()); |
79 bluetooth_gatt_characteristic_client_.reset( | 72 bluetooth_gatt_characteristic_client_.reset( |
80 BluetoothGattCharacteristicClient::Create()); | 73 BluetoothGattCharacteristicClient::Create()); |
81 bluetooth_gatt_descriptor_client_.reset( | 74 bluetooth_gatt_descriptor_client_.reset( |
82 BluetoothGattDescriptorClient::Create()); | 75 BluetoothGattDescriptorClient::Create()); |
83 bluetooth_gatt_manager_client_.reset(BluetoothGattManagerClient::Create()); | 76 bluetooth_gatt_manager_client_.reset(BluetoothGattManagerClient::Create()); |
84 bluetooth_gatt_service_client_.reset(BluetoothGattServiceClient::Create()); | 77 bluetooth_gatt_service_client_.reset(BluetoothGattServiceClient::Create()); |
85 bluetooth_input_client_.reset(BluetoothInputClient::Create()); | 78 bluetooth_input_client_.reset(BluetoothInputClient::Create()); |
86 bluetooth_profile_manager_client_.reset( | 79 bluetooth_profile_manager_client_.reset( |
87 BluetoothProfileManagerClient::Create()); | 80 BluetoothProfileManagerClient::Create()); |
88 cras_audio_client_.reset(CrasAudioClient::Create()); | 81 cras_audio_client_.reset(CrasAudioClient::Create()); |
89 cros_disks_client_.reset(CrosDisksClient::Create(client_type)); | 82 cros_disks_client_.reset(CrosDisksClient::Create(type)); |
90 cryptohome_client_.reset(CryptohomeClient::Create()); | 83 cryptohome_client_.reset(CryptohomeClient::Create()); |
91 debug_daemon_client_.reset(DebugDaemonClient::Create()); | 84 debug_daemon_client_.reset(DebugDaemonClient::Create()); |
92 lorgnette_manager_client_.reset(LorgnetteManagerClient::Create()); | 85 lorgnette_manager_client_.reset(LorgnetteManagerClient::Create()); |
93 shill_manager_client_.reset(ShillManagerClient::Create()); | 86 shill_manager_client_.reset(ShillManagerClient::Create()); |
94 shill_device_client_.reset(ShillDeviceClient::Create()); | 87 shill_device_client_.reset(ShillDeviceClient::Create()); |
95 shill_ipconfig_client_.reset(ShillIPConfigClient::Create()); | 88 shill_ipconfig_client_.reset(ShillIPConfigClient::Create()); |
96 shill_service_client_.reset(ShillServiceClient::Create()); | 89 shill_service_client_.reset(ShillServiceClient::Create()); |
97 shill_profile_client_.reset(ShillProfileClient::Create()); | 90 shill_profile_client_.reset(ShillProfileClient::Create()); |
98 gsm_sms_client_.reset(GsmSMSClient::Create()); | 91 gsm_sms_client_.reset(GsmSMSClient::Create()); |
99 image_burner_client_.reset(ImageBurnerClient::Create()); | 92 image_burner_client_.reset(ImageBurnerClient::Create()); |
100 introspectable_client_.reset(IntrospectableClient::Create()); | 93 introspectable_client_.reset(IntrospectableClient::Create()); |
101 modem_messaging_client_.reset(ModemMessagingClient::Create()); | 94 modem_messaging_client_.reset(ModemMessagingClient::Create()); |
102 // Create the NFC clients in the correct order based on their dependencies. | 95 // Create the NFC clients in the correct order based on their dependencies. |
103 nfc_manager_client_.reset(NfcManagerClient::Create()); | 96 nfc_manager_client_.reset(NfcManagerClient::Create()); |
104 nfc_adapter_client_.reset( | 97 nfc_adapter_client_.reset( |
105 NfcAdapterClient::Create(nfc_manager_client_.get())); | 98 NfcAdapterClient::Create(nfc_manager_client_.get())); |
106 nfc_device_client_.reset( | 99 nfc_device_client_.reset( |
107 NfcDeviceClient::Create(nfc_adapter_client_.get())); | 100 NfcDeviceClient::Create(nfc_adapter_client_.get())); |
108 nfc_tag_client_.reset(NfcTagClient::Create(nfc_adapter_client_.get())); | 101 nfc_tag_client_.reset(NfcTagClient::Create(nfc_adapter_client_.get())); |
109 nfc_record_client_.reset(NfcRecordClient::Create(nfc_device_client_.get(), | 102 nfc_record_client_.reset(NfcRecordClient::Create(nfc_device_client_.get(), |
110 nfc_tag_client_.get())); | 103 nfc_tag_client_.get())); |
111 permission_broker_client_.reset(PermissionBrokerClient::Create()); | 104 permission_broker_client_.reset(PermissionBrokerClient::Create()); |
112 power_manager_client_.reset( | 105 power_manager_client_.reset(PowerManagerClient::Create(type)); |
113 PowerManagerClient::Create(client_type_override)); | 106 session_manager_client_.reset(SessionManagerClient::Create(type)); |
114 session_manager_client_.reset(SessionManagerClient::Create(client_type)); | |
115 sms_client_.reset(SMSClient::Create()); | 107 sms_client_.reset(SMSClient::Create()); |
116 system_clock_client_.reset(SystemClockClient::Create()); | 108 system_clock_client_.reset(SystemClockClient::Create()); |
117 update_engine_client_.reset(UpdateEngineClient::Create(client_type)); | 109 update_engine_client_.reset(UpdateEngineClient::Create(type)); |
118 } | 110 } |
119 | 111 |
120 BluetoothAdapterClient* bluetooth_adapter_client() { | 112 BluetoothAdapterClient* bluetooth_adapter_client() { |
121 return bluetooth_adapter_client_.get(); | 113 return bluetooth_adapter_client_.get(); |
122 } | 114 } |
123 BluetoothAgentManagerClient* bluetooth_agent_manager_client() { | 115 BluetoothAgentManagerClient* bluetooth_agent_manager_client() { |
124 return bluetooth_agent_manager_client_.get(); | 116 return bluetooth_agent_manager_client_.get(); |
125 } | 117 } |
126 BluetoothDeviceClient* bluetooth_device_client() { | 118 BluetoothDeviceClient* bluetooth_device_client() { |
127 return bluetooth_device_client_.get(); | 119 return bluetooth_device_client_.get(); |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
482 // If we initialize DBusThreadManager twice we may also be shutting it down | 474 // If we initialize DBusThreadManager twice we may also be shutting it down |
483 // early; do not allow that. | 475 // early; do not allow that. |
484 CHECK(g_dbus_thread_manager == NULL); | 476 CHECK(g_dbus_thread_manager == NULL); |
485 | 477 |
486 if (g_dbus_thread_manager_for_testing) { | 478 if (g_dbus_thread_manager_for_testing) { |
487 g_dbus_thread_manager = g_dbus_thread_manager_for_testing; | 479 g_dbus_thread_manager = g_dbus_thread_manager_for_testing; |
488 InitializeClients(); | 480 InitializeClients(); |
489 VLOG(1) << "DBusThreadManager initialized with test implementation"; | 481 VLOG(1) << "DBusThreadManager initialized with test implementation"; |
490 return; | 482 return; |
491 } | 483 } |
| 484 |
492 // Determine whether we use stub or real client implementations. | 485 // Determine whether we use stub or real client implementations. |
493 if (base::SysInfo::IsRunningOnChromeOS()) { | 486 if (!base::SysInfo::IsRunningOnChromeOS() || |
| 487 CommandLine::ForCurrentProcess()->HasSwitch( |
| 488 chromeos::switches::kDbusStub)) { |
| 489 InitializeWithStub(); |
| 490 } else { |
494 g_dbus_thread_manager = new DBusThreadManagerImpl; | 491 g_dbus_thread_manager = new DBusThreadManagerImpl; |
495 InitializeClients(); | 492 InitializeClients(); |
496 VLOG(1) << "DBusThreadManager initialized for ChromeOS"; | 493 VLOG(1) << "DBusThreadManager initialized for Chrome OS"; |
497 } else { | |
498 InitializeWithStub(); | |
499 } | 494 } |
500 } | 495 } |
501 | 496 |
502 // static | 497 // static |
503 void DBusThreadManager::SetInstanceForTesting( | 498 void DBusThreadManager::SetInstanceForTesting( |
504 DBusThreadManager* dbus_thread_manager) { | 499 DBusThreadManager* dbus_thread_manager) { |
505 CHECK(!g_dbus_thread_manager); | 500 CHECK(!g_dbus_thread_manager); |
506 CHECK(!g_dbus_thread_manager_for_testing); | 501 CHECK(!g_dbus_thread_manager_for_testing); |
507 g_dbus_thread_manager_for_testing = dbus_thread_manager; | 502 g_dbus_thread_manager_for_testing = dbus_thread_manager; |
508 } | 503 } |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
624 g_dbus_thread_manager->GetSystemBus()->GetManagedObjects(); | 619 g_dbus_thread_manager->GetSystemBus()->GetManagedObjects(); |
625 } | 620 } |
626 | 621 |
627 // static | 622 // static |
628 void DBusThreadManager::InitClient(DBusClient* client) { | 623 void DBusThreadManager::InitClient(DBusClient* client) { |
629 if (client) | 624 if (client) |
630 client->Init(g_dbus_thread_manager->GetSystemBus()); | 625 client->Init(g_dbus_thread_manager->GetSystemBus()); |
631 } | 626 } |
632 | 627 |
633 } // namespace chromeos | 628 } // namespace chromeos |
OLD | NEW |