dbus_client_bundle.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/dbus_client_bundle.h"
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/command_line.h"
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/strings/string_split.h"
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/strings/string_util.h"
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/chromeos_switches.h"
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/bluetooth_adapter_client.h"
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/bluetooth_agent_manager_client.h"
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/bluetooth_device_client.h"
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/bluetooth_gatt_characteristic_client.h"
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/bluetooth_gatt_descriptor_client.h"
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/bluetooth_gatt_manager_client.h"
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/bluetooth_gatt_service_client.h"
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/bluetooth_input_client.h"
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/bluetooth_profile_manager_client.h"
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/cras_audio_client.h"
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/cras_audio_client_stub_impl.h"
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/cros_disks_client.h"
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/cryptohome_client.h"
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h"
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/debug_daemon_client.h"
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/easy_unlock_client.h"
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_bluetooth_adapter_client.h"
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_bluetooth_agent_manager_client.h"
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_bluetooth_device_client.h"
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_bluetooth_gatt_characteristic_client.h"
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_bluetooth_gatt_descriptor_client.h"
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_bluetooth_gatt_manager_client.h"
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_bluetooth_gatt_service_client.h"
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_bluetooth_input_client.h"
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_bluetooth_profile_manager_client.h"
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_cryptohome_client.h"
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_debug_daemon_client.h"
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_easy_unlock_client.h"
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_gsm_sms_client.h"
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_image_burner_client.h"
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_introspectable_client.h"
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_lorgnette_manager_client.h"
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_modem_messaging_client.h"
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_nfc_adapter_client.h"
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_nfc_device_client.h"
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_nfc_manager_client.h"
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_nfc_record_client.h"
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_nfc_tag_client.h"
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_permission_broker_client.h"
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_shill_device_client.h"
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_shill_ipconfig_client.h"
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_shill_manager_client.h"
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_shill_profile_client.h"
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_shill_service_client.h"
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_sms_client.h"
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/fake_system_clock_client.h"
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/gsm_sms_client.h"
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/image_burner_client.h"
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/introspectable_client.h"
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/lorgnette_manager_client.h"
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/modem_messaging_client.h"
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/nfc_adapter_client.h"
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/nfc_device_client.h"
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/nfc_manager_client.h"
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/nfc_record_client.h"
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/nfc_tag_client.h"
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/permission_broker_client.h"
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/power_manager_client.h"
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/power_policy_controller.h"
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/session_manager_client.h"
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/shill_device_client.h"
726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/shill_ipconfig_client.h"
736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/shill_manager_client.h"
746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/shill_profile_client.h"
756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/shill_service_client.h"
766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/sms_client.h"
776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/system_clock_client.h"
786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/update_engine_client.h"
796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace chromeos {
816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace {
836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Command line switch mapping for --dbus-unstub-clients.
856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const struct {
866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const char* param_name;
876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DBusClientBundle::DBusClientType client_type;
886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} client_type_map[] = {
896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "bluetooth",  DBusClientBundle::BLUETOOTH },
906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "cras",  DBusClientBundle::CRAS },
916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "cros_disks",  DBusClientBundle::CROS_DISKS },
926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "cryptohome",  DBusClientBundle::CRYPTOHOME },
936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "debug_daemon",  DBusClientBundle::DEBUG_DAEMON },
946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "easy_unlock",  DBusClientBundle::EASY_UNLOCK },
956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "lorgnette_manager",  DBusClientBundle::LORGNETTE_MANAGER },
966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "shill",  DBusClientBundle::SHILL },
976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "gsm_sms",  DBusClientBundle::GSM_SMS },
986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "image_burner",  DBusClientBundle::IMAGE_BURNER },
996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "introspectable",  DBusClientBundle::INTROSPECTABLE },
1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "modem_messaging",  DBusClientBundle::MODEM_MESSAGING },
1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "nfc",  DBusClientBundle::NFC },
1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "permission_broker",  DBusClientBundle::PERMISSION_BROKER },
1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "power_manager",  DBusClientBundle::POWER_MANAGER },
1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "session_manager",  DBusClientBundle::SESSION_MANAGER },
1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "sms",  DBusClientBundle::SMS },
1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "system_clock",  DBusClientBundle::SYSTEM_CLOCK },
1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "update_engine",  DBusClientBundle::UPDATE_ENGINE },
1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Parses single command line param value for dbus subsystem and returns its
1116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// enum representation. DBusClientType::UNKWNOWN is returned if |client_type|
1126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// does not match any known dbus client.
1136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)DBusClientBundle::DBusClientType GetDBusClientType(
1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    const std::string& client_type) {
1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  for (size_t i = 0; i < arraysize(client_type_map); i++) {
1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    if (LowerCaseEqualsASCII(client_type, client_type_map[i].param_name))
1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return client_type_map[i].client_type;
1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return DBusClientBundle::NO_CLIENTS;
1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace
1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)DBusClientBundle::DBusClientBundle() {
1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(BLUETOOTH)) {
1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_adapter_client_.reset(BluetoothAdapterClient::Create());
1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_agent_manager_client_.reset(
1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        BluetoothAgentManagerClient::Create());
1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_device_client_.reset(BluetoothDeviceClient::Create());
1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_input_client_.reset(BluetoothInputClient::Create());
1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_profile_manager_client_.reset(
1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        BluetoothProfileManagerClient::Create());
1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_gatt_characteristic_client_.reset(
1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        BluetoothGattCharacteristicClient::Create());
1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_gatt_descriptor_client_.reset(
1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        BluetoothGattDescriptorClient::Create());
1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_gatt_manager_client_.reset(
1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        BluetoothGattManagerClient::Create());
1396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_gatt_service_client_.reset(
1406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        BluetoothGattServiceClient::Create());
1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  } else {
1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_adapter_client_.reset(new FakeBluetoothAdapterClient);
1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_agent_manager_client_.reset(new FakeBluetoothAgentManagerClient);
1446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_device_client_.reset(new FakeBluetoothDeviceClient);
1456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_input_client_.reset(new FakeBluetoothInputClient);
1466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_profile_manager_client_.reset(
1476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        new FakeBluetoothProfileManagerClient);
1486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_gatt_characteristic_client_.reset(
1496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        new FakeBluetoothGattCharacteristicClient);
1506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_gatt_descriptor_client_.reset(
1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        new FakeBluetoothGattDescriptorClient);
1526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_gatt_manager_client_.reset(new FakeBluetoothGattManagerClient);
1536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    bluetooth_gatt_service_client_.reset(new FakeBluetoothGattServiceClient);
1546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
1556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(CRAS))
1576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    cras_audio_client_.reset(CrasAudioClient::Create());
1586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  else
1596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    cras_audio_client_.reset(new CrasAudioClientStubImpl);
1606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  cros_disks_client_.reset(CrosDisksClient::Create(
1626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      DBusThreadManager::IsUsingStub(CROS_DISKS) ?
1636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          STUB_DBUS_CLIENT_IMPLEMENTATION :
1646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          REAL_DBUS_CLIENT_IMPLEMENTATION));
1656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(CRYPTOHOME))
1676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    cryptohome_client_.reset(CryptohomeClient::Create());
1686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  else
1696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    cryptohome_client_.reset(new FakeCryptohomeClient);
1706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(DEBUG_DAEMON))
1726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    debug_daemon_client_.reset(DebugDaemonClient::Create());
1736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  else
1746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    debug_daemon_client_.reset(new FakeDebugDaemonClient);
1756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(EASY_UNLOCK))
1776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    easy_unlock_client_.reset(EasyUnlockClient::Create());
1786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  else
1796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    easy_unlock_client_.reset(new FakeEasyUnlockClient);
1806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(LORGNETTE_MANAGER))
1826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    lorgnette_manager_client_.reset(LorgnetteManagerClient::Create());
1836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  else
1846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    lorgnette_manager_client_.reset(new FakeLorgnetteManagerClient);
1856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(SHILL)) {
1876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    shill_manager_client_.reset(ShillManagerClient::Create());
1886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    shill_device_client_.reset(ShillDeviceClient::Create());
1896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    shill_ipconfig_client_.reset(ShillIPConfigClient::Create());
1906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    shill_service_client_.reset(ShillServiceClient::Create());
1916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    shill_profile_client_.reset(ShillProfileClient::Create());
1926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  } else {
1936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    shill_manager_client_.reset(new FakeShillManagerClient);
1946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    shill_device_client_.reset(new FakeShillDeviceClient);
1956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    shill_ipconfig_client_.reset(new FakeShillIPConfigClient);
1966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    shill_service_client_.reset(new FakeShillServiceClient);
1976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    shill_profile_client_.reset(new FakeShillProfileClient);
1986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
1996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(GSM_SMS)) {
2016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    gsm_sms_client_.reset(GsmSMSClient::Create());
2026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  } else {
2036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    FakeGsmSMSClient* gsm_sms_client = new FakeGsmSMSClient();
2046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    gsm_sms_client->set_sms_test_message_switch_present(
2056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        CommandLine::ForCurrentProcess()->HasSwitch(
2066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            chromeos::switches::kSmsTestMessages));
2076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    gsm_sms_client_.reset(gsm_sms_client);
2086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
2096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(IMAGE_BURNER))
2116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    image_burner_client_.reset(ImageBurnerClient::Create());
2126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  else
2136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    image_burner_client_.reset(new FakeImageBurnerClient);
2146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(INTROSPECTABLE))
2166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    introspectable_client_.reset(IntrospectableClient::Create());
2176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  else
2186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    introspectable_client_.reset(new FakeIntrospectableClient);
2196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(MODEM_MESSAGING))
2216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    modem_messaging_client_.reset(ModemMessagingClient::Create());
2226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  else
2236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    modem_messaging_client_.reset(ModemMessagingClient::Create());
2246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Create the NFC clients in the correct order based on their dependencies.
2266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(NFC)) {
2276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    nfc_manager_client_.reset(NfcManagerClient::Create());
2286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    nfc_adapter_client_.reset(
2296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        NfcAdapterClient::Create(nfc_manager_client_.get()));
2306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    nfc_device_client_.reset(
2316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        NfcDeviceClient::Create(nfc_adapter_client_.get()));
2326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    nfc_tag_client_.reset(NfcTagClient::Create(nfc_adapter_client_.get()));
2336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    nfc_record_client_.reset(NfcRecordClient::Create(nfc_device_client_.get(),
2346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                                     nfc_tag_client_.get()));
2356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  } else {
2366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    nfc_manager_client_.reset(new FakeNfcManagerClient);
2376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    nfc_adapter_client_.reset(new FakeNfcAdapterClient);
2386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    nfc_device_client_.reset(new FakeNfcDeviceClient);
2396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    nfc_tag_client_.reset(new FakeNfcTagClient);
2406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    nfc_record_client_.reset(new FakeNfcRecordClient);
2416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
2426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(PERMISSION_BROKER))
2446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    permission_broker_client_.reset(PermissionBrokerClient::Create());
2456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  else
2466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    permission_broker_client_.reset(new FakePermissionBrokerClient);
2476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  power_manager_client_.reset(PowerManagerClient::Create(
2496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      DBusThreadManager::IsUsingStub(CROS_DISKS) ?
2506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          STUB_DBUS_CLIENT_IMPLEMENTATION :
2516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          REAL_DBUS_CLIENT_IMPLEMENTATION));
2526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  session_manager_client_.reset(SessionManagerClient::Create(
2546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      DBusThreadManager::IsUsingStub(CROS_DISKS) ?
2556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          STUB_DBUS_CLIENT_IMPLEMENTATION :
2566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          REAL_DBUS_CLIENT_IMPLEMENTATION));
2576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(SMS))
2596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    sms_client_.reset(SMSClient::Create());
2606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  else
2616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    sms_client_.reset(new FakeSMSClient);
2626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (!DBusThreadManager::IsUsingStub(SYSTEM_CLOCK))
2646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    system_clock_client_.reset(SystemClockClient::Create());
2656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  else
2666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    system_clock_client_.reset(new FakeSystemClockClient);
2676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  update_engine_client_.reset(UpdateEngineClient::Create(
2696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      DBusThreadManager::IsUsingStub(CROS_DISKS) ?
2706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          STUB_DBUS_CLIENT_IMPLEMENTATION :
2716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          REAL_DBUS_CLIENT_IMPLEMENTATION));
2726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
2736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)DBusClientBundle::~DBusClientBundle() {
2756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
2766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void DBusClientBundle::SetupDefaultEnvironment() {
2786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ShillManagerClient::TestInterface* manager =
2796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      shill_manager_client_->GetTestInterface();
2806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (manager)
2816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    manager->SetupDefaultEnvironment();
2826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
2836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// static
2856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)DBusClientBundle::DBusClientTypeMask DBusClientBundle::ParseUnstubList(
2866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    const std::string& unstub_list) {
2876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DBusClientTypeMask unstub_mask = 0;
2886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  std::vector<std::string> unstub_components;
2896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::SplitString(unstub_list, ',', &unstub_components);
2906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  for (std::vector<std::string>::const_iterator iter =
2916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          unstub_components.begin();
2926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)       iter != unstub_components.end(); ++iter) {
2936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    DBusClientBundle::DBusClientType client = GetDBusClientType(*iter);
2946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    if (client != DBusClientBundle::NO_CLIENTS) {
2956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      LOG(WARNING) << "Unstubbing dbus client for " << *iter;
2966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      unstub_mask |= client;
2976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    } else {
2986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      LOG(ERROR) << "Unknown dbus client: " << *iter;
2996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
3006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
3016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
3026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return unstub_mask;
3036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
3046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
3056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace chromeos
306