Index: device/bluetooth/bluetooth_adapter_mac.mm |
diff --git a/device/bluetooth/bluetooth_adapter_mac.mm b/device/bluetooth/bluetooth_adapter_mac.mm |
index 0bff39aaa31ee343ca82ef3a1804d6c60391bbe6..bdbca4694f5322940349080f92124f3e488c51ac 100644 |
--- a/device/bluetooth/bluetooth_adapter_mac.mm |
+++ b/device/bluetooth/bluetooth_adapter_mac.mm |
@@ -48,15 +48,27 @@ base::WeakPtr<BluetoothAdapter> BluetoothAdapter::CreateAdapter( |
} |
// static |
-base::WeakPtr<BluetoothAdapter> BluetoothAdapterMac::CreateAdapter() { |
+base::WeakPtr<BluetoothAdapterMac> BluetoothAdapterMac::CreateAdapter() { |
BluetoothAdapterMac* adapter = new BluetoothAdapterMac(); |
adapter->Init(); |
return adapter->weak_ptr_factory_.GetWeakPtr(); |
} |
+// static |
+base::WeakPtr<BluetoothAdapterMac> BluetoothAdapterMac::CreateAdapterForTest( |
+ std::string name, |
+ std::string address, |
+ scoped_refptr<base::SequencedTaskRunner> ui_task_runner) { |
+ BluetoothAdapterMac* adapter = new BluetoothAdapterMac(); |
+ adapter->InitForTest(ui_task_runner); |
+ adapter->name_ = name; |
+ adapter->address_ = address; |
+ return adapter->weak_ptr_factory_.GetWeakPtr(); |
+} |
+ |
BluetoothAdapterMac::BluetoothAdapterMac() |
: BluetoothAdapter(), |
- powered_(false), |
+ classic_powered_(false), |
num_discovery_sessions_(0), |
classic_discovery_manager_( |
BluetoothDiscoveryManagerMac::CreateClassic(this)), |
@@ -100,11 +112,21 @@ bool BluetoothAdapterMac::IsInitialized() const { |
} |
bool BluetoothAdapterMac::IsPresent() const { |
- return !address_.empty(); |
+ bool is_present = !address_.empty(); |
+ if (IsLowEnergyAvailable()) { |
+ is_present = is_present || ([low_energy_central_manager_ state] == |
+ CBCentralManagerStatePoweredOn); |
+ } |
+ return is_present; |
} |
bool BluetoothAdapterMac::IsPowered() const { |
- return powered_; |
+ bool is_powered = classic_powered_; |
+ if (IsLowEnergyAvailable()) { |
+ is_powered = is_powered || ([low_energy_central_manager_ state] == |
+ CBCentralManagerStatePoweredOn); |
+ } |
+ return is_powered; |
} |
void BluetoothAdapterMac::SetPowered(bool powered, |
@@ -113,8 +135,9 @@ void BluetoothAdapterMac::SetPowered(bool powered, |
NOTIMPLEMENTED(); |
} |
+// TODO(krstnmnlsn): If this information is retrievable form IOBluetooth we |
+// should return the discoverable status. |
bool BluetoothAdapterMac::IsDiscoverable() const { |
- NOTIMPLEMENTED(); |
return false; |
} |
@@ -197,6 +220,16 @@ bool BluetoothAdapterMac::IsLowEnergyAvailable() { |
return base::mac::IsOSYosemiteOrLater(); |
} |
+void BluetoothAdapterMac::SetCentralManagerForTesting( |
+ CBCentralManager* central_manager) { |
+ CHECK(BluetoothAdapterMac::IsLowEnergyAvailable()); |
+ [central_manager performSelector:@selector(setDelegate:) |
+ withObject:low_energy_central_manager_delegate_]; |
+ low_energy_central_manager_.reset(central_manager); |
+ low_energy_discovery_manager_->SetCentralManager( |
+ low_energy_central_manager_.get()); |
+} |
+ |
void BluetoothAdapterMac::RemovePairingDelegateInternal( |
BluetoothDevice::PairingDelegate* pairing_delegate) { |
} |
@@ -331,7 +364,7 @@ void BluetoothAdapterMac::PollAdapter() { |
"461181 BluetoothAdapterMac::PollAdapter::Start")); |
bool was_present = IsPresent(); |
std::string address; |
- bool powered = false; |
+ bool classic_powered = false; |
IOBluetoothHostController* controller = |
[IOBluetoothHostController defaultController]; |
@@ -343,7 +376,7 @@ void BluetoothAdapterMac::PollAdapter() { |
if (controller != nil) { |
address = BluetoothDevice::CanonicalizeAddress( |
base::SysNSStringToUTF8([controller addressAsString])); |
- powered = ([controller powerState] == kBluetoothHCIPowerStateON); |
+ classic_powered = ([controller powerState] == kBluetoothHCIPowerStateON); |
// For performance reasons, cache the adapter's name. It's not uncommon for |
// a call to [controller nameAsString] to take tens of milliseconds. Note |
@@ -373,10 +406,10 @@ void BluetoothAdapterMac::PollAdapter() { |
tracked_objects::ScopedTracker tracking_profile4( |
FROM_HERE_WITH_EXPLICIT_FUNCTION( |
"461181 BluetoothAdapterMac::PollAdapter::AdapterPowerChanged")); |
- if (powered_ != powered) { |
- powered_ = powered; |
+ if (classic_powered_ != classic_powered) { |
+ classic_powered_ = classic_powered; |
FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
- AdapterPoweredChanged(this, powered_)); |
+ AdapterPoweredChanged(this, classic_powered_)); |
} |
// TODO(erikchen): Remove ScopedTracker below once http://crbug.com/461181 |
@@ -489,14 +522,4 @@ void BluetoothAdapterMac::AddPairedDevices() { |
} |
} |
-void BluetoothAdapterMac::SetCentralManagerForTesting( |
- CBCentralManager* central_manager) { |
- CHECK(BluetoothAdapterMac::IsLowEnergyAvailable()); |
- [central_manager performSelector:@selector(setDelegate:) |
- withObject:low_energy_central_manager_delegate_]; |
- low_energy_central_manager_.reset(central_manager); |
- low_energy_discovery_manager_->SetCentralManager( |
- low_energy_central_manager_.get()); |
-} |
- |
} // namespace device |