| Index: device/bluetooth/bluetooth_low_energy_discovery_manager_mac.mm
|
| diff --git a/device/bluetooth/bluetooth_low_energy_discovery_manager_mac.mm b/device/bluetooth/bluetooth_low_energy_discovery_manager_mac.mm
|
| index 11d40caa6261d6a8db61b30986e5b5ab3fcfbe9e..67cf39126d78272fe44031d099c2fa6886621d84 100644
|
| --- a/device/bluetooth/bluetooth_low_energy_discovery_manager_mac.mm
|
| +++ b/device/bluetooth/bluetooth_low_energy_discovery_manager_mac.mm
|
| @@ -79,7 +79,13 @@ class BluetoothLowEnergyDiscoveryManagerMacDelegate {
|
|
|
| BluetoothLowEnergyDiscoveryManagerMac::
|
| ~BluetoothLowEnergyDiscoveryManagerMac() {
|
| - ClearDevices();
|
| + // Set the manager's delegate to nil since the object it points to
|
| + // (|bridge_|) will be deallocated while |manager_| is leaked.
|
| + if (base::mac::IsOSLionOrLater()) {
|
| + // CoreBluetooth only available in OSX 10.7 and later.
|
| + SEL selector = NSSelectorFromString(@"setDelegate:");
|
| + [manager_ performSelector:selector withObject:nil];
|
| + }
|
| }
|
|
|
| bool BluetoothLowEnergyDiscoveryManagerMac::IsDiscovering() const {
|
| @@ -88,7 +94,6 @@ bool BluetoothLowEnergyDiscoveryManagerMac::IsDiscovering() const {
|
|
|
| void BluetoothLowEnergyDiscoveryManagerMac::StartDiscovery(
|
| BluetoothDevice::UUIDList services_uuids) {
|
| - ClearDevices();
|
| discovering_ = true;
|
| pending_ = true;
|
| services_uuids_ = services_uuids;
|
| @@ -137,23 +142,16 @@ void BluetoothLowEnergyDiscoveryManagerMac::DiscoveredPeripheral(
|
| CBPeripheral* peripheral,
|
| NSDictionary* advertisementData,
|
| int rssi) {
|
| - // Look for existing device.
|
| - auto iter = devices_.find(
|
| - BluetoothLowEnergyDeviceMac::GetPeripheralIdentifier(peripheral));
|
| - if (iter == devices_.end()) {
|
| - // A device has been added.
|
| - BluetoothLowEnergyDeviceMac* device =
|
| - new BluetoothLowEnergyDeviceMac(peripheral, advertisementData, rssi);
|
| - devices_.insert(devices_.begin(),
|
| - std::make_pair(device->GetIdentifier(), device));
|
| - observer_->DeviceFound(device);
|
| - return;
|
| - }
|
| + observer_->LowEnergyDeviceUpdated(peripheral, advertisementData, rssi);
|
| +}
|
|
|
| - // A device has an update.
|
| - BluetoothLowEnergyDeviceMac* old_device = iter->second;
|
| - old_device->Update(peripheral, advertisementData, rssi);
|
| - observer_->DeviceUpdated(old_device);
|
| +void BluetoothLowEnergyDiscoveryManagerMac::SetManagerForTesting(
|
| + CBCentralManager* manager) {
|
| + // setDelegate is only available in OSX 10.7 and later.
|
| + CHECK(base::mac::IsOSLionOrLater());
|
| + SEL selector = NSSelectorFromString(@"setDelegate:");
|
| + [manager performSelector:selector withObject:bridge_];
|
| + manager_.reset(manager);
|
| }
|
|
|
| BluetoothLowEnergyDiscoveryManagerMac*
|
| @@ -173,10 +171,8 @@ BluetoothLowEnergyDiscoveryManagerMac::BluetoothLowEnergyDiscoveryManagerMac(
|
| manager_.reset(
|
| [[aClass alloc] initWithDelegate:bridge_
|
| queue:dispatch_get_main_queue()]);
|
| + // Increment reference count, see comment at declaration.
|
| + [manager_ retain];
|
| }
|
| discovering_ = false;
|
| }
|
| -
|
| -void BluetoothLowEnergyDiscoveryManagerMac::ClearDevices() {
|
| - STLDeleteValues(&devices_);
|
| -}
|
|
|