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

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

Issue 2372433002: POC for adapter service (Closed)
Patch Set: 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 #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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698