Chromium Code Reviews| 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 | |
| 11 BluetoothAdapterService::BluetoothAdapterService( | |
| 12 bluetooth::mojom::AdapterClientPtr client) | |
| 13 : client_(std::move(client)), weak_ptr_factory_(this) {} | |
| 14 | |
| 15 BluetoothAdapterService::~BluetoothAdapterService() { | |
| 16 if (adapter_.get()) { | |
| 17 adapter_->RemoveObserver(this); | |
| 18 adapter_ = nullptr; | |
| 19 } | |
| 20 } | |
| 21 | |
| 22 void BluetoothAdapterService::OnGetAdapter( | |
| 23 scoped_refptr<device::BluetoothAdapter> adapter) { | |
| 24 if (!adapter_.get()) { | |
| 25 VLOG(1) << "Adapter acquired in BluetoothAdapterService"; | |
| 26 adapter_ = adapter; | |
| 27 adapter_->AddObserver(this); | |
| 28 } | |
| 29 } | |
| 30 | |
| 31 void BluetoothAdapterService::GetDevices(const GetDevicesCallback& callback) { | |
| 32 if (!GetAdapter().get()) { | |
| 33 if (device::BluetoothAdapterFactory::IsBluetoothAdapterAvailable()) { | |
| 34 device::BluetoothAdapterFactory::GetAdapter( | |
| 35 base::Bind(&BluetoothAdapterService::GetDevicesImpl, | |
| 36 weak_ptr_factory_.GetWeakPtr(), callback)); | |
| 37 return; | |
| 38 } | |
| 39 callback.Run(std::vector<bluetooth::mojom::DeviceInfoPtr>()); | |
| 40 return; | |
| 41 } | |
| 42 GetDevicesImpl(callback, GetAdapter()); | |
| 43 } | |
| 44 | |
| 45 void BluetoothAdapterService::GetDevicesImpl( | |
| 46 const GetDevicesCallback& callback, | |
| 47 scoped_refptr<device::BluetoothAdapter> adapter) { | |
| 48 OnGetAdapter(adapter); | |
| 49 std::vector<bluetooth::mojom::DeviceInfoPtr> devices; | |
| 50 | |
| 51 for (const device::BluetoothDevice* device : adapter->GetDevices()) { | |
| 52 addresses_.insert(device->GetAddress()); | |
| 53 } | |
| 54 | |
| 55 for (const std::string& address : addresses_) { | |
| 56 device::BluetoothDevice* device = adapter->GetDevice(address); | |
| 57 bluetooth::mojom::DeviceInfoPtr device_info = | |
| 58 ConstructDeviceInfoStruct(device); | |
| 59 devices.push_back(std::move(device_info)); | |
| 60 } | |
| 61 | |
| 62 callback.Run(std::move(devices)); | |
| 63 } | |
| 64 | |
| 65 scoped_refptr<device::BluetoothAdapter> BluetoothAdapterService::GetAdapter() { | |
| 66 return adapter_; | |
| 67 } | |
| 68 | |
| 69 void BluetoothAdapterService::DeviceAdded(device::BluetoothAdapter* adapter, | |
| 70 device::BluetoothDevice* device) { | |
| 71 std::string device_address = device->GetAddress(); | |
| 72 | |
| 73 // If unknown address was added, alert client | |
| 74 if (addresses_.insert(device_address).second && client_) { | |
|
scheib
2016/09/26 19:37:27
Do we need this logic here? Why not pass through t
mbrunson
2016/09/28 02:18:22
Done.
| |
| 75 auto device_info = ConstructDeviceInfoStruct(device); | |
| 76 client_->DeviceAdded(std::move(device_info)); | |
| 77 } | |
| 78 } | |
| 79 | |
| 80 void BluetoothAdapterService::DeviceRemoved(device::BluetoothAdapter* adapter, | |
| 81 device::BluetoothDevice* device) { | |
| 82 std::string device_address = device->GetAddress(); | |
| 83 | |
| 84 // If known address was removed, alert client | |
| 85 if (addresses_.erase(device_address) && client_) { | |
| 86 auto device_info = ConstructDeviceInfoStruct(device); | |
| 87 client_->DeviceRemoved(std::move(device_info)); | |
| 88 } | |
| 89 } | |
| 90 | |
| 91 bluetooth::mojom::DeviceInfoPtr | |
| 92 BluetoothAdapterService::ConstructDeviceInfoStruct( | |
| 93 device::BluetoothDevice* device) { | |
| 94 bluetooth::mojom::DeviceInfoPtr device_info = | |
| 95 bluetooth::mojom::DeviceInfo::New(); | |
| 96 | |
| 97 device_info->name = device->GetName(); | |
| 98 device_info->name_for_display = | |
| 99 base::UTF16ToUTF8(device->GetNameForDisplay()); | |
| 100 device_info->id = device->GetIdentifier(); | |
| 101 device_info->address = device->GetAddress(); | |
| 102 | |
| 103 return device_info; | |
| 104 } | |
| OLD | NEW |