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
;
72 virtual void StartConnectionMonitor(
73 const dbus::ObjectPath
& object_path
,
74 const base::Closure
& callback
,
75 const ErrorCallback
& error_callback
) OVERRIDE
;
76 virtual void StopConnectionMonitor(
77 const dbus::ObjectPath
& object_path
,
78 const base::Closure
& callback
,
79 const ErrorCallback
& error_callback
) OVERRIDE
;
81 void SetSimulationIntervalMs(int interval_ms
);
83 // Simulates discovery of devices for the given adapter.
84 void BeginDiscoverySimulation(const dbus::ObjectPath
& adapter_path
);
85 void EndDiscoverySimulation(const dbus::ObjectPath
& adapter_path
);
87 // Simulates incoming pairing of devices for the given adapter.
88 void BeginIncomingPairingSimulation(const dbus::ObjectPath
& adapter_path
);
89 void EndIncomingPairingSimulation(const dbus::ObjectPath
& adapter_path
);
91 // Creates a device from the set we return for the given adapter.
92 void CreateDevice(const dbus::ObjectPath
& adapter_path
,
93 const dbus::ObjectPath
& device_path
);
95 // Removes a device from the set we return for the given adapter.
96 void RemoveDevice(const dbus::ObjectPath
& adapter_path
,
97 const dbus::ObjectPath
& device_path
);
99 // Simulates a pairing for the device with the given D-Bus object path,
100 // |object_path|. Set |incoming_request| to true if simulating an incoming
101 // pairing request, false for an outgoing one. On successful completion
102 // |callback| will be called, on failure, |error_callback| is called.
103 void SimulatePairing(const dbus::ObjectPath
& object_path
,
104 bool incoming_request
,
105 const base::Closure
& callback
,
106 const ErrorCallback
& error_callback
);
108 // Object paths, names, addresses and bluetooth classes of the devices
110 static const char kPairedDevicePath
[];
111 static const char kPairedDeviceName
[];
112 static const char kPairedDeviceAddress
[];
113 static const uint32 kPairedDeviceClass
;
115 static const char kLegacyAutopairPath
[];
116 static const char kLegacyAutopairName
[];
117 static const char kLegacyAutopairAddress
[];
118 static const uint32 kLegacyAutopairClass
;
120 static const char kDisplayPinCodePath
[];
121 static const char kDisplayPinCodeName
[];
122 static const char kDisplayPinCodeAddress
[];
123 static const uint32 kDisplayPinCodeClass
;
125 static const char kVanishingDevicePath
[];
126 static const char kVanishingDeviceName
[];
127 static const char kVanishingDeviceAddress
[];
128 static const uint32 kVanishingDeviceClass
;
130 static const char kConnectUnpairablePath
[];
131 static const char kConnectUnpairableName
[];
132 static const char kConnectUnpairableAddress
[];
133 static const uint32 kConnectUnpairableClass
;
135 static const char kDisplayPasskeyPath
[];
136 static const char kDisplayPasskeyName
[];
137 static const char kDisplayPasskeyAddress
[];
138 static const uint32 kDisplayPasskeyClass
;
140 static const char kRequestPinCodePath
[];
141 static const char kRequestPinCodeName
[];
142 static const char kRequestPinCodeAddress
[];
143 static const uint32 kRequestPinCodeClass
;
145 static const char kConfirmPasskeyPath
[];
146 static const char kConfirmPasskeyName
[];
147 static const char kConfirmPasskeyAddress
[];
148 static const uint32 kConfirmPasskeyClass
;
150 static const char kRequestPasskeyPath
[];
151 static const char kRequestPasskeyName
[];
152 static const char kRequestPasskeyAddress
[];
153 static const uint32 kRequestPasskeyClass
;
155 static const char kUnconnectableDevicePath
[];
156 static const char kUnconnectableDeviceName
[];
157 static const char kUnconnectableDeviceAddress
[];
158 static const uint32 kUnconnectableDeviceClass
;
160 static const char kUnpairableDevicePath
[];
161 static const char kUnpairableDeviceName
[];
162 static const char kUnpairableDeviceAddress
[];
163 static const uint32 kUnpairableDeviceClass
;
165 static const char kJustWorksPath
[];
166 static const char kJustWorksName
[];
167 static const char kJustWorksAddress
[];
168 static const uint32 kJustWorksClass
;
170 static const char kLowEnergyPath
[];
171 static const char kLowEnergyName
[];
172 static const char kLowEnergyAddress
[];
173 static const uint32 kLowEnergyClass
;
176 // Property callback passed when we create Properties* structures.
177 void OnPropertyChanged(const dbus::ObjectPath
& object_path
,
178 const std::string
& property_name
);
180 void DiscoverySimulationTimer();
181 void IncomingPairingSimulationTimer();
183 void CompleteSimulatedPairing(
184 const dbus::ObjectPath
& object_path
,
185 const base::Closure
& callback
,
186 const ErrorCallback
& error_callback
);
187 void TimeoutSimulatedPairing(
188 const dbus::ObjectPath
& object_path
,
189 const ErrorCallback
& error_callback
);
190 void CancelSimulatedPairing(
191 const dbus::ObjectPath
& object_path
,
192 const ErrorCallback
& error_callback
);
193 void RejectSimulatedPairing(
194 const dbus::ObjectPath
& object_path
,
195 const ErrorCallback
& error_callback
);
196 void FailSimulatedPairing(
197 const dbus::ObjectPath
& object_path
,
198 const ErrorCallback
& error_callback
);
199 void AddInputDeviceIfNeeded(
200 const dbus::ObjectPath
& object_path
,
201 Properties
* properties
);
203 // Updates the inquiry RSSI property of fake device with object path
204 // |object_path| to |rssi|, if the fake device exists.
205 void UpdateDeviceRSSI(const dbus::ObjectPath
& object_path
, int16 rssi
);
207 void PinCodeCallback(
208 const dbus::ObjectPath
& object_path
,
209 const base::Closure
& callback
,
210 const ErrorCallback
& error_callback
,
211 BluetoothAgentServiceProvider::Delegate::Status status
,
212 const std::string
& pincode
);
213 void PasskeyCallback(
214 const dbus::ObjectPath
& object_path
,
215 const base::Closure
& callback
,
216 const ErrorCallback
& error_callback
,
217 BluetoothAgentServiceProvider::Delegate::Status status
,
219 void ConfirmationCallback(
220 const dbus::ObjectPath
& object_path
,
221 const base::Closure
& callback
,
222 const ErrorCallback
& error_callback
,
223 BluetoothAgentServiceProvider::Delegate::Status status
);
224 void SimulateKeypress(
226 const dbus::ObjectPath
& object_path
,
227 const base::Closure
& callback
,
228 const ErrorCallback
& error_callback
);
230 void ConnectionCallback(
231 const dbus::ObjectPath
& object_path
,
232 const base::Closure
& callback
,
233 const ErrorCallback
& error_callback
,
234 BluetoothProfileServiceProvider::Delegate::Status status
);
235 void DisconnectionCallback(
236 const dbus::ObjectPath
& object_path
,
237 const base::Closure
& callback
,
238 const ErrorCallback
& error_callback
,
239 BluetoothProfileServiceProvider::Delegate::Status status
);
241 // List of observers interested in event notifications from us.
242 ObserverList
<Observer
> observers_
;
244 // Static properties we return.
245 typedef std::map
<const dbus::ObjectPath
, Properties
*> PropertiesMap
;
246 PropertiesMap properties_map_
;
247 std::vector
<dbus::ObjectPath
> device_list_
;
249 int simulation_interval_ms_
;
250 uint32_t discovery_simulation_step_
;
251 uint32_t incoming_pairing_simulation_step_
;
252 bool pairing_cancelled_
;
253 bool connection_monitor_started_
;
256 } // namespace chromeos
258 #endif // CHROMEOS_DBUS_FAKE_BLUETOOTH_DEVICE_CLIENT_H_