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 "chrome/browser/extensions/api/bluetooth/bluetooth_api.h" | 5 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 88 | 88 |
| 89 // static | 89 // static |
| 90 BluetoothAPI* BluetoothAPI::Get(BrowserContext* context) { | 90 BluetoothAPI* BluetoothAPI::Get(BrowserContext* context) { |
| 91 return GetFactoryInstance()->GetForProfile(context); | 91 return GetFactoryInstance()->GetForProfile(context); |
| 92 } | 92 } |
| 93 | 93 |
| 94 BluetoothAPI::BluetoothAPI(BrowserContext* context) | 94 BluetoothAPI::BluetoothAPI(BrowserContext* context) |
| 95 : browser_context_(context) { | 95 : browser_context_(context) { |
| 96 ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver( | 96 ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver( |
| 97 this, bluetooth::OnAdapterStateChanged::kEventName); | 97 this, bluetooth::OnAdapterStateChanged::kEventName); |
| 98 ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver( | |
| 99 this, bluetooth::OnDeviceAdded::kEventName); | |
| 100 ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver( | |
| 101 this, bluetooth::OnDeviceChanged::kEventName); | |
| 102 ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver( | |
| 103 this, bluetooth::OnDeviceRemoved::kEventName); | |
| 98 } | 104 } |
| 99 | 105 |
| 100 BluetoothAPI::~BluetoothAPI() { | 106 BluetoothAPI::~BluetoothAPI() { |
| 101 } | 107 } |
| 102 | 108 |
| 103 ExtensionBluetoothEventRouter* BluetoothAPI::bluetooth_event_router() { | 109 ExtensionBluetoothEventRouter* BluetoothAPI::bluetooth_event_router() { |
| 104 if (!bluetooth_event_router_) | 110 if (!bluetooth_event_router_) |
| 105 bluetooth_event_router_.reset( | 111 bluetooth_event_router_.reset( |
| 106 new ExtensionBluetoothEventRouter(browser_context_)); | 112 new ExtensionBluetoothEventRouter(browser_context_)); |
| 107 | 113 |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 264 | 270 |
| 265 bool BluetoothGetAdapterStateFunction::DoWork( | 271 bool BluetoothGetAdapterStateFunction::DoWork( |
| 266 scoped_refptr<BluetoothAdapter> adapter) { | 272 scoped_refptr<BluetoothAdapter> adapter) { |
| 267 bluetooth::AdapterState state; | 273 bluetooth::AdapterState state; |
| 268 PopulateAdapterState(*adapter.get(), &state); | 274 PopulateAdapterState(*adapter.get(), &state); |
| 269 SetResult(state.ToValue().release()); | 275 SetResult(state.ToValue().release()); |
| 270 SendResponse(true); | 276 SendResponse(true); |
| 271 return true; | 277 return true; |
| 272 } | 278 } |
| 273 | 279 |
| 274 BluetoothGetDevicesFunction::BluetoothGetDevicesFunction() | |
| 275 : device_events_sent_(0) {} | |
| 276 | |
| 277 void BluetoothGetDevicesFunction::DispatchDeviceSearchResult( | |
| 278 const BluetoothDevice& device) { | |
| 279 bluetooth::Device extension_device; | |
| 280 bluetooth::BluetoothDeviceToApiDevice(device, &extension_device); | |
| 281 GetEventRouter(browser_context())->DispatchDeviceEvent( | |
| 282 extensions::event_names::kBluetoothOnDeviceSearchResult, | |
| 283 extension_device); | |
| 284 | |
| 285 device_events_sent_++; | |
| 286 } | |
| 287 | |
| 288 void BluetoothGetDevicesFunction::FinishDeviceSearch() { | |
| 289 scoped_ptr<base::ListValue> args(new base::ListValue()); | |
| 290 scoped_ptr<base::DictionaryValue> info(new base::DictionaryValue()); | |
| 291 info->SetInteger("expectedEventCount", device_events_sent_); | |
| 292 args->Append(info.release()); | |
| 293 | |
| 294 scoped_ptr<extensions::Event> event(new extensions::Event( | |
| 295 extensions::event_names::kBluetoothOnDeviceSearchFinished, args.Pass())); | |
| 296 extensions::ExtensionSystem::Get(browser_context()) | |
| 297 ->event_router() | |
| 298 ->BroadcastEvent(event.Pass()); | |
| 299 | |
| 300 SendResponse(true); | |
| 301 } | |
| 302 | |
| 303 bool BluetoothGetDevicesFunction::DoWork( | 280 bool BluetoothGetDevicesFunction::DoWork( |
| 304 scoped_refptr<BluetoothAdapter> adapter) { | 281 scoped_refptr<BluetoothAdapter> adapter) { |
| 305 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 282 base::ListValue* device_list = new base::ListValue; |
|
armansito
2014/03/05 21:44:15
Keep this assertion?
keybuk
2014/03/06 21:33:44
Done.
| |
| 306 | 283 SetResult(device_list); |
| 307 scoped_ptr<GetDevices::Params> params(GetDevices::Params::Create(*args_)); | |
| 308 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); | |
| 309 const bluetooth::GetDevicesOptions& options = params->options; | |
| 310 | |
| 311 std::string uuid; | |
| 312 if (options.profile.get() != NULL) { | |
| 313 uuid = options.profile->uuid; | |
| 314 if (!BluetoothDevice::IsUUIDValid(uuid)) { | |
| 315 SetError(kInvalidUuid); | |
| 316 SendResponse(false); | |
| 317 return false; | |
| 318 } | |
| 319 } | |
| 320 | 284 |
| 321 BluetoothAdapter::DeviceList devices = adapter->GetDevices(); | 285 BluetoothAdapter::DeviceList devices = adapter->GetDevices(); |
| 322 for (BluetoothAdapter::DeviceList::const_iterator iter = devices.begin(); | 286 for (BluetoothAdapter::DeviceList::const_iterator iter = devices.begin(); |
| 323 iter != devices.end(); | 287 iter != devices.end(); |
| 324 ++iter) { | 288 ++iter) { |
| 325 const BluetoothDevice* device = *iter; | 289 const BluetoothDevice* device = *iter; |
| 326 DCHECK(device); | 290 DCHECK(device); |
| 327 if (uuid.empty() || device->ProvidesServiceWithUUID(uuid)) | 291 |
| 328 DispatchDeviceSearchResult(*device); | 292 bluetooth::Device extension_device; |
| 293 bluetooth::BluetoothDeviceToApiDevice(*device, &extension_device); | |
| 294 | |
| 295 device_list->Append(extension_device.ToValue().release()); | |
| 329 } | 296 } |
| 330 | 297 |
| 331 FinishDeviceSearch(); | 298 SendResponse(true); |
| 332 | 299 |
| 333 return true; | 300 return true; |
| 334 } | 301 } |
| 335 | 302 |
| 336 void BluetoothGetServicesFunction::GetServiceRecordsCallback( | 303 void BluetoothGetServicesFunction::GetServiceRecordsCallback( |
| 337 base::ListValue* services, | 304 base::ListValue* services, |
| 338 const BluetoothDevice::ServiceRecordList& records) { | 305 const BluetoothDevice::ServiceRecordList& records) { |
| 339 for (BluetoothDevice::ServiceRecordList::const_iterator i = records.begin(); | 306 for (BluetoothDevice::ServiceRecordList::const_iterator i = records.begin(); |
| 340 i != records.end(); ++i) { | 307 i != records.end(); ++i) { |
| 341 const BluetoothServiceRecord& record = **i; | 308 const BluetoothServiceRecord& record = **i; |
| (...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 629 return true; | 596 return true; |
| 630 } | 597 } |
| 631 | 598 |
| 632 void BluetoothStartDiscoveryFunction::OnSuccessCallback() { | 599 void BluetoothStartDiscoveryFunction::OnSuccessCallback() { |
| 633 SendResponse(true); | 600 SendResponse(true); |
| 634 } | 601 } |
| 635 | 602 |
| 636 void BluetoothStartDiscoveryFunction::OnErrorCallback() { | 603 void BluetoothStartDiscoveryFunction::OnErrorCallback() { |
| 637 SetError(kStartDiscoveryFailed); | 604 SetError(kStartDiscoveryFailed); |
| 638 SendResponse(false); | 605 SendResponse(false); |
| 639 GetEventRouter(browser_context())->OnListenerRemoved(); | |
| 640 } | 606 } |
| 641 | 607 |
| 642 bool BluetoothStartDiscoveryFunction::DoWork( | 608 bool BluetoothStartDiscoveryFunction::DoWork( |
| 643 scoped_refptr<BluetoothAdapter> adapter) { | 609 scoped_refptr<BluetoothAdapter> adapter) { |
| 644 GetEventRouter(browser_context())->OnListenerAdded(); | |
| 645 GetEventRouter(browser_context())->StartDiscoverySession( | 610 GetEventRouter(browser_context())->StartDiscoverySession( |
| 646 adapter, | 611 adapter, |
| 647 extension_id(), | 612 extension_id(), |
| 648 base::Bind(&BluetoothStartDiscoveryFunction::OnSuccessCallback, this), | 613 base::Bind(&BluetoothStartDiscoveryFunction::OnSuccessCallback, this), |
| 649 base::Bind(&BluetoothStartDiscoveryFunction::OnErrorCallback, this)); | 614 base::Bind(&BluetoothStartDiscoveryFunction::OnErrorCallback, this)); |
| 650 | 615 |
| 651 return true; | 616 return true; |
| 652 } | 617 } |
| 653 | 618 |
| 654 void BluetoothStopDiscoveryFunction::OnSuccessCallback() { | 619 void BluetoothStopDiscoveryFunction::OnSuccessCallback() { |
| 655 SendResponse(true); | 620 SendResponse(true); |
| 656 GetEventRouter(browser_context())->OnListenerRemoved(); | |
| 657 } | 621 } |
| 658 | 622 |
| 659 void BluetoothStopDiscoveryFunction::OnErrorCallback() { | 623 void BluetoothStopDiscoveryFunction::OnErrorCallback() { |
| 660 SetError(kStopDiscoveryFailed); | 624 SetError(kStopDiscoveryFailed); |
| 661 SendResponse(false); | 625 SendResponse(false); |
| 662 GetEventRouter(browser_context())->OnListenerRemoved(); | |
| 663 } | 626 } |
| 664 | 627 |
| 665 bool BluetoothStopDiscoveryFunction::DoWork( | 628 bool BluetoothStopDiscoveryFunction::DoWork( |
| 666 scoped_refptr<BluetoothAdapter> adapter) { | 629 scoped_refptr<BluetoothAdapter> adapter) { |
| 667 GetEventRouter(browser_context())->StopDiscoverySession( | 630 GetEventRouter(browser_context())->StopDiscoverySession( |
| 668 adapter, | 631 adapter, |
| 669 extension_id(), | 632 extension_id(), |
| 670 base::Bind(&BluetoothStopDiscoveryFunction::OnSuccessCallback, this), | 633 base::Bind(&BluetoothStopDiscoveryFunction::OnSuccessCallback, this), |
| 671 base::Bind(&BluetoothStopDiscoveryFunction::OnErrorCallback, this)); | 634 base::Bind(&BluetoothStopDiscoveryFunction::OnErrorCallback, this)); |
| 672 | 635 |
| 673 return true; | 636 return true; |
| 674 } | 637 } |
| 675 | 638 |
| 676 } // namespace api | 639 } // namespace api |
| 677 } // namespace extensions | 640 } // namespace extensions |
| OLD | NEW |