OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include <utility> |
| 6 #include <vector> |
| 7 |
| 8 #include "chrome/browser/ui/webui/bluetooth_internals/services/bluetooth_adapter
_service.h" |
| 9 #include "mojo/public/cpp/bindings/string.h" |
| 10 #include "mojo/public/cpp/bindings/strong_binding.h" |
| 11 |
| 12 BluetoothAdapterService::BluetoothAdapterService() |
| 13 : weak_ptr_factory_(this) {} |
| 14 |
| 15 BluetoothAdapterService::~BluetoothAdapterService() { |
| 16 if (adapter_.get()) { |
| 17 adapter_->RemoveObserver(this); |
| 18 adapter_ = nullptr; |
| 19 } |
| 20 } |
| 21 |
| 22 // static |
| 23 void BluetoothAdapterService::Create( |
| 24 bluetooth::mojom::AdapterRequest request) { |
| 25 mojo::MakeStrongBinding(base::MakeUnique<BluetoothAdapterService>(), |
| 26 std::move(request)); |
| 27 } |
| 28 |
| 29 void BluetoothAdapterService::SetClient( |
| 30 bluetooth::mojom::AdapterClientPtr client) { |
| 31 client_ = std::move(client); |
| 32 } |
| 33 |
| 34 void BluetoothAdapterService::OnGetAdapter( |
| 35 scoped_refptr<device::BluetoothAdapter> adapter) { |
| 36 if (!adapter_.get()) { |
| 37 VLOG(1) << "Adapter acquired in BluetoothAdapterService"; |
| 38 adapter_ = adapter; |
| 39 adapter_->AddObserver(this); |
| 40 } |
| 41 } |
| 42 |
| 43 void BluetoothAdapterService::GetDevices(const GetDevicesCallback& callback) { |
| 44 if (!GetAdapter().get()) { |
| 45 if (device::BluetoothAdapterFactory::IsBluetoothAdapterAvailable()) { |
| 46 device::BluetoothAdapterFactory::GetAdapter( |
| 47 base::Bind(&BluetoothAdapterService::GetDevicesImpl, |
| 48 weak_ptr_factory_.GetWeakPtr(), callback)); |
| 49 return; |
| 50 } |
| 51 callback.Run(std::vector<bluetooth::mojom::DeviceInfoPtr>()); |
| 52 return; |
| 53 } |
| 54 GetDevicesImpl(callback, GetAdapter()); |
| 55 } |
| 56 |
| 57 void BluetoothAdapterService::GetDevicesImpl( |
| 58 const GetDevicesCallback& callback, |
| 59 scoped_refptr<device::BluetoothAdapter> adapter) { |
| 60 OnGetAdapter(adapter); |
| 61 std::vector<bluetooth::mojom::DeviceInfoPtr> devices; |
| 62 |
| 63 for (const device::BluetoothDevice* device : adapter->GetDevices()) { |
| 64 addresses_.insert(device->GetAddress()); |
| 65 } |
| 66 |
| 67 for (const std::string& address : addresses_) { |
| 68 device::BluetoothDevice* device = adapter->GetDevice(address); |
| 69 bluetooth::mojom::DeviceInfoPtr device_info = |
| 70 ConstructDeviceInfoStruct(device); |
| 71 devices.push_back(std::move(device_info)); |
| 72 } |
| 73 |
| 74 callback.Run(std::move(devices)); |
| 75 } |
| 76 |
| 77 scoped_refptr<device::BluetoothAdapter> BluetoothAdapterService::GetAdapter() { |
| 78 return adapter_; |
| 79 } |
| 80 |
| 81 void BluetoothAdapterService::DeviceAdded(device::BluetoothAdapter* adapter, |
| 82 device::BluetoothDevice* device) { |
| 83 DCHECK(client_); |
| 84 client_->DeviceAdded(ConstructDeviceInfoStruct(device)); |
| 85 } |
| 86 |
| 87 void BluetoothAdapterService::DeviceRemoved(device::BluetoothAdapter* adapter, |
| 88 device::BluetoothDevice* device) { |
| 89 |
| 90 DCHECK(client_); |
| 91 client_->DeviceRemoved(ConstructDeviceInfoStruct(device)); |
| 92 } |
| 93 |
| 94 bluetooth::mojom::DeviceInfoPtr |
| 95 BluetoothAdapterService::ConstructDeviceInfoStruct( |
| 96 device::BluetoothDevice* device) { |
| 97 bluetooth::mojom::DeviceInfoPtr device_info = |
| 98 bluetooth::mojom::DeviceInfo::New(); |
| 99 |
| 100 device_info->name = device->GetName(); |
| 101 device_info->name_for_display = |
| 102 base::UTF16ToUTF8(device->GetNameForDisplay()); |
| 103 device_info->id = device->GetIdentifier(); |
| 104 device_info->address = device->GetAddress(); |
| 105 |
| 106 return device_info; |
| 107 } |
OLD | NEW |