Index: device/bluetooth/bluetooth_adapter_factory.cc |
diff --git a/device/bluetooth/bluetooth_adapter_factory.cc b/device/bluetooth/bluetooth_adapter_factory.cc |
index c15d26a514b3082a1fe5c89649e88d70dbfedeba..b9889c6742934e96a55f10db940832f1984d0355 100644 |
--- a/device/bluetooth/bluetooth_adapter_factory.cc |
+++ b/device/bluetooth/bluetooth_adapter_factory.cc |
@@ -26,6 +26,9 @@ namespace { |
using device::BluetoothAdapter; |
using device::BluetoothAdapterFactory; |
+base::LazyInstance<BluetoothAdapterFactory> adapter_factory = |
+ LAZY_INSTANCE_INITIALIZER; |
+ |
// Shared default adapter instance, we don't want to keep this class around |
// if nobody is using it so use a WeakPtr and create the object when needed; |
// since Google C++ Style (and clang's static analyzer) forbids us having |
@@ -61,6 +64,12 @@ void RunAdapterCallbacks() { |
namespace device { |
// static |
+void BluetoothAdapterFactory::SetAdapterInitializer( |
+ AdapterInitializer initializer) { |
+ adapter_factory.Get().adapter_initializer_ = initializer; |
keybuk
2014/03/20 01:21:56
This doesn't run the initializer if the adapter is
rpaquay
2014/03/20 18:21:11
The issue is that the "device" layer needs initial
keybuk
2014/03/20 18:38:40
Sure, but the extensions::BluetoothAPI may not be
rpaquay
2014/03/25 20:06:10
These are all good points. After thinking about th
|
+} |
+ |
+// static |
bool BluetoothAdapterFactory::IsBluetoothAdapterAvailable() { |
#if defined(OS_CHROMEOS) |
return true; |
@@ -68,8 +77,9 @@ bool BluetoothAdapterFactory::IsBluetoothAdapterAvailable() { |
return true; |
#elif defined(OS_MACOSX) |
return base::mac::IsOSLionOrLater(); |
-#endif |
+#else |
return false; |
+#endif |
} |
// static |
@@ -78,15 +88,18 @@ void BluetoothAdapterFactory::GetAdapter(const AdapterCallback& callback) { |
#if defined(OS_CHROMEOS) |
chromeos::BluetoothAdapterChromeOS* new_adapter = |
new chromeos::BluetoothAdapterChromeOS(); |
+ adapter_factory.Get().adapter_initializer_.Run(new_adapter); |
default_adapter.Get() = new_adapter->weak_ptr_factory_.GetWeakPtr(); |
#elif defined(OS_WIN) |
BluetoothAdapterWin* new_adapter = new BluetoothAdapterWin( |
base::Bind(&RunAdapterCallbacks)); |
new_adapter->Init(); |
+ adapter_factory.Get().adapter_initializer_.Run(new_adapter); |
keybuk
2014/03/20 01:21:56
the adapter might not be initialized yet?
rpaquay
2014/03/20 18:21:11
The initialization callback is intended to be part
keybuk
2014/03/20 18:38:40
Ack
|
default_adapter.Get() = new_adapter->weak_ptr_factory_.GetWeakPtr(); |
#elif defined(OS_MACOSX) |
BluetoothAdapterMac* new_adapter = new BluetoothAdapterMac(); |
new_adapter->Init(); |
+ adapter_factory.Get().adapter_initializer_.Run(new_adapter); |
keybuk
2014/03/20 01:21:56
adapter might not be initialized yet
rpaquay
2014/03/20 18:21:11
See Above.
|
default_adapter.Get() = new_adapter->weak_ptr_factory_.GetWeakPtr(); |
#endif |
} |