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

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

Issue 1228863002: Runtime checks so that CoreBluetooth only used on >= 10.10 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@timeinfo
Patch Set: CHECK->DCHECK Created 5 years, 5 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
« no previous file with comments | « device/bluetooth/bluetooth_low_energy_discovery_manager_mac.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_discovery_manager_mac.h" 5 #include "device/bluetooth/bluetooth_low_energy_discovery_manager_mac.h"
6 6
7 #include "base/mac/mac_util.h" 7 #include "base/mac/mac_util.h"
8 #include "base/mac/sdk_forward_declarations.h"
8 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
9 #include "base/strings/sys_string_conversions.h" 10 #include "base/strings/sys_string_conversions.h"
11 #include "device/bluetooth/bluetooth_adapter_mac.h"
10 #include "device/bluetooth/bluetooth_low_energy_device_mac.h" 12 #include "device/bluetooth/bluetooth_low_energy_device_mac.h"
11 13
12 using device::BluetoothLowEnergyDeviceMac; 14 using device::BluetoothLowEnergyDeviceMac;
13 using device::BluetoothLowEnergyDiscoveryManagerMac; 15 using device::BluetoothLowEnergyDiscoveryManagerMac;
14 using device::BluetoothLowEnergyDiscoveryManagerMacDelegate; 16 using device::BluetoothLowEnergyDiscoveryManagerMacDelegate;
15 17
16 namespace device { 18 namespace device {
17 19
18 // This class is a helper to call some protected methods in 20 // This class is a helper to call some protected methods in
19 // BluetoothLowEnergyDiscoveryManagerMac. 21 // BluetoothLowEnergyDiscoveryManagerMac.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 74
73 - (void)centralManagerDidUpdateState:(CBCentralManager*)central { 75 - (void)centralManagerDidUpdateState:(CBCentralManager*)central {
74 // Notifies when the powered state of the central manager changed. 76 // Notifies when the powered state of the central manager changed.
75 delegate_->TryStartDiscovery(); 77 delegate_->TryStartDiscovery();
76 } 78 }
77 79
78 @end 80 @end
79 81
80 BluetoothLowEnergyDiscoveryManagerMac:: 82 BluetoothLowEnergyDiscoveryManagerMac::
81 ~BluetoothLowEnergyDiscoveryManagerMac() { 83 ~BluetoothLowEnergyDiscoveryManagerMac() {
82 // Set the manager's delegate to nil since the object it points to
83 // (|bridge_|) will be deallocated while |manager_| is leaked.
84 if (base::mac::IsOSLionOrLater()) {
85 // CoreBluetooth only available in OSX 10.7 and later.
86 SEL selector = NSSelectorFromString(@"setDelegate:");
87 [manager_ performSelector:selector withObject:nil];
88 }
89 } 84 }
90 85
91 bool BluetoothLowEnergyDiscoveryManagerMac::IsDiscovering() const { 86 bool BluetoothLowEnergyDiscoveryManagerMac::IsDiscovering() const {
92 return discovering_; 87 return discovering_;
93 } 88 }
94 89
95 void BluetoothLowEnergyDiscoveryManagerMac::StartDiscovery( 90 void BluetoothLowEnergyDiscoveryManagerMac::StartDiscovery(
96 BluetoothDevice::UUIDList services_uuids) { 91 BluetoothDevice::UUIDList services_uuids) {
97 discovering_ = true; 92 discovering_ = true;
98 pending_ = true; 93 pending_ = true;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 discovering_ = false; 133 discovering_ = false;
139 } 134 }
140 135
141 void BluetoothLowEnergyDiscoveryManagerMac::DiscoveredPeripheral( 136 void BluetoothLowEnergyDiscoveryManagerMac::DiscoveredPeripheral(
142 CBPeripheral* peripheral, 137 CBPeripheral* peripheral,
143 NSDictionary* advertisementData, 138 NSDictionary* advertisementData,
144 int rssi) { 139 int rssi) {
145 observer_->LowEnergyDeviceUpdated(peripheral, advertisementData, rssi); 140 observer_->LowEnergyDeviceUpdated(peripheral, advertisementData, rssi);
146 } 141 }
147 142
148 void BluetoothLowEnergyDiscoveryManagerMac::SetManagerForTesting(
149 CBCentralManager* manager) {
150 // setDelegate is only available in OSX 10.7 and later.
151 CHECK(base::mac::IsOSLionOrLater());
152 SEL selector = NSSelectorFromString(@"setDelegate:");
153 [manager performSelector:selector withObject:bridge_];
154 manager_.reset(manager);
155 }
156
157 BluetoothLowEnergyDiscoveryManagerMac* 143 BluetoothLowEnergyDiscoveryManagerMac*
158 BluetoothLowEnergyDiscoveryManagerMac::Create(Observer* observer) { 144 BluetoothLowEnergyDiscoveryManagerMac::Create(Observer* observer) {
159 return new BluetoothLowEnergyDiscoveryManagerMac(observer); 145 return new BluetoothLowEnergyDiscoveryManagerMac(observer);
160 } 146 }
161 147
162 BluetoothLowEnergyDiscoveryManagerMac::BluetoothLowEnergyDiscoveryManagerMac( 148 BluetoothLowEnergyDiscoveryManagerMac::BluetoothLowEnergyDiscoveryManagerMac(
163 Observer* observer) 149 Observer* observer)
164 : observer_(observer) { 150 : observer_(observer) {
151 DCHECK(BluetoothAdapterMac::IsLowEnergyAvailable());
165 bridge_.reset([[BluetoothLowEnergyDiscoveryManagerMacBridge alloc] 152 bridge_.reset([[BluetoothLowEnergyDiscoveryManagerMacBridge alloc]
166 initWithManager:this]); 153 initWithManager:this]);
167 // Since CoreBluetooth is only available on OS X 10.7 or later, we 154 Class aClass = NSClassFromString(@"CBCentralManager");
168 // instantiate CBCentralManager only for OS X >= 10.7. 155 manager_.reset([[aClass alloc] initWithDelegate:bridge_
169 if (base::mac::IsOSLionOrLater()) { 156 queue:dispatch_get_main_queue()]);
170 Class aClass = NSClassFromString(@"CBCentralManager");
171 manager_.reset(
172 [[aClass alloc] initWithDelegate:bridge_
173 queue:dispatch_get_main_queue()]);
174 // Increment reference count, see comment at declaration.
175 [manager_ retain];
176 }
177 discovering_ = false; 157 discovering_ = false;
178 } 158 }
159
160 void BluetoothLowEnergyDiscoveryManagerMac::SetManagerForTesting(
161 CBCentralManager* manager) {
162 DCHECK(BluetoothAdapterMac::IsLowEnergyAvailable());
163 [manager performSelector:@selector(setDelegate:) withObject:bridge_];
164 manager_.reset(manager);
165 }
OLDNEW
« no previous file with comments | « device/bluetooth/bluetooth_low_energy_discovery_manager_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698