Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_adapter_factory.h" | 5 #include "device/bluetooth/bluetooth_adapter_factory.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| 11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 12 #include "base/memory/weak_ptr.h" | 12 #include "base/memory/weak_ptr.h" |
| 13 #include "device/bluetooth/bluetooth_adapter.h" | 13 #include "device/bluetooth/bluetooth_adapter.h" |
| 14 | 14 |
| 15 #if defined(OS_CHROMEOS) | 15 #if defined(OS_CHROMEOS) || defined(OS_LINUX) |
| 16 #include "device/bluetooth/bluetooth_adapter_chromeos.h" | 16 #include "device/bluetooth/bluetooth_adapter_bluez.h" |
| 17 #endif | 17 #endif |
| 18 | 18 |
| 19 #if defined(OS_MACOSX) | 19 #if defined(OS_MACOSX) |
| 20 #include "base/mac/mac_util.h" | 20 #include "base/mac/mac_util.h" |
| 21 #endif | 21 #endif |
| 22 | 22 |
| 23 namespace device { | 23 namespace device { |
| 24 | 24 |
| 25 namespace { | 25 namespace { |
| 26 | 26 |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 55 #endif // defined(OS_WIN) | 55 #endif // defined(OS_WIN) |
| 56 | 56 |
| 57 } // namespace | 57 } // namespace |
| 58 | 58 |
| 59 // static | 59 // static |
| 60 bool BluetoothAdapterFactory::IsBluetoothAdapterAvailable() { | 60 bool BluetoothAdapterFactory::IsBluetoothAdapterAvailable() { |
| 61 // SetAdapterForTesting() may be used to provide a test or mock adapter | 61 // SetAdapterForTesting() may be used to provide a test or mock adapter |
| 62 // instance even on platforms that would otherwise not support it. | 62 // instance even on platforms that would otherwise not support it. |
| 63 if (default_adapter.Get()) | 63 if (default_adapter.Get()) |
| 64 return true; | 64 return true; |
| 65 // Even though the adapter is available on Linux, we only want to use it for | |
| 66 // the Chrome API, which is why defines(OS_LINUX) is missing from here. | |
| 65 #if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(OS_WIN) | 67 #if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(OS_WIN) |
| 66 return true; | 68 return true; |
| 67 #elif defined(OS_MACOSX) | 69 #elif defined(OS_MACOSX) |
| 68 return base::mac::IsOSLionOrLater(); | 70 return base::mac::IsOSLionOrLater(); |
| 69 #else | 71 #else |
| 70 return false; | 72 return false; |
| 71 #endif | 73 #endif |
| 72 } | 74 } |
| 73 | 75 |
| 74 // static | 76 // static |
| 75 void BluetoothAdapterFactory::GetAdapter(const AdapterCallback& callback) { | 77 void BluetoothAdapterFactory::GetAdapter(const AdapterCallback& callback) { |
| 78 // TODO(rkc): This is a very slight hack to allow us to be able to create | |
| 79 // an adapter on Linux, 'without' exposing the adapter to all Bluetooth | |
| 80 // services within the browser. | |
|
ortuno
2015/11/06 18:15:41
So what's the plan for removing this TODO? Could y
rkc
2015/11/25 00:48:16
I don't have one currently. This would be somethin
| |
| 81 #if !defined(OS_LINUX) | |
| 76 DCHECK(IsBluetoothAdapterAvailable()); | 82 DCHECK(IsBluetoothAdapterAvailable()); |
| 83 #endif | |
| 77 | 84 |
| 78 #if defined(OS_WIN) | 85 #if defined(OS_WIN) |
| 79 if (!default_adapter.Get()) { | 86 if (!default_adapter.Get()) { |
| 80 default_adapter.Get() = | 87 default_adapter.Get() = |
| 81 BluetoothAdapter::CreateAdapter(base::Bind(&RunAdapterCallbacks)); | 88 BluetoothAdapter::CreateAdapter(base::Bind(&RunAdapterCallbacks)); |
| 82 DCHECK(!default_adapter.Get()->IsInitialized()); | 89 DCHECK(!default_adapter.Get()->IsInitialized()); |
| 83 } | 90 } |
| 84 | 91 |
| 85 if (!default_adapter.Get()->IsInitialized()) | 92 if (!default_adapter.Get()->IsInitialized()) |
| 86 adapter_callbacks.Get().push_back(callback); | 93 adapter_callbacks.Get().push_back(callback); |
| 87 #else // !defined(OS_WIN) | 94 #else // !defined(OS_WIN) |
| 88 if (!default_adapter.Get()) { | 95 if (!default_adapter.Get()) { |
| 89 default_adapter.Get() = | 96 default_adapter.Get() = |
| 90 BluetoothAdapter::CreateAdapter(BluetoothAdapter::InitCallback()); | 97 BluetoothAdapter::CreateAdapter(BluetoothAdapter::InitCallback()); |
| 91 } | 98 } |
| 92 | 99 |
| 93 DCHECK(default_adapter.Get()->IsInitialized()); | 100 DCHECK(default_adapter.Get()->IsInitialized()); |
| 94 #endif // defined(OS_WIN) | 101 #endif // defined(OS_WIN) |
| 95 | 102 |
| 96 if (default_adapter.Get()->IsInitialized()) | 103 if (default_adapter.Get()->IsInitialized()) |
| 97 callback.Run(scoped_refptr<BluetoothAdapter>(default_adapter.Get().get())); | 104 callback.Run(scoped_refptr<BluetoothAdapter>(default_adapter.Get().get())); |
| 98 | 105 |
| 99 } | 106 } |
| 100 | 107 |
| 101 #if defined(OS_CHROMEOS) | 108 #if defined(OS_CHROMEOS) || defined(OS_LINUX) |
| 102 // static | 109 // static |
| 103 void BluetoothAdapterFactory::Shutdown() { | 110 void BluetoothAdapterFactory::Shutdown() { |
| 104 if (default_adapter.Get()) | 111 if (default_adapter.Get()) |
| 105 default_adapter.Get().get()->Shutdown(); | 112 default_adapter.Get().get()->Shutdown(); |
| 106 } | 113 } |
| 107 #endif | 114 #endif |
| 108 | 115 |
| 109 // static | 116 // static |
| 110 void BluetoothAdapterFactory::SetAdapterForTesting( | 117 void BluetoothAdapterFactory::SetAdapterForTesting( |
| 111 scoped_refptr<BluetoothAdapter> adapter) { | 118 scoped_refptr<BluetoothAdapter> adapter) { |
| 112 default_adapter.Get() = adapter->GetWeakPtrForTesting(); | 119 default_adapter.Get() = adapter->GetWeakPtrForTesting(); |
| 113 } | 120 } |
| 114 | 121 |
| 115 // static | 122 // static |
| 116 bool BluetoothAdapterFactory::HasSharedInstanceForTesting() { | 123 bool BluetoothAdapterFactory::HasSharedInstanceForTesting() { |
| 117 return default_adapter.Get(); | 124 return default_adapter.Get(); |
| 118 } | 125 } |
| 119 | 126 |
| 120 } // namespace device | 127 } // namespace device |
| OLD | NEW |