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

Side by Side Diff: content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.cc

Issue 2217573002: bluetooth: Only add new devices, connected devices and devices that changed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bluetooth-add-or-update
Patch Set: Fix typo Created 4 years, 4 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/shell/browser/layout_test/layout_test_bluetooth_adapter_provid er.h" 5 #include "content/shell/browser/layout_test/layout_test_bluetooth_adapter_provid er.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 return NULL; 116 return NULL;
117 } 117 }
118 118
119 std::set<BluetoothUUID> GetUUIDs( 119 std::set<BluetoothUUID> GetUUIDs(
120 const device::BluetoothDiscoveryFilter* filter) { 120 const device::BluetoothDiscoveryFilter* filter) {
121 std::set<BluetoothUUID> result; 121 std::set<BluetoothUUID> result;
122 filter->GetUUIDs(result); 122 filter->GetUUIDs(result);
123 return result; 123 return result;
124 } 124 }
125 125
126 // Notifies the adapter's observers for each device id the adapter.
127 void NotifyDevicesAdded(MockBluetoothAdapter* adapter) {
128 for (BluetoothDevice* device : adapter->GetMockDevices()) {
129 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, adapter->GetObservers(),
130 DeviceAdded(adapter, device));
131 }
132 }
133
126 // Notifies the adapter's observers that the services have been discovered. 134 // Notifies the adapter's observers that the services have been discovered.
127 void NotifyServicesDiscovered(MockBluetoothAdapter* adapter, 135 void NotifyServicesDiscovered(MockBluetoothAdapter* adapter,
128 MockBluetoothDevice* device) { 136 MockBluetoothDevice* device) {
129 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, adapter->GetObservers(), 137 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, adapter->GetObservers(),
130 GattServicesDiscovered(adapter, device)); 138 GattServicesDiscovered(adapter, device));
131 } 139 }
132 140
133 // Notifies the adapter's observers that a device has changed. 141 // Notifies the adapter's observers that a device has changed.
134 void NotifyDeviceChanged(MockBluetoothAdapter* adapter, 142 void NotifyDeviceChanged(MockBluetoothAdapter* adapter,
135 MockBluetoothDevice* device) { 143 MockBluetoothDevice* device) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 return GetServicesDiscoveredAfterReconnectionAdapter( 189 return GetServicesDiscoveredAfterReconnectionAdapter(
182 false /* disconnect */); 190 false /* disconnect */);
183 if (fake_adapter_name == "BlacklistTestAdapter") 191 if (fake_adapter_name == "BlacklistTestAdapter")
184 return GetBlacklistTestAdapter(); 192 return GetBlacklistTestAdapter();
185 if (fake_adapter_name == "FailingConnectionsAdapter") 193 if (fake_adapter_name == "FailingConnectionsAdapter")
186 return GetFailingConnectionsAdapter(); 194 return GetFailingConnectionsAdapter();
187 if (fake_adapter_name == "FailingGATTOperationsAdapter") 195 if (fake_adapter_name == "FailingGATTOperationsAdapter")
188 return GetFailingGATTOperationsAdapter(); 196 return GetFailingGATTOperationsAdapter();
189 if (fake_adapter_name == "SecondDiscoveryFindsHeartRateAdapter") 197 if (fake_adapter_name == "SecondDiscoveryFindsHeartRateAdapter")
190 return GetSecondDiscoveryFindsHeartRateAdapter(); 198 return GetSecondDiscoveryFindsHeartRateAdapter();
199 if (fake_adapter_name == "DeviceEventAdapter")
200 return GetDeviceEventAdapter();
191 if (fake_adapter_name == "DelayedServicesDiscoveryAdapter") 201 if (fake_adapter_name == "DelayedServicesDiscoveryAdapter")
192 return GetDelayedServicesDiscoveryAdapter(); 202 return GetDelayedServicesDiscoveryAdapter();
193 if (fake_adapter_name.empty()) 203 if (fake_adapter_name.empty())
194 return nullptr; 204 return nullptr;
195 // New adapters that can be used when fuzzing the Web Bluetooth API 205 // New adapters that can be used when fuzzing the Web Bluetooth API
196 // should also be added to 206 // should also be added to
197 // src/third_party/WebKit/Source/modules/ 207 // src/third_party/WebKit/Source/modules/
198 // bluetooth/testing/clusterfuzz/constraints.py. 208 // bluetooth/testing/clusterfuzz/constraints.py.
199 209
200 NOTREACHED() << fake_adapter_name; 210 NOTREACHED() << fake_adapter_name;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetPresentAdapter()); 266 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetPresentAdapter());
257 ON_CALL(*adapter, IsPowered()).WillByDefault(Return(false)); 267 ON_CALL(*adapter, IsPowered()).WillByDefault(Return(false));
258 268
259 return adapter; 269 return adapter;
260 } 270 }
261 271
262 // static 272 // static
263 scoped_refptr<NiceMockBluetoothAdapter> 273 scoped_refptr<NiceMockBluetoothAdapter>
264 LayoutTestBluetoothAdapterProvider::GetScanFilterCheckingAdapter() { 274 LayoutTestBluetoothAdapterProvider::GetScanFilterCheckingAdapter() {
265 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetPoweredAdapter()); 275 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetPoweredAdapter());
276 MockBluetoothAdapter* adapter_ptr = adapter.get();
266 277
267 // This fails the test with an error message listing actual and expected UUIDs 278 // This fails the test with an error message listing actual and expected UUIDs
268 // if StartDiscoverySessionWithFilter() is called with the wrong argument. 279 // if StartDiscoverySessionWithFilter() is called with the wrong argument.
269 EXPECT_CALL( 280 EXPECT_CALL(
270 *adapter, 281 *adapter,
271 StartDiscoverySessionWithFilterRaw( 282 StartDiscoverySessionWithFilterRaw(
272 ResultOf(&GetUUIDs, ElementsAre(BluetoothUUID(kGlucoseServiceUUID), 283 ResultOf(&GetUUIDs, ElementsAre(BluetoothUUID(kGlucoseServiceUUID),
273 BluetoothUUID(kHeartRateServiceUUID), 284 BluetoothUUID(kHeartRateServiceUUID),
274 BluetoothUUID(kBatteryServiceUUID))), 285 BluetoothUUID(kBatteryServiceUUID))),
275 _, _)) 286 _, _))
276 .WillRepeatedly(RunCallbackWithResult<1 /* success_callback */>( 287 .WillRepeatedly(
277 []() { return GetDiscoverySession(); })); 288 RunCallbackWithResult<1 /* success_callback */>([adapter_ptr]() {
289 base::ThreadTaskRunnerHandle::Get()->PostTask(
290 FROM_HERE, base::Bind(&NotifyDevicesAdded,
291 base::RetainedRef(adapter_ptr)));
292
293 return GetDiscoverySession();
294 }));
278 295
279 // Any unexpected call results in the failure callback. 296 // Any unexpected call results in the failure callback.
280 ON_CALL(*adapter, StartDiscoverySessionWithFilterRaw(_, _, _)) 297 ON_CALL(*adapter, StartDiscoverySessionWithFilterRaw(_, _, _))
281 .WillByDefault(RunCallback<2 /* error_callback */>()); 298 .WillByDefault(RunCallback<2 /* error_callback */>());
282 299
283 // We need to add a device otherwise requestDevice would reject. 300 // We need to add a device otherwise requestDevice would reject.
284 adapter->AddMockDevice(GetBatteryDevice(adapter.get())); 301 adapter->AddMockDevice(GetBatteryDevice(adapter.get()));
285 302
286 return adapter; 303 return adapter;
287 } 304 }
288 305
289 // static 306 // static
290 scoped_refptr<NiceMockBluetoothAdapter> 307 scoped_refptr<NiceMockBluetoothAdapter>
291 LayoutTestBluetoothAdapterProvider::GetFailStartDiscoveryAdapter() { 308 LayoutTestBluetoothAdapterProvider::GetFailStartDiscoveryAdapter() {
292 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetPoweredAdapter()); 309 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetPoweredAdapter());
293 310
294 ON_CALL(*adapter, StartDiscoverySessionWithFilterRaw(_, _, _)) 311 ON_CALL(*adapter, StartDiscoverySessionWithFilterRaw(_, _, _))
295 .WillByDefault(RunCallback<2 /* error_callback */>()); 312 .WillByDefault(RunCallback<2 /* error_callback */>());
296 313
297 return adapter; 314 return adapter;
298 } 315 }
299 316
300 // static 317 // static
301 scoped_refptr<NiceMockBluetoothAdapter> 318 scoped_refptr<NiceMockBluetoothAdapter>
302 LayoutTestBluetoothAdapterProvider::GetEmptyAdapter() { 319 LayoutTestBluetoothAdapterProvider::GetEmptyAdapter() {
303 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetPoweredAdapter()); 320 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetPoweredAdapter());
304 321
322 MockBluetoothAdapter* adapter_ptr = adapter.get();
323
305 ON_CALL(*adapter, StartDiscoverySessionWithFilterRaw(_, _, _)) 324 ON_CALL(*adapter, StartDiscoverySessionWithFilterRaw(_, _, _))
306 .WillByDefault(RunCallbackWithResult<1 /* success_callback */>( 325 .WillByDefault(
307 []() { return GetDiscoverySession(); })); 326 RunCallbackWithResult<1 /* success_callback */>([adapter_ptr]() {
327 base::ThreadTaskRunnerHandle::Get()->PostTask(
328 FROM_HERE, base::Bind(&NotifyDevicesAdded,
329 base::RetainedRef(adapter_ptr)));
330
331 return GetDiscoverySession();
332 }));
308 333
309 return adapter; 334 return adapter;
310 } 335 }
311 336
312 // static 337 // static
313 scoped_refptr<NiceMockBluetoothAdapter> 338 scoped_refptr<NiceMockBluetoothAdapter>
314 LayoutTestBluetoothAdapterProvider::GetGlucoseHeartRateAdapter() { 339 LayoutTestBluetoothAdapterProvider::GetGlucoseHeartRateAdapter() {
315 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); 340 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter());
316 341
317 adapter->AddMockDevice(GetHeartRateDevice(adapter.get())); 342 adapter->AddMockDevice(GetHeartRateDevice(adapter.get()));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 EXPECT_CALL(*adapter, StartDiscoverySessionWithFilterRaw(_, _, _)) 374 EXPECT_CALL(*adapter, StartDiscoverySessionWithFilterRaw(_, _, _))
350 .WillOnce(RunCallbackWithResult<1 /* success_callback */>( 375 .WillOnce(RunCallbackWithResult<1 /* success_callback */>(
351 []() { return GetDiscoverySession(); })) 376 []() { return GetDiscoverySession(); }))
352 .WillOnce( 377 .WillOnce(
353 RunCallbackWithResult<1 /* success_callback */>([adapter_ptr]() { 378 RunCallbackWithResult<1 /* success_callback */>([adapter_ptr]() {
354 // In the second discovery session, have the adapter discover a new 379 // In the second discovery session, have the adapter discover a new
355 // device, shortly after the session starts. 380 // device, shortly after the session starts.
356 base::ThreadTaskRunnerHandle::Get()->PostTask( 381 base::ThreadTaskRunnerHandle::Get()->PostTask(
357 FROM_HERE, 382 FROM_HERE,
358 base::Bind(&AddDevice, make_scoped_refptr(adapter_ptr), 383 base::Bind(&AddDevice, make_scoped_refptr(adapter_ptr),
359
360 base::Passed(GetHeartRateDevice(adapter_ptr)))); 384 base::Passed(GetHeartRateDevice(adapter_ptr))));
361 return GetDiscoverySession(); 385 return GetDiscoverySession();
362 })); 386 }));
363 387
364 return adapter; 388 return adapter;
365 } 389 }
366 390
367 // static 391 // static
368 scoped_refptr<NiceMockBluetoothAdapter> 392 scoped_refptr<NiceMockBluetoothAdapter>
393 LayoutTestBluetoothAdapterProvider::GetDeviceEventAdapter() {
394 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetPoweredAdapter());
395 NiceMockBluetoothAdapter* adapter_ptr = adapter.get();
396
397 // Add ConnectedHeartRateDevice.
398 std::unique_ptr<NiceMockBluetoothDevice> connected_hr(GetBaseDevice(
399 adapter.get(), "Connected Heart Rate Device",
400 {BluetoothUUID(kHeartRateServiceUUID)}, makeMACAddress(0x0)));
401 connected_hr->SetConnected(true);
402 adapter->AddMockDevice(std::move(connected_hr));
403
404 // Add ChangingBatteryDevice with no uuids.
405 std::unique_ptr<NiceMockBluetoothDevice> changing_battery(
406 GetBaseDevice(adapter.get(), "Changing Battery Device",
407 BluetoothDevice::UUIDList(), makeMACAddress(0x1)));
408 changing_battery->SetConnected(false);
409
410 NiceMockBluetoothDevice* changing_battery_ptr = changing_battery.get();
411 adapter->AddMockDevice(std::move(changing_battery));
412
413 // Add Non Connected Tx Power Device.
414 std::unique_ptr<NiceMockBluetoothDevice> non_connected_tx_power(
415 GetBaseDevice(adapter.get(), "Non Connected Tx Power Device",
416 {BluetoothUUID(kTxPowerServiceUUID)}, makeMACAddress(0x2)));
417 non_connected_tx_power->SetConnected(false);
418 adapter->AddMockDevice(std::move(non_connected_tx_power));
419
420 // Add Discovery Generic Access Device with no uuids.
421 std::unique_ptr<NiceMockBluetoothDevice> discovery_generic_access(
422 GetBaseDevice(adapter.get(), "Discovery Generic Access Device",
423 BluetoothDevice::UUIDList(), makeMACAddress(0x3)));
424 discovery_generic_access->SetConnected(true);
425
426 NiceMockBluetoothDevice* discovery_generic_access_ptr =
427 discovery_generic_access.get();
428 adapter->AddMockDevice(std::move(discovery_generic_access));
429
430 ON_CALL(*adapter, StartDiscoverySessionWithFilterRaw(_, _, _))
431 .WillByDefault(RunCallbackWithResult<1 /* success_callback */>(
432 [adapter_ptr, changing_battery_ptr, discovery_generic_access_ptr]() {
433 if (adapter_ptr->GetDevices().size() == 4) {
434 // Post task to add NewGlucoseDevice.
435 std::unique_ptr<NiceMockBluetoothDevice> glucose_device(
436 GetBaseDevice(adapter_ptr, "New Glucose Device",
437 {BluetoothUUID(kGlucoseServiceUUID)},
438 makeMACAddress(0x4)));
439
440 base::ThreadTaskRunnerHandle::Get()->PostTask(
441 FROM_HERE,
442 base::Bind(&AddDevice, make_scoped_refptr(adapter_ptr),
443 base::Passed(&glucose_device)));
444
445 // Add uuid and notify of device changed.
446 changing_battery_ptr->AddUUID(BluetoothUUID(kBatteryServiceUUID));
447 base::ThreadTaskRunnerHandle::Get()->PostTask(
448 FROM_HERE, base::Bind(&NotifyDeviceChanged,
449 base::RetainedRef(adapter_ptr),
450 changing_battery_ptr));
451
452 // Add uuid and notify of services discovered.
453 discovery_generic_access_ptr->AddUUID(
454 BluetoothUUID(kGenericAccessServiceUUID));
455 base::ThreadTaskRunnerHandle::Get()->PostTask(
456 FROM_HERE, base::Bind(&NotifyServicesDiscovered,
457 base::RetainedRef(adapter_ptr),
458 discovery_generic_access_ptr));
459 }
460 return GetDiscoverySession();
461 }));
462
463 return adapter;
464 }
465
466 // static
467 scoped_refptr<NiceMockBluetoothAdapter>
369 LayoutTestBluetoothAdapterProvider::GetMissingServiceHeartRateAdapter() { 468 LayoutTestBluetoothAdapterProvider::GetMissingServiceHeartRateAdapter() {
370 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); 469 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter());
371 470
372 adapter->AddMockDevice(GetHeartRateDevice(adapter.get())); 471 adapter->AddMockDevice(GetHeartRateDevice(adapter.get()));
373 472
374 return adapter; 473 return adapter;
375 } 474 }
376 475
377 // static 476 // static
378 scoped_refptr<NiceMockBluetoothAdapter> 477 scoped_refptr<NiceMockBluetoothAdapter>
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 845
747 // static 846 // static
748 std::unique_ptr<NiceMockBluetoothDevice> 847 std::unique_ptr<NiceMockBluetoothDevice>
749 LayoutTestBluetoothAdapterProvider::GetBaseDevice( 848 LayoutTestBluetoothAdapterProvider::GetBaseDevice(
750 MockBluetoothAdapter* adapter, 849 MockBluetoothAdapter* adapter,
751 const char* device_name, 850 const char* device_name,
752 device::BluetoothDevice::UUIDList uuids, 851 device::BluetoothDevice::UUIDList uuids,
753 const std::string& address) { 852 const std::string& address) {
754 std::unique_ptr<NiceMockBluetoothDevice> device(new NiceMockBluetoothDevice( 853 std::unique_ptr<NiceMockBluetoothDevice> device(new NiceMockBluetoothDevice(
755 adapter, 0x1F00 /* Bluetooth class */, device_name, address, 854 adapter, 0x1F00 /* Bluetooth class */, device_name, address,
756 true /* paired */, true /* connected */)); 855 false /* paired */, false /* connected */));
757 856
758 ON_CALL(*device, GetUUIDs()).WillByDefault(Return(uuids)); 857 for (const auto& uuid : uuids) {
858 device->AddUUID(uuid);
859 }
759 860
760 // Using Invoke allows the device returned from this method to be futher 861 // Using Invoke allows the device returned from this method to be futher
761 // modified and have more services added to it. The call to ::GetGattServices 862 // modified and have more services added to it. The call to ::GetGattServices
762 // will invoke ::GetMockServices, returning all services added up to that 863 // will invoke ::GetMockServices, returning all services added up to that
763 // time. 864 // time.
764 ON_CALL(*device, GetGattServices()) 865 ON_CALL(*device, GetGattServices())
765 .WillByDefault( 866 .WillByDefault(
766 Invoke(device.get(), &MockBluetoothDevice::GetMockServices)); 867 Invoke(device.get(), &MockBluetoothDevice::GetMockServices));
767 // The call to BluetoothDevice::GetGattService will invoke ::GetMockService 868 // The call to BluetoothDevice::GetGattService will invoke ::GetMockService
768 // which returns a service matching the identifier provided if the service 869 // which returns a service matching the identifier provided if the service
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 return BluetoothUUID(); 1319 return BluetoothUUID();
1219 } 1320 }
1220 1321
1221 // static 1322 // static
1222 std::string LayoutTestBluetoothAdapterProvider::makeMACAddress(uint64_t addr) { 1323 std::string LayoutTestBluetoothAdapterProvider::makeMACAddress(uint64_t addr) {
1223 return BluetoothDevice::CanonicalizeAddress( 1324 return BluetoothDevice::CanonicalizeAddress(
1224 base::StringPrintf("%012" PRIx64, addr)); 1325 base::StringPrintf("%012" PRIx64, addr));
1225 } 1326 }
1226 1327
1227 } // namespace content 1328 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698