diff options
author | rkc <rkc@chromium.org> | 2015-10-06 04:25:52 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-06 11:26:53 +0000 |
commit | c7eeff6a15962486725ac28b0ded7fd9296f1e77 (patch) | |
tree | 9658dfae6f757fab11e852a17427c43160399ad7 /chromeos/dbus/fake_bluetooth_gatt_characteristic_client.h | |
parent | 6a4640a83d99484907275aac3bec32c474cb6c63 (diff) | |
download | chromium_src-c7eeff6a15962486725ac28b0ded7fd9296f1e77.zip chromium_src-c7eeff6a15962486725ac28b0ded7fd9296f1e77.tar.gz chromium_src-c7eeff6a15962486725ac28b0ded7fd9296f1e77.tar.bz2 |
Revert "Refactor DBusThreadManager to split away BT clients."
This reverts commit 5d3c8959a7aee861b6750fd734cad96bd24e1f9f.
This commit is breaking the valgrind tests.
R=rkc@chromium.org
TBR=armansito@chromium.org, stevenjb@chromium.org, sky@chromium.org
BUG=None.
Review URL: https://codereview.chromium.org/1382923003
Cr-Commit-Position: refs/heads/master@{#352581}
Diffstat (limited to 'chromeos/dbus/fake_bluetooth_gatt_characteristic_client.h')
-rw-r--r-- | chromeos/dbus/fake_bluetooth_gatt_characteristic_client.h | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/chromeos/dbus/fake_bluetooth_gatt_characteristic_client.h b/chromeos/dbus/fake_bluetooth_gatt_characteristic_client.h new file mode 100644 index 0000000..dc1eab3 --- /dev/null +++ b/chromeos/dbus/fake_bluetooth_gatt_characteristic_client.h @@ -0,0 +1,194 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROMEOS_DBUS_FAKE_BLUETOOTH_GATT_CHARACTERISTIC_CLIENT_H_ +#define CHROMEOS_DBUS_FAKE_BLUETOOTH_GATT_CHARACTERISTIC_CLIENT_H_ + +#include <string> +#include <vector> + +#include "base/basictypes.h" +#include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" +#include "base/observer_list.h" +#include "chromeos/chromeos_export.h" +#include "chromeos/dbus/bluetooth_gatt_characteristic_client.h" +#include "dbus/object_path.h" +#include "dbus/property.h" + +namespace chromeos { + +// FakeBluetoothGattCharacteristicClient simulates the behavior of the +// Bluetooth Daemon GATT characteristic objects and is used in test cases in +// place of a mock and on the Linux desktop. +class CHROMEOS_EXPORT FakeBluetoothGattCharacteristicClient + : public BluetoothGattCharacteristicClient { + public: + struct Properties : public BluetoothGattCharacteristicClient::Properties { + explicit Properties(const PropertyChangedCallback& callback); + ~Properties() override; + + // dbus::PropertySet override + void Get(dbus::PropertyBase* property, + dbus::PropertySet::GetCallback callback) override; + void GetAll() override; + void Set(dbus::PropertyBase* property, + dbus::PropertySet::SetCallback callback) override; + }; + + FakeBluetoothGattCharacteristicClient(); + ~FakeBluetoothGattCharacteristicClient() override; + + // DBusClient override. + void Init(dbus::Bus* bus) override; + + // BluetoothGattCharacteristicClient overrides. + void AddObserver(Observer* observer) override; + void RemoveObserver(Observer* observer) override; + std::vector<dbus::ObjectPath> GetCharacteristics() override; + Properties* GetProperties(const dbus::ObjectPath& object_path) override; + void ReadValue(const dbus::ObjectPath& object_path, + const ValueCallback& callback, + const ErrorCallback& error_callback) override; + void WriteValue(const dbus::ObjectPath& object_path, + const std::vector<uint8>& value, + const base::Closure& callback, + const ErrorCallback& error_callback) override; + void StartNotify(const dbus::ObjectPath& object_path, + const base::Closure& callback, + const ErrorCallback& error_callback) override; + void StopNotify(const dbus::ObjectPath& object_path, + const base::Closure& callback, + const ErrorCallback& error_callback) override; + + // Makes the group of characteristics belonging to a particular GATT based + // profile available under the GATT service with object path |service_path|. + // Characteristic paths are hierarchical to service paths. + void ExposeHeartRateCharacteristics(const dbus::ObjectPath& service_path); + void HideHeartRateCharacteristics(); + + // Returns whether or not the heart rate characteristics are visible and + // performs the appropriate assertions. + bool IsHeartRateVisible() const; + + // Makes this characteristic client really slow. + // So slow, that it is guaranteed that |requests| requests will + // come in while the client is doing the previous request. + // Setting |requests| to zero will cause all delayed actions to + // complete immediately. + void SetExtraProcessing(size_t requests); + + size_t GetExtraProcessing() const; + + // Sets whether the client is authorized or not. + // Defaults to authorized. + void SetAuthorized(bool authorized) { authorized_ = authorized; } + + // Get the current Authorization state. + bool IsAuthorized() const { return authorized_; } + + // Whether the client is Authenticated + // Defaults to authenticated. + void SetAuthenticated(bool authenticated) { authenticated_ = authenticated; } + + // Get the current Authenticated state. + bool IsAuthenticated() const { return authenticated_; } + + // Returns the current object paths of exposed characteristics. If the + // characteristic is not visible, returns an invalid empty path. + dbus::ObjectPath GetHeartRateMeasurementPath() const; + dbus::ObjectPath GetBodySensorLocationPath() const; + dbus::ObjectPath GetHeartRateControlPointPath() const; + + // Object path components and UUIDs of GATT characteristics. + // Heart Rate Service: + static const char kHeartRateMeasurementPathComponent[]; + static const char kHeartRateMeasurementUUID[]; + static const char kBodySensorLocationPathComponent[]; + static const char kBodySensorLocationUUID[]; + static const char kHeartRateControlPointPathComponent[]; + static const char kHeartRateControlPointUUID[]; + + private: + // Property callback passed when we create Properties structures. + void OnPropertyChanged(const dbus::ObjectPath& object_path, + const std::string& property_name); + + // Notifies observers. + void NotifyCharacteristicAdded(const dbus::ObjectPath& object_path); + void NotifyCharacteristicRemoved(const dbus::ObjectPath& object_path); + + // Schedules a heart rate measurement value change, if the heart rate + // characteristics are visible. + void ScheduleHeartRateMeasurementValueChange(); + + // Returns a random Heart Rate Measurement value. All the fields of the value + // are populated according to the the fake behavior. The measurement value + // is a random value within a reasonable range. + std::vector<uint8> GetHeartRateMeasurementValue(); + + // Callback that executes a delayed ReadValue action by updating the + // appropriate "Value" property and invoking the ValueCallback. + void DelayedReadValueCallback(const dbus::ObjectPath& object_path, + const ValueCallback& callback, + const std::vector<uint8_t>& value); + + // If true, characteristics of the Heart Rate Service are visible. Use + // IsHeartRateVisible() to check the value. + bool heart_rate_visible_; + + // If true, the client is authorized to read and write. + bool authorized_; + + // If true, the client is authenticated. + bool authenticated_; + + // Total calories burned, used for the Heart Rate Measurement characteristic. + uint16 calories_burned_; + + // Static properties returned for simulated characteristics for the Heart + // Rate Service. These pointers are not NULL only if the characteristics are + // actually exposed. + scoped_ptr<Properties> heart_rate_measurement_properties_; + scoped_ptr<Properties> body_sensor_location_properties_; + scoped_ptr<Properties> heart_rate_control_point_properties_; + + // Object paths of the exposed characteristics. If a characteristic is not + // exposed, these will be empty. + std::string heart_rate_measurement_path_; + std::string heart_rate_measurement_ccc_desc_path_; + std::string body_sensor_location_path_; + std::string heart_rate_control_point_path_; + + // Number of extra requests that need to come in simulating slowness. + size_t extra_requests_; + + // Current countdowns for extra requests for various actions. + struct DelayedCallback { + public: + DelayedCallback(base::Closure callback, size_t delay); + ~DelayedCallback(); + + base::Closure callback_; + size_t delay_; + }; + + // Map of delayed callbacks. + std::map<std::string, DelayedCallback*> action_extra_requests_; + + // List of observers interested in event notifications from us. + base::ObserverList<Observer> observers_; + + // Weak pointer factory for generating 'this' pointers that might live longer + // than we do. + // Note: This should remain the last member so it'll be destroyed and + // invalidate its weak pointers before any other members are destroyed. + base::WeakPtrFactory<FakeBluetoothGattCharacteristicClient> weak_ptr_factory_; + + DISALLOW_COPY_AND_ASSIGN(FakeBluetoothGattCharacteristicClient); +}; + +} // namespace chromeos + +#endif // CHROMEOS_DBUS_FAKE_BLUETOOTH_GATT_CHARACTERISTIC_CLIENT_H_ |