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

Side by Side Diff: content/browser/bluetooth/bluetooth_adapter_factory_wrapper.cc

Issue 1922923002: bluetooth: Move requestDevice to mojo (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bluetooth-separate-tests-request-device
Patch Set: Remove debug log Created 4 years, 7 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 "content/browser/bluetooth/bluetooth_adapter_factory_wrapper.h"
6
7 #include <stddef.h>
8
9 #include <utility>
10
11 #include "base/thread_task_runner_handle.h"
12 #include "content/public/browser/browser_thread.h"
13 #include "device/bluetooth/bluetooth_adapter_factory.h"
14
15 using device::BluetoothAdapter;
16 using device::BluetoothAdapterFactory;
17
18 namespace {
19 // TODO(ortuno): Once we have a chooser for scanning and a way to control that
20 // chooser from tests we should delete this constant.
21 // https://crbug.com/436280
22 enum { kTestingScanDuration = 0 }; // No need to wait when testing.
23 enum { kScanDuration = 10 };
24 } // namespace
25
26 namespace content {
27
28 BluetoothAdapterFactoryWrapper::BluetoothAdapterFactoryWrapper()
29 : scan_duration_(kScanDuration), testing_(false), weak_ptr_factory_(this) {
30 DCHECK_CURRENTLY_ON(BrowserThread::UI);
31 }
32
33 BluetoothAdapterFactoryWrapper::~BluetoothAdapterFactoryWrapper() {
34 DCHECK_CURRENTLY_ON(BrowserThread::UI);
35 // All observers should have been removed already.
36 DCHECK(adapter_observers_.empty());
37 // Clear adapter.
38 set_adapter(scoped_refptr<device::BluetoothAdapter>());
39 }
40
41 bool BluetoothAdapterFactoryWrapper::IsBluetoothAdapterAvailable() {
42 DCHECK_CURRENTLY_ON(BrowserThread::UI);
43 return BluetoothAdapterFactory::IsBluetoothAdapterAvailable() || testing_;
44 }
45
46 void BluetoothAdapterFactoryWrapper::AcquireAdapter(
47 device::BluetoothAdapter::Observer* observer,
48 const base::Closure& continuation) {
49 DCHECK_CURRENTLY_ON(BrowserThread::UI);
50 DCHECK(!GetAdapter(observer));
51
52 AddAdapterObserver(observer);
53 if (adapter_.get()) {
54 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, continuation);
55 return;
56 }
57
58 DCHECK(BluetoothAdapterFactory::IsBluetoothAdapterAvailable());
59 BluetoothAdapterFactory::GetAdapter(
60 base::Bind(&BluetoothAdapterFactoryWrapper::OnGetAdapter,
61 weak_ptr_factory_.GetWeakPtr(), continuation));
62 }
63
64 void BluetoothAdapterFactoryWrapper::ReleaseAdapter(
65 device::BluetoothAdapter::Observer* observer) {
66 DCHECK_CURRENTLY_ON(BrowserThread::UI);
67 if (!HasAdapter(observer)) {
68 return;
69 }
70 RemoveAdapterObserver(observer);
71 if (adapter_observers_.empty())
72 set_adapter(scoped_refptr<device::BluetoothAdapter>());
73 }
74
75 BluetoothAdapter* BluetoothAdapterFactoryWrapper::GetAdapter(
76 device::BluetoothAdapter::Observer* observer) {
77 DCHECK_CURRENTLY_ON(BrowserThread::UI);
78 if (HasAdapter(observer)) {
79 return adapter_.get();
80 }
81 return nullptr;
82 }
83
84 void BluetoothAdapterFactoryWrapper::SetBluetoothAdapterForTesting(
85 scoped_refptr<device::BluetoothAdapter> mock_adapter) {
86 DCHECK_CURRENTLY_ON(BrowserThread::UI);
87 scan_duration_ = kTestingScanDuration;
88 testing_ = true;
89 set_adapter(std::move(mock_adapter));
90 }
91
92 void BluetoothAdapterFactoryWrapper::OnGetAdapter(
93 const base::Closure& continuation,
94 scoped_refptr<device::BluetoothAdapter> adapter) {
95 DCHECK_CURRENTLY_ON(BrowserThread::UI);
96 set_adapter(adapter);
97 continuation.Run();
98 }
99
100 bool BluetoothAdapterFactoryWrapper::HasAdapter(
101 device::BluetoothAdapter::Observer* observer) {
102 DCHECK_CURRENTLY_ON(BrowserThread::UI);
103 return ContainsKey(adapter_observers_, observer);
104 }
105
106 void BluetoothAdapterFactoryWrapper::AddAdapterObserver(
107 device::BluetoothAdapter::Observer* observer) {
108 DCHECK_CURRENTLY_ON(BrowserThread::UI);
109 auto iter = adapter_observers_.insert(observer);
110 DCHECK(iter.second);
111 if (adapter_) {
112 adapter_->AddObserver(observer);
113 }
114 }
115
116 void BluetoothAdapterFactoryWrapper::RemoveAdapterObserver(
117 device::BluetoothAdapter::Observer* observer) {
118 DCHECK_CURRENTLY_ON(BrowserThread::UI);
119 size_t removed = adapter_observers_.erase(observer);
120 DCHECK(removed);
121 if (adapter_) {
122 adapter_->RemoveObserver(observer);
123 }
124 }
125
126 void BluetoothAdapterFactoryWrapper::set_adapter(
127 scoped_refptr<device::BluetoothAdapter> adapter) {
128 DCHECK_CURRENTLY_ON(BrowserThread::UI);
129 if (adapter_.get()) {
130 for (device::BluetoothAdapter::Observer* observer : adapter_observers_) {
131 adapter_->RemoveObserver(observer);
132 }
133 }
134 adapter_ = adapter;
135 if (adapter_.get()) {
136 for (device::BluetoothAdapter::Observer* observer : adapter_observers_) {
137 adapter_->AddObserver(observer);
138 }
139 }
140 }
141
142 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698