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

Side by Side Diff: device/bluetooth/bluetooth_low_energy_device_mac.mm

Issue 2638653002: Bluetooth: macOS: DidModifyServices can happens while scanning (Closed)
Patch Set: More unit tests Created 3 years, 8 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 "device/bluetooth/bluetooth_low_energy_device_mac.h" 5 #include "device/bluetooth/bluetooth_low_energy_device_mac.h"
6 6
7 #import <CoreFoundation/CoreFoundation.h> 7 #import <CoreFoundation/CoreFoundation.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include "base/mac/mac_util.h" 10 #include "base/mac/mac_util.h"
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 VLOG(1) << *this << ": Can't discover characteristics: " 247 VLOG(1) << *this << ": Can't discover characteristics: "
248 << BluetoothAdapterMac::String(error); 248 << BluetoothAdapterMac::String(error);
249 return; 249 return;
250 } 250 }
251 251
252 if (!IsGattConnected()) { 252 if (!IsGattConnected()) {
253 VLOG(1) << *this << ": DidDiscoverCharacteristics, gatt disconnected."; 253 VLOG(1) << *this << ": DidDiscoverCharacteristics, gatt disconnected.";
254 // Don't create characteristics if the device disconnected. 254 // Don't create characteristics if the device disconnected.
255 return; 255 return;
256 } 256 }
257 if (IsGattServicesDiscoveryComplete()) {
258 // This should never happens, just in case it happens with a device,
scheib 2017/04/18 04:43:21 "never happen"
jlebel 2017/04/29 22:08:07 Done.
259 // this notification should be ignored.
260 VLOG(1) << *this
261 << ": Discovery complete, ignoring DidDiscoverCharacteristics.";
262 return;
263 }
257 264
258 BluetoothRemoteGattServiceMac* gatt_service = 265 BluetoothRemoteGattServiceMac* gatt_service =
259 GetBluetoothRemoteGattService(cb_service); 266 GetBluetoothRemoteGattService(cb_service);
260 DCHECK(gatt_service); 267 DCHECK(gatt_service);
261 gatt_service->DidDiscoverCharacteristics(); 268 gatt_service->DidDiscoverCharacteristics();
262 SendNotificationIfDiscoveryComplete(); 269 SendNotificationIfDiscoveryComplete();
263 } 270 }
264 271
265 void BluetoothLowEnergyDeviceMac::DidModifyServices( 272 void BluetoothLowEnergyDeviceMac::DidModifyServices(
266 NSArray* invalidatedServices) { 273 NSArray* invalidatedServices) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 // TODO(http://crbug.com/609844): Decide what to do if discover failed 325 // TODO(http://crbug.com/609844): Decide what to do if discover failed
319 VLOG(1) << *this << ": Can't discover descriptors: " 326 VLOG(1) << *this << ": Can't discover descriptors: "
320 << BluetoothAdapterMac::String(error); 327 << BluetoothAdapterMac::String(error);
321 return; 328 return;
322 } 329 }
323 if (!IsGattConnected()) { 330 if (!IsGattConnected()) {
324 VLOG(1) << *this << ": DidDiscoverDescriptors, disconnected."; 331 VLOG(1) << *this << ": DidDiscoverDescriptors, disconnected.";
325 // Don't discover descriptors if the device disconnected. 332 // Don't discover descriptors if the device disconnected.
326 return; 333 return;
327 } 334 }
335 if (IsGattServicesDiscoveryComplete()) {
336 // This should never happens, just in case it happens with a device,
scheib 2017/04/18 04:43:21 ditto
jlebel 2017/04/29 22:08:07 Done.
337 // this notification should be ignored.
338 VLOG(1) << *this
339 << ": Discovery complete, ignoring DidDiscoverDescriptors.";
340 return;
341 }
328 BluetoothRemoteGattServiceMac* gatt_service = 342 BluetoothRemoteGattServiceMac* gatt_service =
329 GetBluetoothRemoteGattService(cb_characteristic.service); 343 GetBluetoothRemoteGattService(cb_characteristic.service);
330 DCHECK(gatt_service); 344 DCHECK(gatt_service);
331 gatt_service->DidDiscoverDescriptors(cb_characteristic); 345 gatt_service->DidDiscoverDescriptors(cb_characteristic);
332 SendNotificationIfDiscoveryComplete(); 346 SendNotificationIfDiscoveryComplete();
333 } 347 }
334 348
335 // static 349 // static
336 std::string BluetoothLowEnergyDeviceMac::GetPeripheralIdentifier( 350 std::string BluetoothLowEnergyDeviceMac::GetPeripheralIdentifier(
337 CBPeripheral* peripheral) { 351 CBPeripheral* peripheral) {
(...skipping 15 matching lines...) Expand all
353 } 367 }
354 368
355 void BluetoothLowEnergyDeviceMac::DiscoverPrimaryServices() { 369 void BluetoothLowEnergyDeviceMac::DiscoverPrimaryServices() {
356 VLOG(1) << *this << ": DiscoverPrimaryServices, pending count " 370 VLOG(1) << *this << ": DiscoverPrimaryServices, pending count "
357 << discovery_pending_count_; 371 << discovery_pending_count_;
358 ++discovery_pending_count_; 372 ++discovery_pending_count_;
359 [GetPeripheral() discoverServices:nil]; 373 [GetPeripheral() discoverServices:nil];
360 } 374 }
361 375
362 void BluetoothLowEnergyDeviceMac::SendNotificationIfDiscoveryComplete() { 376 void BluetoothLowEnergyDeviceMac::SendNotificationIfDiscoveryComplete() {
377 DCHECK(!IsGattServicesDiscoveryComplete());
363 // Notify when all services have been discovered. 378 // Notify when all services have been discovered.
364 bool discovery_complete = 379 bool discovery_complete =
365 discovery_pending_count_ == 0 && 380 discovery_pending_count_ == 0 &&
366 std::find_if_not( 381 std::find_if_not(
367 gatt_services_.begin(), 382 gatt_services_.begin(),
368 gatt_services_.end(), [](GattServiceMap::value_type & pair) { 383 gatt_services_.end(), [](GattServiceMap::value_type & pair) {
369 BluetoothRemoteGattService* gatt_service = pair.second.get(); 384 BluetoothRemoteGattService* gatt_service = pair.second.get();
370 return static_cast<BluetoothRemoteGattServiceMac*>(gatt_service) 385 return static_cast<BluetoothRemoteGattServiceMac*>(gatt_service)
371 ->IsDiscoveryComplete(); 386 ->IsDiscoveryComplete();
372 }) == gatt_services_.end(); 387 }) == gatt_services_.end();
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 std::ostream& operator<<(std::ostream& out, 447 std::ostream& operator<<(std::ostream& out,
433 const BluetoothLowEnergyDeviceMac& device) { 448 const BluetoothLowEnergyDeviceMac& device) {
434 // TODO(crbug.com/703878): Should use 449 // TODO(crbug.com/703878): Should use
435 // BluetoothLowEnergyDeviceMac::GetNameForDisplay() instead. 450 // BluetoothLowEnergyDeviceMac::GetNameForDisplay() instead.
436 base::Optional<std::string> name = device.GetName(); 451 base::Optional<std::string> name = device.GetName();
437 const char* name_cstr = name ? name->c_str() : ""; 452 const char* name_cstr = name ? name->c_str() : "";
438 return out << "<BluetoothLowEnergyDeviceMac " << device.GetAddress() << "/" 453 return out << "<BluetoothLowEnergyDeviceMac " << device.GetAddress() << "/"
439 << &device << ", \"" << name_cstr << "\">"; 454 << &device << ", \"" << name_cstr << "\">";
440 } 455 }
441 } // namespace device 456 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698