1 // Copyright (c) 2013 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.
5 #ifndef CHROMEOS_DBUS_FAKE_BLUETOOTH_DEVICE_CLIENT_H_
6 #define CHROMEOS_DBUS_FAKE_BLUETOOTH_DEVICE_CLIENT_H_
11 #include "base/bind.h"
12 #include "base/callback.h"
13 #include "base/observer_list.h"
14 #include "chromeos/chromeos_export.h"
15 #include "chromeos/dbus/bluetooth_agent_service_provider.h"
16 #include "chromeos/dbus/bluetooth_device_client.h"
17 #include "chromeos/dbus/bluetooth_profile_service_provider.h"
18 #include "dbus/object_path.h"
19 #include "dbus/property.h"
23 // FakeBluetoothDeviceClient simulates the behavior of the Bluetooth Daemon
24 // device objects and is used both in test cases in place of a mock and on
26 class CHROMEOS_EXPORT FakeBluetoothDeviceClient
27 : public BluetoothDeviceClient
{
29 struct Properties
: public BluetoothDeviceClient::Properties
{
30 explicit Properties(const PropertyChangedCallback
& callback
);
31 virtual ~Properties();
33 // dbus::PropertySet override
34 virtual void Get(dbus::PropertyBase
* property
,
35 dbus::PropertySet::GetCallback callback
) OVERRIDE
;
36 virtual void GetAll() OVERRIDE
;
37 virtual void Set(dbus::PropertyBase
* property
,
38 dbus::PropertySet::SetCallback callback
) OVERRIDE
;
41 FakeBluetoothDeviceClient();
42 virtual ~FakeBluetoothDeviceClient();
44 // BluetoothDeviceClient overrides
45 virtual void Init(dbus::Bus
* bus
) OVERRIDE
;
46 virtual void AddObserver(Observer
* observer
) OVERRIDE
;
47 virtual void RemoveObserver(Observer
* observer
) OVERRIDE
;
48 virtual std::vector
<dbus::ObjectPath
> GetDevicesForAdapter(
49 const dbus::ObjectPath
& adapter_path
) OVERRIDE
;
50 virtual Properties
* GetProperties(const dbus::ObjectPath
& object_path
)
52 virtual void Connect(const dbus::ObjectPath
& object_path
,
53 const base::Closure
& callback
,
54 const ErrorCallback
& error_callback
) OVERRIDE
;
55 virtual void Disconnect(const dbus::ObjectPath
& object_path
,
56 const base::Closure
& callback
,
57 const ErrorCallback
& error_callback
) OVERRIDE
;
58 virtual void ConnectProfile(const dbus::ObjectPath
& object_path
,
59 const std::string
& uuid
,
60 const base::Closure
& callback
,
61 const ErrorCallback
& error_callback
) OVERRIDE
;
62 virtual void DisconnectProfile(const dbus::ObjectPath
& object_path
,
63 const std::string
& uuid
,
64 const base::Closure
& callback
,
65 const ErrorCallback
& error_callback
) OVERRIDE
;
66 virtual void Pair(const dbus::ObjectPath
& object_path
,
67 const base::Closure
& callback
,
68 const ErrorCallback
& error_callback
) OVERRIDE
;
69 virtual void CancelPairing(const dbus::ObjectPath
& object_path
,
70 const base::Closure
& callback
,
71 const ErrorCallback
& error_callback
) OVERRIDE
;
73 void SetSimulationIntervalMs(int interval_ms
);
75 // Simulate discovery of devices for the given adapter.
76 void BeginDiscoverySimulation(const dbus::ObjectPath
& adapter_path
);
77 void EndDiscoverySimulation(const dbus::ObjectPath
& adapter_path
);
79 // Remove a device from the set we return for the given adapter.
80 void RemoveDevice(const dbus::ObjectPath
& adapter_path
,
81 const dbus::ObjectPath
& device_path
);
83 // Object paths, names, addresses and bluetooth classes of the devices
85 static const char kPairedDevicePath
[];
86 static const char kPairedDeviceName
[];
87 static const char kPairedDeviceAddress
[];
88 static const uint32 kPairedDeviceClass
;
90 static const char kAppleMousePath
[];
91 static const char kAppleMouseName
[];
92 static const char kAppleMouseAddress
[];
93 static const uint32 kAppleMouseClass
;
95 static const char kAppleKeyboardPath
[];
96 static const char kAppleKeyboardName
[];
97 static const char kAppleKeyboardAddress
[];
98 static const uint32 kAppleKeyboardClass
;
100 static const char kVanishingDevicePath
[];
101 static const char kVanishingDeviceName
[];
102 static const char kVanishingDeviceAddress
[];
103 static const uint32 kVanishingDeviceClass
;
105 static const char kMicrosoftMousePath
[];
106 static const char kMicrosoftMouseName
[];
107 static const char kMicrosoftMouseAddress
[];
108 static const uint32 kMicrosoftMouseClass
;
110 static const char kMotorolaKeyboardPath
[];
111 static const char kMotorolaKeyboardName
[];
112 static const char kMotorolaKeyboardAddress
[];
113 static const uint32 kMotorolaKeyboardClass
;
115 static const char kSonyHeadphonesPath
[];
116 static const char kSonyHeadphonesName
[];
117 static const char kSonyHeadphonesAddress
[];
118 static const uint32 kSonyHeadphonesClass
;
120 static const char kPhonePath
[];
121 static const char kPhoneName
[];
122 static const char kPhoneAddress
[];
123 static const uint32 kPhoneClass
;
125 static const char kWeirdDevicePath
[];
126 static const char kWeirdDeviceName
[];
127 static const char kWeirdDeviceAddress
[];
128 static const uint32 kWeirdDeviceClass
;
130 static const char kUnconnectableDevicePath
[];
131 static const char kUnconnectableDeviceName
[];
132 static const char kUnconnectableDeviceAddress
[];
133 static const uint32 kUnconnectableDeviceClass
;
135 static const char kUnpairableDevicePath
[];
136 static const char kUnpairableDeviceName
[];
137 static const char kUnpairableDeviceAddress
[];
138 static const uint32 kUnpairableDeviceClass
;
141 // Property callback passed when we create Properties* structures.
142 void OnPropertyChanged(const dbus::ObjectPath
& object_path
,
143 const std::string
& property_name
);
145 void DiscoverySimulationTimer();
147 void CompleteSimulatedPairing(
148 const dbus::ObjectPath
& object_path
,
149 const base::Closure
& callback
,
150 const ErrorCallback
& error_callback
);
151 void TimeoutSimulatedPairing(
152 const dbus::ObjectPath
& object_path
,
153 const ErrorCallback
& error_callback
);
154 void CancelSimulatedPairing(
155 const dbus::ObjectPath
& object_path
,
156 const ErrorCallback
& error_callback
);
157 void RejectSimulatedPairing(
158 const dbus::ObjectPath
& object_path
,
159 const ErrorCallback
& error_callback
);
160 void FailSimulatedPairing(
161 const dbus::ObjectPath
& object_path
,
162 const ErrorCallback
& error_callback
);
163 void AddInputDeviceIfNeeded(
164 const dbus::ObjectPath
& object_path
,
165 Properties
* properties
);
167 void PinCodeCallback(
168 const dbus::ObjectPath
& object_path
,
169 const base::Closure
& callback
,
170 const ErrorCallback
& error_callback
,
171 BluetoothAgentServiceProvider::Delegate::Status status
,
172 const std::string
& pincode
);
173 void PasskeyCallback(
174 const dbus::ObjectPath
& object_path
,
175 const base::Closure
& callback
,
176 const ErrorCallback
& error_callback
,
177 BluetoothAgentServiceProvider::Delegate::Status status
,
179 void ConfirmationCallback(
180 const dbus::ObjectPath
& object_path
,
181 const base::Closure
& callback
,
182 const ErrorCallback
& error_callback
,
183 BluetoothAgentServiceProvider::Delegate::Status status
);
184 void SimulateKeypress(
186 const dbus::ObjectPath
& object_path
,
187 const base::Closure
& callback
,
188 const ErrorCallback
& error_callback
);
190 void ConnectionCallback(
191 const dbus::ObjectPath
& object_path
,
192 const base::Closure
& callback
,
193 const ErrorCallback
& error_callback
,
194 BluetoothProfileServiceProvider::Delegate::Status status
);
195 void DisconnectionCallback(
196 const dbus::ObjectPath
& object_path
,
197 const base::Closure
& callback
,
198 const ErrorCallback
& error_callback
,
199 BluetoothProfileServiceProvider::Delegate::Status status
);
201 // List of observers interested in event notifications from us.
202 ObserverList
<Observer
> observers_
;
204 // Static properties we return.
205 typedef std::map
<const dbus::ObjectPath
, Properties
*> PropertiesMap
;
206 PropertiesMap properties_map_
;
207 std::vector
<dbus::ObjectPath
> device_list_
;
209 int simulation_interval_ms_
;
210 uint32_t discovery_simulation_step_
;
211 bool pairing_cancelled_
;
214 } // namespace chromeos
216 #endif // CHROMEOS_DBUS_FAKE_BLUETOOTH_DEVICE_CLIENT_H_