Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Side by Side Diff: chrome/browser/ui/webui/bluetooth_internals/services/bluetooth_adapter_service.cc

Issue 2357383002: bluetooth: Add device list retrieval for chrome://bluetooth-internals (Closed)
Patch Set: Mojo interface and implementation fixes Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698