Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Side by Side Diff: chromeos/dbus/fake_bluetooth_device_client.h

Issue 1347193004: Refactor DBusThreadManager to split away BT clients. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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.
4
5 #ifndef CHROMEOS_DBUS_FAKE_BLUETOOTH_DEVICE_CLIENT_H_
6 #define CHROMEOS_DBUS_FAKE_BLUETOOTH_DEVICE_CLIENT_H_
7
8 #include <map>
9 #include <vector>
10
11 #include "base/bind.h"
12 #include "base/callback.h"
13 #include "base/containers/scoped_ptr_map.h"
14 #include "base/observer_list.h"
15 #include "chromeos/chromeos_export.h"
16 #include "chromeos/dbus/bluetooth_agent_service_provider.h"
17 #include "chromeos/dbus/bluetooth_device_client.h"
18 #include "chromeos/dbus/bluetooth_profile_service_provider.h"
19 #include "dbus/object_path.h"
20 #include "dbus/property.h"
21
22 namespace chromeos {
23
24 // FakeBluetoothDeviceClient simulates the behavior of the Bluetooth Daemon
25 // device objects and is used both in test cases in place of a mock and on
26 // the Linux desktop.
27 class CHROMEOS_EXPORT FakeBluetoothDeviceClient
28 : public BluetoothDeviceClient {
29 public:
30 struct Properties : public BluetoothDeviceClient::Properties {
31 explicit Properties(const PropertyChangedCallback & callback);
32 ~Properties() override;
33
34 // dbus::PropertySet override
35 void Get(dbus::PropertyBase* property,
36 dbus::PropertySet::GetCallback callback) override;
37 void GetAll() override;
38 void Set(dbus::PropertyBase* property,
39 dbus::PropertySet::SetCallback callback) override;
40 };
41
42 struct SimulatedPairingOptions {
43 SimulatedPairingOptions();
44 ~SimulatedPairingOptions();
45
46 bool incoming = false;
47 std::string pairing_method;
48 std::string pairing_auth_token;
49 std::string pairing_action;
50 };
51
52 // Stores properties of a device that is about to be created.
53 struct IncomingDeviceProperties {
54 IncomingDeviceProperties();
55 ~IncomingDeviceProperties();
56
57 std::string device_address;
58 std::string device_alias;
59 int device_class = 0;
60 std::string device_name;
61 std::string device_path;
62 bool is_trusted = true;
63 bool incoming = false;
64 std::string pairing_action;
65 std::string pairing_auth_token;
66 std::string pairing_method;
67 };
68
69 FakeBluetoothDeviceClient();
70 ~FakeBluetoothDeviceClient() override;
71
72 // BluetoothDeviceClient overrides
73 void Init(dbus::Bus* bus) override;
74 void AddObserver(Observer* observer) override;
75 void RemoveObserver(Observer* observer) override;
76 std::vector<dbus::ObjectPath> GetDevicesForAdapter(
77 const dbus::ObjectPath& adapter_path) override;
78 Properties* GetProperties(const dbus::ObjectPath& object_path) override;
79 void Connect(const dbus::ObjectPath& object_path,
80 const base::Closure& callback,
81 const ErrorCallback& error_callback) override;
82 void Disconnect(const dbus::ObjectPath& object_path,
83 const base::Closure& callback,
84 const ErrorCallback& error_callback) override;
85 void ConnectProfile(const dbus::ObjectPath& object_path,
86 const std::string& uuid,
87 const base::Closure& callback,
88 const ErrorCallback& error_callback) override;
89 void DisconnectProfile(const dbus::ObjectPath& object_path,
90 const std::string& uuid,
91 const base::Closure& callback,
92 const ErrorCallback& error_callback) override;
93 void Pair(const dbus::ObjectPath& object_path,
94 const base::Closure& callback,
95 const ErrorCallback& error_callback) override;
96 void CancelPairing(const dbus::ObjectPath& object_path,
97 const base::Closure& callback,
98 const ErrorCallback& error_callback) override;
99 void GetConnInfo(const dbus::ObjectPath& object_path,
100 const ConnInfoCallback& callback,
101 const ErrorCallback& error_callback) override;
102
103 void SetSimulationIntervalMs(int interval_ms);
104
105 // Simulates discovery of devices for the given adapter.
106 void BeginDiscoverySimulation(const dbus::ObjectPath& adapter_path);
107 void EndDiscoverySimulation(const dbus::ObjectPath& adapter_path);
108
109 // Simulates incoming pairing of devices for the given adapter.
110 void BeginIncomingPairingSimulation(const dbus::ObjectPath& adapter_path);
111 void EndIncomingPairingSimulation(const dbus::ObjectPath& adapter_path);
112
113 // Creates a device from the set we return for the given adapter.
114 void CreateDevice(const dbus::ObjectPath& adapter_path,
115 const dbus::ObjectPath& device_path);
116
117 // Creates a device with the given properties.
118 void CreateDeviceWithProperties(const dbus::ObjectPath& adapter_path,
119 const IncomingDeviceProperties& props);
120
121 // Creates and returns a list of scoped_ptr<base::DictionaryValue>
122 // objects, which contain all the data from the constants for devices with
123 // predefined behavior.
124 scoped_ptr<base::ListValue> GetBluetoothDevicesAsDictionaries() const;
125
126 SimulatedPairingOptions* GetPairingOptions(
127 const dbus::ObjectPath& object_path);
128
129 // Removes a device from the set we return for the given adapter.
130 void RemoveDevice(const dbus::ObjectPath& adapter_path,
131 const dbus::ObjectPath& device_path);
132
133 // Simulates a pairing for the device with the given D-Bus object path,
134 // |object_path|. Set |incoming_request| to true if simulating an incoming
135 // pairing request, false for an outgoing one. On successful completion
136 // |callback| will be called, on failure, |error_callback| is called.
137 void SimulatePairing(const dbus::ObjectPath& object_path,
138 bool incoming_request,
139 const base::Closure& callback,
140 const ErrorCallback& error_callback);
141
142 // Updates the connection properties of the fake device that will be returned
143 // by GetConnInfo.
144 void UpdateConnectionInfo(uint16 connection_rssi,
145 uint16 transmit_power,
146 uint16 max_transmit_power);
147
148 static const char kTestPinCode[];
149 static const int kTestPassKey;
150
151 static const char kPairingMethodNone[];
152 static const char kPairingMethodPinCode[];
153 static const char kPairingMethodPassKey[];
154
155 static const char kPairingActionConfirmation[];
156 static const char kPairingActionDisplay[];
157 static const char kPairingActionFail[];
158 static const char kPairingActionRequest[];
159
160 // Object paths, names, addresses and bluetooth classes of the devices
161 // we can emulate.
162 static const char kPairedDevicePath[];
163 static const char kPairedDeviceName[];
164 static const char kPairedDeviceAddress[];
165 static const uint32 kPairedDeviceClass;
166
167 static const char kLegacyAutopairPath[];
168 static const char kLegacyAutopairName[];
169 static const char kLegacyAutopairAddress[];
170 static const uint32 kLegacyAutopairClass;
171
172 static const char kDisplayPinCodePath[];
173 static const char kDisplayPinCodeName[];
174 static const char kDisplayPinCodeAddress[];
175 static const uint32 kDisplayPinCodeClass;
176
177 static const char kVanishingDevicePath[];
178 static const char kVanishingDeviceName[];
179 static const char kVanishingDeviceAddress[];
180 static const uint32 kVanishingDeviceClass;
181
182 static const char kConnectUnpairablePath[];
183 static const char kConnectUnpairableName[];
184 static const char kConnectUnpairableAddress[];
185 static const uint32 kConnectUnpairableClass;
186
187 static const char kDisplayPasskeyPath[];
188 static const char kDisplayPasskeyName[];
189 static const char kDisplayPasskeyAddress[];
190 static const uint32 kDisplayPasskeyClass;
191
192 static const char kRequestPinCodePath[];
193 static const char kRequestPinCodeName[];
194 static const char kRequestPinCodeAddress[];
195 static const uint32 kRequestPinCodeClass;
196
197 static const char kConfirmPasskeyPath[];
198 static const char kConfirmPasskeyName[];
199 static const char kConfirmPasskeyAddress[];
200 static const uint32 kConfirmPasskeyClass;
201
202 static const char kRequestPasskeyPath[];
203 static const char kRequestPasskeyName[];
204 static const char kRequestPasskeyAddress[];
205 static const uint32 kRequestPasskeyClass;
206
207 static const char kUnconnectableDevicePath[];
208 static const char kUnconnectableDeviceName[];
209 static const char kUnconnectableDeviceAddress[];
210 static const uint32 kUnconnectableDeviceClass;
211
212 static const char kUnpairableDevicePath[];
213 static const char kUnpairableDeviceName[];
214 static const char kUnpairableDeviceAddress[];
215 static const uint32 kUnpairableDeviceClass;
216
217 static const char kJustWorksPath[];
218 static const char kJustWorksName[];
219 static const char kJustWorksAddress[];
220 static const uint32 kJustWorksClass;
221
222 static const char kLowEnergyPath[];
223 static const char kLowEnergyName[];
224 static const char kLowEnergyAddress[];
225 static const uint32 kLowEnergyClass;
226
227 static const char kPairedUnconnectableDevicePath[];
228 static const char kPairedUnconnectableDeviceName[];
229 static const char kPairedUnconnectableDeviceAddress[];
230 static const uint32 kPairedUnconnectableDeviceClass;
231
232 private:
233 // Property callback passed when we create Properties* structures.
234 void OnPropertyChanged(const dbus::ObjectPath& object_path,
235 const std::string& property_name);
236
237 void DiscoverySimulationTimer();
238 void IncomingPairingSimulationTimer();
239
240 void CompleteSimulatedPairing(
241 const dbus::ObjectPath& object_path,
242 const base::Closure& callback,
243 const ErrorCallback& error_callback);
244 void TimeoutSimulatedPairing(
245 const dbus::ObjectPath& object_path,
246 const ErrorCallback& error_callback);
247 void CancelSimulatedPairing(
248 const dbus::ObjectPath& object_path,
249 const ErrorCallback& error_callback);
250 void RejectSimulatedPairing(
251 const dbus::ObjectPath& object_path,
252 const ErrorCallback& error_callback);
253 void FailSimulatedPairing(
254 const dbus::ObjectPath& object_path,
255 const ErrorCallback& error_callback);
256 void AddInputDeviceIfNeeded(
257 const dbus::ObjectPath& object_path,
258 Properties* properties);
259
260 // Updates the inquiry RSSI property of fake device with object path
261 // |object_path| to |rssi|, if the fake device exists.
262 void UpdateDeviceRSSI(const dbus::ObjectPath& object_path, int16 rssi);
263
264 void PinCodeCallback(
265 const dbus::ObjectPath& object_path,
266 const base::Closure& callback,
267 const ErrorCallback& error_callback,
268 BluetoothAgentServiceProvider::Delegate::Status status,
269 const std::string& pincode);
270 void PasskeyCallback(
271 const dbus::ObjectPath& object_path,
272 const base::Closure& callback,
273 const ErrorCallback& error_callback,
274 BluetoothAgentServiceProvider::Delegate::Status status,
275 uint32 passkey);
276 void ConfirmationCallback(
277 const dbus::ObjectPath& object_path,
278 const base::Closure& callback,
279 const ErrorCallback& error_callback,
280 BluetoothAgentServiceProvider::Delegate::Status status);
281 void SimulateKeypress(
282 uint16 entered,
283 const dbus::ObjectPath& object_path,
284 const base::Closure& callback,
285 const ErrorCallback& error_callback);
286
287 void ConnectionCallback(
288 const dbus::ObjectPath& object_path,
289 const base::Closure& callback,
290 const ErrorCallback& error_callback,
291 BluetoothProfileServiceProvider::Delegate::Status status);
292 void DisconnectionCallback(
293 const dbus::ObjectPath& object_path,
294 const base::Closure& callback,
295 const ErrorCallback& error_callback,
296 BluetoothProfileServiceProvider::Delegate::Status status);
297
298 // List of observers interested in event notifications from us.
299 base::ObserverList<Observer> observers_;
300
301 using PropertiesMap =
302 base::ScopedPtrMap<const dbus::ObjectPath, scoped_ptr<Properties>>;
303 PropertiesMap properties_map_;
304 std::vector<dbus::ObjectPath> device_list_;
305
306 // Properties which are used to decied which method of pairing should
307 // be done on request.
308 using PairingOptionsMap =
309 base::ScopedPtrMap<const dbus::ObjectPath,
310 scoped_ptr<SimulatedPairingOptions>>;
311 PairingOptionsMap pairing_options_map_;
312
313 int simulation_interval_ms_;
314 uint32_t discovery_simulation_step_;
315 uint32_t incoming_pairing_simulation_step_;
316 bool pairing_cancelled_;
317
318 int16 connection_rssi_;
319 int16 transmit_power_;
320 int16 max_transmit_power_;
321 };
322
323 } // namespace chromeos
324
325 #endif // CHROMEOS_DBUS_FAKE_BLUETOOTH_DEVICE_CLIENT_H_
OLDNEW
« no previous file with comments | « chromeos/dbus/fake_bluetooth_agent_service_provider.cc ('k') | chromeos/dbus/fake_bluetooth_device_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698