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 |