Home | History | Annotate | Download | only in dbus
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROMEOS_DBUS_FAKE_BLUETOOTH_GATT_DESCRIPTOR_CLIENT_H_
      6 #define CHROMEOS_DBUS_FAKE_BLUETOOTH_GATT_DESCRIPTOR_CLIENT_H_
      7 
      8 #include <map>
      9 #include <string>
     10 
     11 #include "base/memory/weak_ptr.h"
     12 #include "base/observer_list.h"
     13 #include "chromeos/chromeos_export.h"
     14 #include "chromeos/dbus/bluetooth_gatt_descriptor_client.h"
     15 #include "dbus/object_path.h"
     16 
     17 namespace chromeos {
     18 
     19 // FakeBluetoothGattDescriptorClient simulates the behavior of the Bluetooth
     20 // Daemon GATT characteristic descriptor objects and is used in test cases in
     21 // place of a mock and on the Linux desktop.
     22 class CHROMEOS_EXPORT FakeBluetoothGattDescriptorClient
     23     : public BluetoothGattDescriptorClient {
     24  public:
     25   struct Properties : public BluetoothGattDescriptorClient::Properties {
     26     explicit Properties(const PropertyChangedCallback& callback);
     27     virtual ~Properties();
     28 
     29     // dbus::PropertySet override
     30     virtual void Get(dbus::PropertyBase* property,
     31                      dbus::PropertySet::GetCallback callback) OVERRIDE;
     32     virtual void GetAll() OVERRIDE;
     33     virtual void Set(dbus::PropertyBase* property,
     34                      dbus::PropertySet::SetCallback callback) OVERRIDE;
     35   };
     36 
     37   FakeBluetoothGattDescriptorClient();
     38   virtual ~FakeBluetoothGattDescriptorClient();
     39 
     40   // DBusClient override.
     41   virtual void Init(dbus::Bus* bus) OVERRIDE;
     42 
     43   // BluetoothGattDescriptorClient overrides.
     44   virtual void AddObserver(Observer* observer) OVERRIDE;
     45   virtual void RemoveObserver(Observer* observer) OVERRIDE;
     46   virtual std::vector<dbus::ObjectPath> GetDescriptors() OVERRIDE;
     47   virtual Properties* GetProperties(const dbus::ObjectPath& object_path)
     48       OVERRIDE;
     49   virtual void ReadValue(const dbus::ObjectPath& object_path,
     50                          const ValueCallback& callback,
     51                          const ErrorCallback& error_callback) OVERRIDE;
     52   virtual void WriteValue(const dbus::ObjectPath& object_path,
     53                           const std::vector<uint8>& value,
     54                           const base::Closure& callback,
     55                           const ErrorCallback& error_callback) OVERRIDE;
     56 
     57   // Makes the descriptor with the UUID |uuid| visible under the characteristic
     58   // with object path |characteristic_path|. Descriptor object paths are
     59   // hierarchical to their characteristics. |uuid| must belong to a descriptor
     60   // for which there is a constant defined below, otherwise this method has no
     61   // effect. Returns the object path of the created descriptor. In the no-op
     62   // case, returns an invalid path.
     63   dbus::ObjectPath ExposeDescriptor(const dbus::ObjectPath& characteristic_path,
     64                                     const std::string& uuid);
     65   void HideDescriptor(const dbus::ObjectPath& descriptor_path);
     66 
     67   // Object path components and UUIDs of GATT characteristic descriptors.
     68   static const char kClientCharacteristicConfigurationPathComponent[];
     69   static const char kClientCharacteristicConfigurationUUID[];
     70 
     71  private:
     72   // Property callback passed when we create Properties structures.
     73   void OnPropertyChanged(const dbus::ObjectPath& object_path,
     74                          const std::string& property_name);
     75 
     76   // Notifies observers.
     77   void NotifyDescriptorAdded(const dbus::ObjectPath& object_path);
     78   void NotifyDescriptorRemoved(const dbus::ObjectPath& object_path);
     79 
     80   // Mapping from object paths to Properties structures.
     81   struct DescriptorData {
     82     DescriptorData();
     83     ~DescriptorData();
     84 
     85     scoped_ptr<Properties> properties;
     86     std::vector<uint8> value;
     87   };
     88   typedef std::map<dbus::ObjectPath, DescriptorData*> PropertiesMap;
     89   PropertiesMap properties_;
     90 
     91   // List of observers interested in event notifications from us.
     92   ObserverList<Observer> observers_;
     93 
     94   // Weak pointer factory for generating 'this' pointers that might live longer
     95   // than we do.
     96   // Note: This should remain the last member so it'll be destroyed and
     97   // invalidate its weak pointers before any other members are destroyed.
     98   base::WeakPtrFactory<FakeBluetoothGattDescriptorClient>
     99       weak_ptr_factory_;
    100 
    101   DISALLOW_COPY_AND_ASSIGN(FakeBluetoothGattDescriptorClient);
    102 };
    103 
    104 }  // namespace chromeos
    105 
    106 #endif  // CHROMEOS_DBUS_FAKE_BLUETOOTH_GATT_DESCRIPTOR_CLIENT_H_
    107