15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/sys_info.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/thread.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/chromeos_switches.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chromeos/dbus/bluetooth_adapter_client.h"
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chromeos/dbus/bluetooth_agent_manager_client.h"
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chromeos/dbus/bluetooth_device_client.h"
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chromeos/dbus/bluetooth_gatt_characteristic_client.h"
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chromeos/dbus/bluetooth_gatt_descriptor_client.h"
16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chromeos/dbus/bluetooth_gatt_manager_client.h"
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chromeos/dbus/bluetooth_gatt_service_client.h"
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chromeos/dbus/bluetooth_input_client.h"
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chromeos/dbus/bluetooth_profile_manager_client.h"
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/dbus/cras_audio_client.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/cros_disks_client.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/cryptohome_client.h"
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chromeos/dbus/dbus_client.h"
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/dbus_client_bundle.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/debug_daemon_client.h"
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chromeos/dbus/easy_unlock_client.h"
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/dbus/gsm_sms_client.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/image_burner_client.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/introspectable_client.h"
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chromeos/dbus/lorgnette_manager_client.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/modem_messaging_client.h"
321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chromeos/dbus/nfc_adapter_client.h"
330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chromeos/dbus/nfc_device_client.h"
341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chromeos/dbus/nfc_manager_client.h"
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chromeos/dbus/nfc_record_client.h"
360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chromeos/dbus/nfc_tag_client.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/permission_broker_client.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/power_manager_client.h"
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/dbus/power_policy_controller.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/session_manager_client.h"
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/dbus/shill_device_client.h"
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/dbus/shill_ipconfig_client.h"
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/dbus/shill_manager_client.h"
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/dbus/shill_profile_client.h"
4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/dbus/shill_service_client.h"
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/sms_client.h"
4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/dbus/system_clock_client.h"
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/update_engine_client.h"
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/bus.h"
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dbus/dbus_statistics.h"
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static DBusThreadManager* g_dbus_thread_manager = NULL;
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistatic bool g_using_dbus_thread_manager_for_testing = false;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::DBusThreadManager(scoped_ptr<DBusClientBundle> client_bundle)
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : client_bundle_(client_bundle.Pass()) {
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  dbus::statistics::Initialize();
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (client_bundle_->IsUsingAnyRealClient()) {
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // At least one real DBusClient is used.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Create the D-Bus thread.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Thread::Options thread_options;
65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    thread_options.message_loop_type = base::MessageLoop::TYPE_IO;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dbus_thread_.reset(new base::Thread("D-Bus thread"));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dbus_thread_->StartWithOptions(thread_options);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Create the connection to the system bus.
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dbus::Bus::Options system_bus_options;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    system_bus_options.bus_type = dbus::Bus::SYSTEM;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    system_bus_options.connection_type = dbus::Bus::PRIVATE;
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    system_bus_options.dbus_task_runner = dbus_thread_->message_loop_proxy();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    system_bus_ = new dbus::Bus(system_bus_options);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // TODO(crbug.com/345586): Move PowerPolicyController out of
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // DBusThreadManager.
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  power_policy_controller_.reset(new PowerPolicyController);
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::~DBusThreadManager() {
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // PowerPolicyController's destructor depends on PowerManagerClient.
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  power_policy_controller_.reset();
85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Delete all D-Bus clients before shutting down the system bus.
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  client_bundle_.reset();
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Shut down the bus. During the browser shutdown, it's ok to shut down
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // the bus synchronously.
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (system_bus_.get())
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    system_bus_->ShutdownOnDBusThreadAndBlock();
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Stop the D-Bus thread.
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (dbus_thread_)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dbus_thread_->Stop();
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  dbus::statistics::Shutdown();
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!g_dbus_thread_manager)
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return;  // Called form Shutdown() or local test instance.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // There should never be both a global instance and a local instance.
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CHECK(this == g_dbus_thread_manager);
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (g_using_dbus_thread_manager_for_testing) {
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    g_dbus_thread_manager = NULL;
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    g_using_dbus_thread_manager_for_testing = false;
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    VLOG(1) << "DBusThreadManager destroyed";
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  } else {
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    LOG(FATAL) << "~DBusThreadManager() called outside of Shutdown()";
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccidbus::Bus* DBusThreadManager::GetSystemBus() {
1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return system_bus_.get();
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciBluetoothAdapterClient* DBusThreadManager::GetBluetoothAdapterClient() {
1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->bluetooth_adapter_client();
1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciBluetoothAgentManagerClient*
1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::GetBluetoothAgentManagerClient() {
1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->bluetooth_agent_manager_client();
1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
126effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciBluetoothDeviceClient* DBusThreadManager::GetBluetoothDeviceClient() {
1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->bluetooth_device_client();
1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
130effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciBluetoothGattCharacteristicClient*
1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::GetBluetoothGattCharacteristicClient() {
1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->bluetooth_gatt_characteristic_client();
1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
135e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciBluetoothGattDescriptorClient*
1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::GetBluetoothGattDescriptorClient() {
1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->bluetooth_gatt_descriptor_client();
1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
140effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciBluetoothGattManagerClient*
1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::GetBluetoothGattManagerClient() {
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->bluetooth_gatt_manager_client();
1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciBluetoothGattServiceClient*
1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::GetBluetoothGattServiceClient() {
1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->bluetooth_gatt_service_client();
1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciBluetoothInputClient* DBusThreadManager::GetBluetoothInputClient() {
1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->bluetooth_input_client();
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciBluetoothProfileManagerClient*
1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::GetBluetoothProfileManagerClient() {
1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->bluetooth_profile_manager_client();
1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciCrasAudioClient* DBusThreadManager::GetCrasAudioClient() {
1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->cras_audio_client();
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciCrosDisksClient* DBusThreadManager::GetCrosDisksClient() {
1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->cros_disks_client();
1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciCryptohomeClient* DBusThreadManager::GetCryptohomeClient() {
1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->cryptohome_client();
1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDebugDaemonClient* DBusThreadManager::GetDebugDaemonClient() {
1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->debug_daemon_client();
1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEasyUnlockClient* DBusThreadManager::GetEasyUnlockClient() {
1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->easy_unlock_client();
1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciLorgnetteManagerClient*
1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::GetLorgnetteManagerClient() {
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->lorgnette_manager_client();
1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciShillDeviceClient*
1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::GetShillDeviceClient() {
1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->shill_device_client();
1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciShillIPConfigClient*
1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::GetShillIPConfigClient() {
1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->shill_ipconfig_client();
1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciShillManagerClient*
1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::GetShillManagerClient() {
1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->shill_manager_client();
1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciShillServiceClient*
2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::GetShillServiceClient() {
2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->shill_service_client();
2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciShillProfileClient*
2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManager::GetShillProfileClient() {
2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->shill_profile_client();
2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciGsmSMSClient* DBusThreadManager::GetGsmSMSClient() {
2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->gsm_sms_client();
2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciImageBurnerClient* DBusThreadManager::GetImageBurnerClient() {
2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->image_burner_client();
2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIntrospectableClient* DBusThreadManager::GetIntrospectableClient() {
2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->introspectable_client();
2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciModemMessagingClient* DBusThreadManager::GetModemMessagingClient() {
2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->modem_messaging_client();
2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciNfcAdapterClient* DBusThreadManager::GetNfcAdapterClient() {
2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->nfc_adapter_client();
2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciNfcDeviceClient* DBusThreadManager::GetNfcDeviceClient() {
2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->nfc_device_client();
2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciNfcManagerClient* DBusThreadManager::GetNfcManagerClient() {
2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->nfc_manager_client();
2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciNfcRecordClient* DBusThreadManager::GetNfcRecordClient() {
2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->nfc_record_client();
2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciNfcTagClient* DBusThreadManager::GetNfcTagClient() {
2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->nfc_tag_client();
2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciPermissionBrokerClient* DBusThreadManager::GetPermissionBrokerClient() {
2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->permission_broker_client();
2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciPowerManagerClient* DBusThreadManager::GetPowerManagerClient() {
2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->power_manager_client();
2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciSessionManagerClient* DBusThreadManager::GetSessionManagerClient() {
2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->session_manager_client();
2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciSMSClient* DBusThreadManager::GetSMSClient() {
2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->sms_client();
2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
260a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciSystemClockClient* DBusThreadManager::GetSystemClockClient() {
2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->system_clock_client();
2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciUpdateEngineClient* DBusThreadManager::GetUpdateEngineClient() {
2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->update_engine_client();
2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciPowerPolicyController* DBusThreadManager::GetPowerPolicyController() {
2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return power_policy_controller_.get();
2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManager::InitializeClients() {
2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetBluetoothAdapterClient()->Init(GetSystemBus());
2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetBluetoothAgentManagerClient()->Init(GetSystemBus());
2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetBluetoothDeviceClient()->Init(GetSystemBus());
2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetBluetoothGattCharacteristicClient()->Init(GetSystemBus());
2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetBluetoothGattDescriptorClient()->Init(GetSystemBus());
2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetBluetoothGattManagerClient()->Init(GetSystemBus());
2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetBluetoothGattServiceClient()->Init(GetSystemBus());
2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetBluetoothInputClient()->Init(GetSystemBus());
2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetBluetoothProfileManagerClient()->Init(GetSystemBus());
2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetCrasAudioClient()->Init(GetSystemBus());
2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetCrosDisksClient()->Init(GetSystemBus());
2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetCryptohomeClient()->Init(GetSystemBus());
2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetDebugDaemonClient()->Init(GetSystemBus());
2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetEasyUnlockClient()->Init(GetSystemBus());
2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetGsmSMSClient()->Init(GetSystemBus());
2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetImageBurnerClient()->Init(GetSystemBus());
2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetIntrospectableClient()->Init(GetSystemBus());
2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetLorgnetteManagerClient()->Init(GetSystemBus());
2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetModemMessagingClient()->Init(GetSystemBus());
2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetPermissionBrokerClient()->Init(GetSystemBus());
2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetPowerManagerClient()->Init(GetSystemBus());
2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetSessionManagerClient()->Init(GetSystemBus());
2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetShillDeviceClient()->Init(GetSystemBus());
2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetShillIPConfigClient()->Init(GetSystemBus());
2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetShillManagerClient()->Init(GetSystemBus());
2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetShillServiceClient()->Init(GetSystemBus());
3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetShillProfileClient()->Init(GetSystemBus());
3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetSMSClient()->Init(GetSystemBus());
3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetSystemClockClient()->Init(GetSystemBus());
3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetUpdateEngineClient()->Init(GetSystemBus());
3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Initialize the NFC clients in the correct order. The order of
3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // initialization matters due to dependencies that exist between the
3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // client objects.
3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetNfcManagerClient()->Init(GetSystemBus());
3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetNfcAdapterClient()->Init(GetSystemBus());
3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetNfcDeviceClient()->Init(GetSystemBus());
3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetNfcTagClient()->Init(GetSystemBus());
3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetNfcRecordClient()->Init(GetSystemBus());
3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // PowerPolicyController is dependent on PowerManagerClient, so
3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // initialize it after the main list of clients.
3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (GetPowerPolicyController())
3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    GetPowerPolicyController()->Init(this);
3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // This must be called after the list of clients so they've each had a
3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // chance to register with their object g_dbus_thread_managers.
3211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (GetSystemBus())
3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    GetSystemBus()->GetManagedObjects();
3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  client_bundle_->SetupDefaultEnvironment();
3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool DBusThreadManager::IsUsingStub(DBusClientBundle::DBusClientType client) {
3281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_bundle_->IsUsingStub(client);
3296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
3306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
3316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// static
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DBusThreadManager::Initialize() {
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If we initialize DBusThreadManager twice we may also be shutting it down
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // early; do not allow that.
3351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (g_using_dbus_thread_manager_for_testing)
336a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return;
337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CHECK(!g_dbus_thread_manager);
3396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bool use_dbus_stub = !base::SysInfo::IsRunningOnChromeOS() ||
340cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      CommandLine::ForCurrentProcess()->HasSwitch(
3416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          chromeos::switches::kDbusStub);
3426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bool force_unstub_clients = CommandLine::ForCurrentProcess()->HasSwitch(
3436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      chromeos::switches::kDbusUnstubClients);
3446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Determine whether we use stub or real client implementations.
3456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (force_unstub_clients) {
3466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    InitializeWithPartialStub(
3476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
3486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            chromeos::switches::kDbusUnstubClients));
3496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  } else if (use_dbus_stub) {
3501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    InitializeWithStubs();
351cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  } else {
3521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    InitializeWithRealClients();
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
3571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_ptr<DBusThreadManagerSetter> DBusThreadManager::GetSetterForTesting() {
3581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!g_using_dbus_thread_manager_for_testing) {
3591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    g_using_dbus_thread_manager_for_testing = true;
3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    InitializeWithStubs();
3611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
3621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return make_scoped_ptr(new DBusThreadManagerSetter());
364a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
365a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
366a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// static
3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManager::CreateGlobalInstance(
3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    DBusClientBundle::DBusClientTypeMask unstub_client_mask) {
3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CHECK(!g_dbus_thread_manager);
3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  g_dbus_thread_manager = new DBusThreadManager(
3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      make_scoped_ptr(new DBusClientBundle(unstub_client_mask)));
3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  g_dbus_thread_manager->InitializeClients();
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManager::InitializeWithRealClients() {
3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CreateGlobalInstance(~static_cast<DBusClientBundle::DBusClientTypeMask>(0));
3786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  VLOG(1) << "DBusThreadManager initialized for Chrome OS";
3796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
3806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
3816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// static
3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManager::InitializeWithStubs() {
3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CreateGlobalInstance(0 /* unstub_client_mask */);
3841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  VLOG(1) << "DBusThreadManager created for testing";
3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static
3886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void DBusThreadManager::InitializeWithPartialStub(
3896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    const std::string& unstub_clients) {
3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusClientBundle::DBusClientTypeMask unstub_client_mask =
3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      DBusClientBundle::ParseUnstubList(unstub_clients);
3926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // We should have something parsed correctly here.
3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  LOG_IF(FATAL, unstub_client_mask == 0)
3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      << "Switch values for --" << chromeos::switches::kDbusUnstubClients
3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      << " cannot be parsed: " << unstub_clients;
3966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  VLOG(1) << "DBusThreadManager initialized for mixed runtime environment";
3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CreateGlobalInstance(unstub_client_mask);
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool DBusThreadManager::IsInitialized() {
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return g_dbus_thread_manager != NULL;
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DBusThreadManager::Shutdown() {
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ensure that we only shutdown DBusThreadManager once.
4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CHECK(g_dbus_thread_manager);
409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DBusThreadManager* dbus_thread_manager = g_dbus_thread_manager;
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  g_dbus_thread_manager = NULL;
4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  g_using_dbus_thread_manager_for_testing = false;
412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  delete dbus_thread_manager;
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VLOG(1) << "DBusThreadManager Shutdown completed";
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DBusThreadManager* DBusThreadManager::Get() {
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(g_dbus_thread_manager)
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "DBusThreadManager::Get() called before Initialize()";
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return g_dbus_thread_manager;
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManagerSetter::DBusThreadManagerSetter() {
4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
425f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
4261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDBusThreadManagerSetter::~DBusThreadManagerSetter() {
4271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
428a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetBluetoothAdapterClient(
4301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<BluetoothAdapterClient> client) {
4311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->bluetooth_adapter_client_ =
4321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
4331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
4351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetBluetoothAgentManagerClient(
4361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<BluetoothAgentManagerClient> client) {
4371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->bluetooth_agent_manager_client_ =
4381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
439f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
440f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
4411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetBluetoothDeviceClient(
4421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<BluetoothDeviceClient> client) {
4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->bluetooth_device_client_ =
4441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
4451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetBluetoothGattCharacteristicClient(
4481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<BluetoothGattCharacteristicClient> client) {
4491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->
4501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      bluetooth_gatt_characteristic_client_ = client.Pass();
4511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetBluetoothGattDescriptorClient(
4541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<BluetoothGattDescriptorClient> client) {
4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->bluetooth_gatt_descriptor_client_ =
4561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
4571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetBluetoothGattManagerClient(
4601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<BluetoothGattManagerClient> client) {
4611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->bluetooth_gatt_manager_client_ =
4621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
4631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetBluetoothGattServiceClient(
4661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<BluetoothGattServiceClient> client) {
4671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->bluetooth_gatt_service_client_ =
4681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
4691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetBluetoothInputClient(
4721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<BluetoothInputClient> client) {
4731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->bluetooth_input_client_ =
4741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
4751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetBluetoothProfileManagerClient(
4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<BluetoothProfileManagerClient> client) {
4791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->bluetooth_profile_manager_client_ =
4801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
4811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetCrasAudioClient(
4841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<CrasAudioClient> client) {
4851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->cras_audio_client_ = client.Pass();
4861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetCrosDisksClient(
4891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<CrosDisksClient> client) {
4901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->cros_disks_client_ = client.Pass();
4911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetCryptohomeClient(
4941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<CryptohomeClient> client) {
4951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->cryptohome_client_ = client.Pass();
4961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetDebugDaemonClient(
4991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<DebugDaemonClient> client) {
5001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->debug_daemon_client_ =
5011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
5021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetEasyUnlockClient(
5051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<EasyUnlockClient> client) {
5061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->easy_unlock_client_ = client.Pass();
5071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetLorgnetteManagerClient(
5101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<LorgnetteManagerClient> client) {
5111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->lorgnette_manager_client_ =
5121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
5131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetShillDeviceClient(
5161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<ShillDeviceClient> client) {
5171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->shill_device_client_ =
5181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
5191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetShillIPConfigClient(
5221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<ShillIPConfigClient> client) {
5231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->shill_ipconfig_client_ =
5241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
5251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetShillManagerClient(
5281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<ShillManagerClient> client) {
5291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->shill_manager_client_ =
5301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
5311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetShillServiceClient(
5341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<ShillServiceClient> client) {
5351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->shill_service_client_ =
5361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
5371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetShillProfileClient(
5401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<ShillProfileClient> client) {
5411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->shill_profile_client_ =
5421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
5431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetGsmSMSClient(
5461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<GsmSMSClient> client) {
5471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->gsm_sms_client_ = client.Pass();
5481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetImageBurnerClient(
5511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<ImageBurnerClient> client) {
5521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->image_burner_client_ =
5531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
5541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetIntrospectableClient(
5571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<IntrospectableClient> client) {
5581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->introspectable_client_ =
5591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
5601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetModemMessagingClient(
5631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<ModemMessagingClient> client) {
5641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->modem_messaging_client_ =
5651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
5661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetNfcAdapterClient(
5691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<NfcAdapterClient> client) {
5701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->nfc_adapter_client_ = client.Pass();
5711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetNfcDeviceClient(
5741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<NfcDeviceClient> client) {
5751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->nfc_device_client_ = client.Pass();
5761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetNfcManagerClient(
5791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<NfcManagerClient> client) {
5801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->nfc_manager_client_ = client.Pass();
5811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetNfcRecordClient(
5841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<NfcRecordClient> client) {
5851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->nfc_record_client_ = client.Pass();
5861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetNfcTagClient(
5891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<NfcTagClient> client) {
5901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->nfc_tag_client_ = client.Pass();
5911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetPermissionBrokerClient(
5941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<PermissionBrokerClient> client) {
5951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->permission_broker_client_ =
5961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetPowerManagerClient(
6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<PowerManagerClient> client) {
6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->power_policy_controller_.reset();
6021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->power_manager_client_ =
6031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
6041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->power_policy_controller_.reset(
6051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      new PowerPolicyController);
6061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->power_policy_controller_->Init(
6071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      DBusThreadManager::Get());
6081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetSessionManagerClient(
6111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<SessionManagerClient> client) {
6121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->session_manager_client_ =
6131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
6141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetSMSClient(scoped_ptr<SMSClient> client) {
6171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->sms_client_ = client.Pass();
6181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetSystemClockClient(
6211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<SystemClockClient> client) {
6221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->system_clock_client_ =
6231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
6241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DBusThreadManagerSetter::SetUpdateEngineClient(
6271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    scoped_ptr<UpdateEngineClient> client) {
6281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DBusThreadManager::Get()->client_bundle_->update_engine_client_ =
6291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client.Pass();
630f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
631f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
633