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 "chrome/browser/extensions/api/bluetooth/bluetooth_event_router.h" | 5 #include "chrome/browser/extensions/api/bluetooth/bluetooth_event_router.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/json/json_writer.h" | 10 #include "base/json/json_writer.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 responsible_for_discovery_(false), | 30 responsible_for_discovery_(false), |
31 profile_(profile), | 31 profile_(profile), |
32 adapter_(NULL), | 32 adapter_(NULL), |
33 num_event_listeners_(0), | 33 num_event_listeners_(0), |
34 next_socket_id_(1), | 34 next_socket_id_(1), |
35 weak_ptr_factory_(this) { | 35 weak_ptr_factory_(this) { |
36 DCHECK(profile_); | 36 DCHECK(profile_); |
37 } | 37 } |
38 | 38 |
39 ExtensionBluetoothEventRouter::~ExtensionBluetoothEventRouter() { | 39 ExtensionBluetoothEventRouter::~ExtensionBluetoothEventRouter() { |
40 if (adapter_) { | 40 if (adapter_.get()) { |
41 adapter_->RemoveObserver(this); | 41 adapter_->RemoveObserver(this); |
42 adapter_ = NULL; | 42 adapter_ = NULL; |
43 } | 43 } |
44 DLOG_IF(WARNING, socket_map_.size() != 0) | 44 DLOG_IF(WARNING, socket_map_.size() != 0) |
45 << "Bluetooth sockets are still open."; | 45 << "Bluetooth sockets are still open."; |
46 socket_map_.clear(); | 46 socket_map_.clear(); |
47 | 47 |
48 for (BluetoothProfileMap::iterator iter = bluetooth_profile_map_.begin(); | 48 for (BluetoothProfileMap::iterator iter = bluetooth_profile_map_.begin(); |
49 iter != bluetooth_profile_map_.end(); | 49 iter != bluetooth_profile_map_.end(); |
50 ++iter) { | 50 ++iter) { |
51 iter->second->Unregister(); | 51 iter->second->Unregister(); |
52 } | 52 } |
53 } | 53 } |
54 | 54 |
55 bool ExtensionBluetoothEventRouter::IsBluetoothSupported() const { | 55 bool ExtensionBluetoothEventRouter::IsBluetoothSupported() const { |
56 return adapter_ || | 56 return adapter_.get() || |
57 device::BluetoothAdapterFactory::IsBluetoothAdapterAvailable(); | 57 device::BluetoothAdapterFactory::IsBluetoothAdapterAvailable(); |
58 } | 58 } |
59 | 59 |
60 void ExtensionBluetoothEventRouter::GetAdapter( | 60 void ExtensionBluetoothEventRouter::GetAdapter( |
61 const device::BluetoothAdapterFactory::AdapterCallback& callback) { | 61 const device::BluetoothAdapterFactory::AdapterCallback& callback) { |
62 if (adapter_) { | 62 if (adapter_.get()) { |
63 callback.Run(scoped_refptr<device::BluetoothAdapter>(adapter_)); | 63 callback.Run(scoped_refptr<device::BluetoothAdapter>(adapter_)); |
64 return; | 64 return; |
65 } | 65 } |
66 | 66 |
67 device::BluetoothAdapterFactory::GetAdapter(callback); | 67 device::BluetoothAdapterFactory::GetAdapter(callback); |
68 } | 68 } |
69 | 69 |
70 void ExtensionBluetoothEventRouter::OnListenerAdded() { | 70 void ExtensionBluetoothEventRouter::OnListenerAdded() { |
71 num_event_listeners_++; | 71 num_event_listeners_++; |
72 InitializeAdapterIfNeeded(); | 72 InitializeAdapterIfNeeded(); |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 scoped_ptr<ListValue> args(new ListValue()); | 184 scoped_ptr<ListValue> args(new ListValue()); |
185 args->Append(result_socket.ToValue().release()); | 185 args->Append(result_socket.ToValue().release()); |
186 scoped_ptr<Event> event(new Event( | 186 scoped_ptr<Event> event(new Event( |
187 extensions::event_names::kBluetoothOnConnection, args.Pass())); | 187 extensions::event_names::kBluetoothOnConnection, args.Pass())); |
188 ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension( | 188 ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension( |
189 extension_id, event.Pass()); | 189 extension_id, event.Pass()); |
190 } | 190 } |
191 | 191 |
192 void ExtensionBluetoothEventRouter::AdapterPresentChanged( | 192 void ExtensionBluetoothEventRouter::AdapterPresentChanged( |
193 device::BluetoothAdapter* adapter, bool present) { | 193 device::BluetoothAdapter* adapter, bool present) { |
194 if (adapter != adapter_) { | 194 if (adapter != adapter_.get()) { |
195 DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress(); | 195 DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress(); |
196 return; | 196 return; |
197 } | 197 } |
198 DispatchAdapterStateEvent(); | 198 DispatchAdapterStateEvent(); |
199 } | 199 } |
200 | 200 |
201 void ExtensionBluetoothEventRouter::AdapterPoweredChanged( | 201 void ExtensionBluetoothEventRouter::AdapterPoweredChanged( |
202 device::BluetoothAdapter* adapter, bool has_power) { | 202 device::BluetoothAdapter* adapter, bool has_power) { |
203 if (adapter != adapter_) { | 203 if (adapter != adapter_.get()) { |
204 DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress(); | 204 DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress(); |
205 return; | 205 return; |
206 } | 206 } |
207 DispatchAdapterStateEvent(); | 207 DispatchAdapterStateEvent(); |
208 } | 208 } |
209 | 209 |
210 void ExtensionBluetoothEventRouter::AdapterDiscoveringChanged( | 210 void ExtensionBluetoothEventRouter::AdapterDiscoveringChanged( |
211 device::BluetoothAdapter* adapter, bool discovering) { | 211 device::BluetoothAdapter* adapter, bool discovering) { |
212 if (adapter != adapter_) { | 212 if (adapter != adapter_.get()) { |
213 DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress(); | 213 DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress(); |
214 return; | 214 return; |
215 } | 215 } |
216 | 216 |
217 if (!discovering) { | 217 if (!discovering) { |
218 send_discovery_events_ = false; | 218 send_discovery_events_ = false; |
219 responsible_for_discovery_ = false; | 219 responsible_for_discovery_ = false; |
220 discovered_devices_.clear(); | 220 discovered_devices_.clear(); |
221 } | 221 } |
222 | 222 |
223 DispatchAdapterStateEvent(); | 223 DispatchAdapterStateEvent(); |
224 } | 224 } |
225 | 225 |
226 void ExtensionBluetoothEventRouter::DeviceAdded( | 226 void ExtensionBluetoothEventRouter::DeviceAdded( |
227 device::BluetoothAdapter* adapter, | 227 device::BluetoothAdapter* adapter, |
228 device::BluetoothDevice* device) { | 228 device::BluetoothDevice* device) { |
229 if (adapter != adapter_) { | 229 if (adapter != adapter_.get()) { |
230 DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress(); | 230 DVLOG(1) << "Ignoring event for adapter " << adapter->GetAddress(); |
231 return; | 231 return; |
232 } | 232 } |
233 | 233 |
234 extensions::api::bluetooth::Device* extension_device = | 234 extensions::api::bluetooth::Device* extension_device = |
235 new extensions::api::bluetooth::Device(); | 235 new extensions::api::bluetooth::Device(); |
236 extensions::api::bluetooth::BluetoothDeviceToApiDevice( | 236 extensions::api::bluetooth::BluetoothDeviceToApiDevice( |
237 *device, extension_device); | 237 *device, extension_device); |
238 discovered_devices_.push_back(extension_device); | 238 discovered_devices_.push_back(extension_device); |
239 | 239 |
240 if (!send_discovery_events_) | 240 if (!send_discovery_events_) |
241 return; | 241 return; |
242 | 242 |
243 DispatchDeviceEvent(extensions::event_names::kBluetoothOnDeviceDiscovered, | 243 DispatchDeviceEvent(extensions::event_names::kBluetoothOnDeviceDiscovered, |
244 *extension_device); | 244 *extension_device); |
245 } | 245 } |
246 | 246 |
247 void ExtensionBluetoothEventRouter::InitializeAdapterIfNeeded() { | 247 void ExtensionBluetoothEventRouter::InitializeAdapterIfNeeded() { |
248 if (!adapter_) { | 248 if (!adapter_.get()) { |
249 GetAdapter(base::Bind(&ExtensionBluetoothEventRouter::InitializeAdapter, | 249 GetAdapter(base::Bind(&ExtensionBluetoothEventRouter::InitializeAdapter, |
250 weak_ptr_factory_.GetWeakPtr())); | 250 weak_ptr_factory_.GetWeakPtr())); |
251 } | 251 } |
252 } | 252 } |
253 | 253 |
254 void ExtensionBluetoothEventRouter::InitializeAdapter( | 254 void ExtensionBluetoothEventRouter::InitializeAdapter( |
255 scoped_refptr<device::BluetoothAdapter> adapter) { | 255 scoped_refptr<device::BluetoothAdapter> adapter) { |
256 if (!adapter_) { | 256 if (!adapter_.get()) { |
257 adapter_ = adapter; | 257 adapter_ = adapter; |
258 adapter_->AddObserver(this); | 258 adapter_->AddObserver(this); |
259 } | 259 } |
260 } | 260 } |
261 | 261 |
262 void ExtensionBluetoothEventRouter::MaybeReleaseAdapter() { | 262 void ExtensionBluetoothEventRouter::MaybeReleaseAdapter() { |
263 if (adapter_ && num_event_listeners_ == 0) { | 263 if (adapter_.get() && num_event_listeners_ == 0) { |
264 adapter_->RemoveObserver(this); | 264 adapter_->RemoveObserver(this); |
265 adapter_ = NULL; | 265 adapter_ = NULL; |
266 } | 266 } |
267 } | 267 } |
268 | 268 |
269 void ExtensionBluetoothEventRouter::DispatchAdapterStateEvent() { | 269 void ExtensionBluetoothEventRouter::DispatchAdapterStateEvent() { |
270 api::bluetooth::AdapterState state; | 270 api::bluetooth::AdapterState state; |
271 PopulateAdapterState(*adapter_, &state); | 271 PopulateAdapterState(*adapter_.get(), &state); |
272 | 272 |
273 scoped_ptr<ListValue> args(new ListValue()); | 273 scoped_ptr<ListValue> args(new ListValue()); |
274 args->Append(state.ToValue().release()); | 274 args->Append(state.ToValue().release()); |
275 scoped_ptr<Event> event(new Event( | 275 scoped_ptr<Event> event(new Event( |
276 extensions::event_names::kBluetoothOnAdapterStateChanged, | 276 extensions::event_names::kBluetoothOnAdapterStateChanged, |
277 args.Pass())); | 277 args.Pass())); |
278 ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent(event.Pass()); | 278 ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent(event.Pass()); |
279 } | 279 } |
280 | 280 |
281 } // namespace extensions | 281 } // namespace extensions |
OLD | NEW |