Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chromeos / dbus / dbus_thread_manager.h
index c36ddc3..6a2856d 100644 (file)
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "chromeos/chromeos_export.h"
+#include "chromeos/dbus/dbus_client_bundle.h"
 
 namespace base {
 class Thread;
-};
+}  // namespace base
 
 namespace dbus {
 class Bus;
 class ObjectPath;
-};
+}  // namespace dbus
 
 namespace chromeos {
 
-class DBusThreadManagerObserver;
-
 // Style Note: Clients are sorted by names.
 class BluetoothAdapterClient;
 class BluetoothAgentManagerClient;
 class BluetoothDeviceClient;
+class BluetoothGattCharacteristicClient;
+class BluetoothGattDescriptorClient;
+class BluetoothGattManagerClient;
+class BluetoothGattServiceClient;
 class BluetoothInputClient;
 class BluetoothProfileManagerClient;
 class CrasAudioClient;
 class CrosDisksClient;
 class CryptohomeClient;
-class DBusClient;
+class DBusThreadManagerSetter;
 class DebugDaemonClient;
+class EasyUnlockClient;
 class GsmSMSClient;
 class ImageBurnerClient;
 class IntrospectableClient;
+class LorgnetteManagerClient;
 class ModemMessagingClient;
 class NfcAdapterClient;
 class NfcDeviceClient;
@@ -81,24 +86,14 @@ class CHROMEOS_EXPORT DBusThreadManager {
   // Sets the global instance. Must be called before any calls to Get().
   // We explicitly initialize and shut down the global object, rather than
   // making it a Singleton, to ensure clean startup and shutdown.
+  // This will initialize real or stub DBusClients depending on command-line
+  // arguments and whether this process runs in a ChromeOS environment.
   static void Initialize();
 
-  // Sets an alternative DBusThreadManager such as MockDBusThreadManager
-  // to be used in |Initialize()| for testing. Tests that call
-  // DBusThreadManager::Initialize() (such as browser_tests and
-  // interactive_ui_tests) should use this instead of calling
-  // |InitiailzeForTesting|.  The injected object will be owned by the
-  // internal pointer and deleted by Shutdown().
-  static void SetInstanceForTesting(DBusThreadManager* dbus_thread_manager);
-
-  // Similar to Initialize(), but injects an alternative
-  // DBusThreadManager using SetInstanceForTest first.  The injected
-  // object will be owned by the internal pointer and deleted by
-  // Shutdown().
-  static void InitializeForTesting(DBusThreadManager* dbus_thread_manager);
-
-  // Initialize with stub implementations for tests based on stubs.
-  static void InitializeWithStub();
+  // Returns a DBusThreadManagerSetter instance that allows tests to
+  // replace individual D-Bus clients with their own implementations.
+  // Also initializes the main DBusThreadManager for testing if necessary.
+  static scoped_ptr<DBusThreadManagerSetter> GetSetterForTesting();
 
   // Returns true if DBusThreadManager has been initialized. Call this to
   // avoid initializing + shutting down DBusThreadManager more than once.
@@ -110,63 +105,144 @@ class CHROMEOS_EXPORT DBusThreadManager {
   // Gets the global instance. Initialize() must be called first.
   static DBusThreadManager* Get();
 
-  // Adds or removes an observer.
-  virtual void AddObserver(DBusThreadManagerObserver* observer) = 0;
-  virtual void RemoveObserver(DBusThreadManagerObserver* observer) = 0;
+  // Returns true if |client| is stubbed.
+  bool IsUsingStub(DBusClientBundle::DBusClientType client);
 
   // Returns various D-Bus bus instances, owned by DBusThreadManager.
-  virtual dbus::Bus* GetSystemBus() = 0;
-
-  // All returned objects are owned by DBusThreadManager.  Do not cache these
-  // pointers and use them after DBusThreadManager has been shut down.
-  virtual BluetoothAdapterClient* GetBluetoothAdapterClient() = 0;
-  virtual BluetoothAgentManagerClient* GetBluetoothAgentManagerClient() = 0;
-  virtual BluetoothDeviceClient* GetBluetoothDeviceClient() = 0;
-  virtual BluetoothInputClient* GetBluetoothInputClient() = 0;
-  virtual BluetoothProfileManagerClient* GetBluetoothProfileManagerClient() = 0;
-  virtual CrasAudioClient* GetCrasAudioClient() = 0;
-  virtual CrosDisksClient* GetCrosDisksClient() = 0;
-  virtual CryptohomeClient* GetCryptohomeClient() = 0;
-  virtual DebugDaemonClient* GetDebugDaemonClient() = 0;
-  virtual GsmSMSClient* GetGsmSMSClient() = 0;
-  virtual ImageBurnerClient* GetImageBurnerClient() = 0;
-  virtual IntrospectableClient* GetIntrospectableClient() = 0;
-  virtual ModemMessagingClient* GetModemMessagingClient() = 0;
-  virtual NfcAdapterClient* GetNfcAdapterClient() = 0;
-  virtual NfcDeviceClient* GetNfcDeviceClient() = 0;
-  virtual NfcManagerClient* GetNfcManagerClient() = 0;
-  virtual NfcRecordClient* GetNfcRecordClient() = 0;
-  virtual NfcTagClient* GetNfcTagClient() = 0;
-  virtual PermissionBrokerClient* GetPermissionBrokerClient() = 0;
-  virtual PowerManagerClient* GetPowerManagerClient() = 0;
-  virtual PowerPolicyController* GetPowerPolicyController() = 0;
-  virtual SessionManagerClient* GetSessionManagerClient() = 0;
-  virtual ShillDeviceClient* GetShillDeviceClient() = 0;
-  virtual ShillIPConfigClient* GetShillIPConfigClient() = 0;
-  virtual ShillManagerClient* GetShillManagerClient() = 0;
-  virtual ShillServiceClient* GetShillServiceClient() = 0;
-  virtual ShillProfileClient* GetShillProfileClient() = 0;
-  virtual SMSClient* GetSMSClient() = 0;
-  virtual SystemClockClient* GetSystemClockClient() = 0;
-  virtual UpdateEngineClient* GetUpdateEngineClient() = 0;
-
-  virtual ~DBusThreadManager();
-
- protected:
-  DBusThreadManager();
+  dbus::Bus* GetSystemBus();
+
+  // All returned objects are owned by DBusThreadManager.  Do not use these
+  // pointers after DBusThreadManager has been shut down.
+  BluetoothAdapterClient* GetBluetoothAdapterClient();
+  BluetoothAgentManagerClient* GetBluetoothAgentManagerClient();
+  BluetoothDeviceClient* GetBluetoothDeviceClient();
+  BluetoothGattCharacteristicClient* GetBluetoothGattCharacteristicClient();
+  BluetoothGattDescriptorClient* GetBluetoothGattDescriptorClient();
+  BluetoothGattManagerClient* GetBluetoothGattManagerClient();
+  BluetoothGattServiceClient* GetBluetoothGattServiceClient();
+  BluetoothInputClient* GetBluetoothInputClient();
+  BluetoothProfileManagerClient* GetBluetoothProfileManagerClient();
+  CrasAudioClient* GetCrasAudioClient();
+  CrosDisksClient* GetCrosDisksClient();
+  CryptohomeClient* GetCryptohomeClient();
+  DebugDaemonClient* GetDebugDaemonClient();
+  EasyUnlockClient* GetEasyUnlockClient();
+  GsmSMSClient* GetGsmSMSClient();
+  ImageBurnerClient* GetImageBurnerClient();
+  IntrospectableClient* GetIntrospectableClient();
+  LorgnetteManagerClient* GetLorgnetteManagerClient();
+  ModemMessagingClient* GetModemMessagingClient();
+  NfcAdapterClient* GetNfcAdapterClient();
+  NfcDeviceClient* GetNfcDeviceClient();
+  NfcManagerClient* GetNfcManagerClient();
+  NfcRecordClient* GetNfcRecordClient();
+  NfcTagClient* GetNfcTagClient();
+  PermissionBrokerClient* GetPermissionBrokerClient();
+  PowerManagerClient* GetPowerManagerClient();
+  PowerPolicyController* GetPowerPolicyController();
+  SessionManagerClient* GetSessionManagerClient();
+  ShillDeviceClient* GetShillDeviceClient();
+  ShillIPConfigClient* GetShillIPConfigClient();
+  ShillManagerClient* GetShillManagerClient();
+  ShillServiceClient* GetShillServiceClient();
+  ShillProfileClient* GetShillProfileClient();
+  SMSClient* GetSMSClient();
+  SystemClockClient* GetSystemClockClient();
+  UpdateEngineClient* GetUpdateEngineClient();
 
  private:
-  // InitializeClients is called after g_dbus_thread_manager is set.
-  // NOTE: Clients that access other clients in their Init() must be
-  // initialized in the correct order.
-  static void InitializeClients();
+  friend class DBusThreadManagerSetter;
+
+  // Creates a new DBusThreadManager using the DBusClients set in
+  // |client_bundle|.
+  explicit DBusThreadManager(scoped_ptr<DBusClientBundle> client_bundle);
+  ~DBusThreadManager();
+
+  // Creates a global instance of DBusThreadManager with the real
+  // implementations for all clients that are listed in |unstub_client_mask| and
+  // stub implementations for all clients that are not included. Cannot be
+  // called more than once.
+  static void CreateGlobalInstance(
+      DBusClientBundle::DBusClientTypeMask unstub_client_mask);
+
+  // Initialize global thread manager instance with all real dbus client
+  // implementations.
+  static void InitializeWithRealClients();
+
+  // Initialize global thread manager instance with stubbed-out dbus clients
+  // implementation.
+  static void InitializeWithStubs();
 
-  // Initializes |client| with the |system_bus_|.
-  static void InitClient(DBusClient* client);
+  // Initialize with stub implementations for only certain clients that are
+  // not included in the comma-separated |unstub_clients| list.
+  static void InitializeWithPartialStub(const std::string& unstub_clients);
+
+  // Initializes all currently stored DBusClients with the system bus and
+  // performs additional setup.
+  void InitializeClients();
+
+  scoped_ptr<base::Thread> dbus_thread_;
+  scoped_refptr<dbus::Bus> system_bus_;
+  scoped_ptr<DBusClientBundle> client_bundle_;
+  scoped_ptr<PowerPolicyController> power_policy_controller_;
 
   DISALLOW_COPY_AND_ASSIGN(DBusThreadManager);
 };
 
+class CHROMEOS_EXPORT DBusThreadManagerSetter {
+ public:
+  ~DBusThreadManagerSetter();
+
+  void SetBluetoothAdapterClient(scoped_ptr<BluetoothAdapterClient> client);
+  void SetBluetoothAgentManagerClient(
+      scoped_ptr<BluetoothAgentManagerClient> client);
+  void SetBluetoothDeviceClient(scoped_ptr<BluetoothDeviceClient> client);
+  void SetBluetoothGattCharacteristicClient(
+      scoped_ptr<BluetoothGattCharacteristicClient> client);
+  void SetBluetoothGattDescriptorClient(
+      scoped_ptr<BluetoothGattDescriptorClient> client);
+  void SetBluetoothGattManagerClient(
+      scoped_ptr<BluetoothGattManagerClient> client);
+  void SetBluetoothGattServiceClient(
+      scoped_ptr<BluetoothGattServiceClient> client);
+  void SetBluetoothInputClient(scoped_ptr<BluetoothInputClient> client);
+  void SetBluetoothProfileManagerClient(
+      scoped_ptr<BluetoothProfileManagerClient> client);
+  void SetCrasAudioClient(scoped_ptr<CrasAudioClient> client);
+  void SetCrosDisksClient(scoped_ptr<CrosDisksClient> client);
+  void SetCryptohomeClient(scoped_ptr<CryptohomeClient> client);
+  void SetDebugDaemonClient(scoped_ptr<DebugDaemonClient> client);
+  void SetEasyUnlockClient(scoped_ptr<EasyUnlockClient> client);
+  void SetLorgnetteManagerClient(scoped_ptr<LorgnetteManagerClient> client);
+  void SetShillDeviceClient(scoped_ptr<ShillDeviceClient> client);
+  void SetShillIPConfigClient(scoped_ptr<ShillIPConfigClient> client);
+  void SetShillManagerClient(scoped_ptr<ShillManagerClient> client);
+  void SetShillServiceClient(scoped_ptr<ShillServiceClient> client);
+  void SetShillProfileClient(scoped_ptr<ShillProfileClient> client);
+  void SetGsmSMSClient(scoped_ptr<GsmSMSClient> client);
+  void SetImageBurnerClient(scoped_ptr<ImageBurnerClient> client);
+  void SetIntrospectableClient(scoped_ptr<IntrospectableClient> client);
+  void SetModemMessagingClient(scoped_ptr<ModemMessagingClient> client);
+  void SetNfcAdapterClient(scoped_ptr<NfcAdapterClient> client);
+  void SetNfcDeviceClient(scoped_ptr<NfcDeviceClient> client);
+  void SetNfcManagerClient(scoped_ptr<NfcManagerClient> client);
+  void SetNfcRecordClient(scoped_ptr<NfcRecordClient> client);
+  void SetNfcTagClient(scoped_ptr<NfcTagClient> client);
+  void SetPermissionBrokerClient(scoped_ptr<PermissionBrokerClient> client);
+  void SetPowerManagerClient(scoped_ptr<PowerManagerClient> client);
+  void SetSessionManagerClient(scoped_ptr<SessionManagerClient> client);
+  void SetSMSClient(scoped_ptr<SMSClient> client);
+  void SetSystemClockClient(scoped_ptr<SystemClockClient> client);
+  void SetUpdateEngineClient(scoped_ptr<UpdateEngineClient> client);
+
+ private:
+  friend class DBusThreadManager;
+
+  DBusThreadManagerSetter();
+
+  DISALLOW_COPY_AND_ASSIGN(DBusThreadManagerSetter);
+};
+
 }  // namespace chromeos
 
 #endif  // CHROMEOS_DBUS_DBUS_THREAD_MANAGER_H_