OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/pairing/bluetooth_host_pairing_controller.h" | 5 #include "components/pairing/bluetooth_host_pairing_controller.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/hash.h" | 8 #include "base/hash.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| 11 #include "base/task_runner_util.h" |
11 #include "chromeos/system/devicetype.h" | 12 #include "chromeos/system/devicetype.h" |
12 #include "components/pairing/bluetooth_pairing_constants.h" | 13 #include "components/pairing/bluetooth_pairing_constants.h" |
13 #include "components/pairing/pairing_api.pb.h" | 14 #include "components/pairing/pairing_api.pb.h" |
14 #include "components/pairing/proto_decoder.h" | 15 #include "components/pairing/proto_decoder.h" |
15 #include "device/bluetooth/bluetooth_adapter_factory.h" | 16 #include "device/bluetooth/bluetooth_adapter_factory.h" |
16 #include "net/base/io_buffer.h" | 17 #include "net/base/io_buffer.h" |
17 | 18 |
18 namespace pairing_chromeos { | 19 namespace pairing_chromeos { |
19 | 20 |
20 namespace { | 21 namespace { |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 case HostPairingController::ENROLLMENT_STATUS_FAILURE: | 82 case HostPairingController::ENROLLMENT_STATUS_FAILURE: |
82 return pairing_api::HostStatusParameters::ENROLLMENT_STATUS_FAILURE; | 83 return pairing_api::HostStatusParameters::ENROLLMENT_STATUS_FAILURE; |
83 case HostPairingController::ENROLLMENT_STATUS_SUCCESS: | 84 case HostPairingController::ENROLLMENT_STATUS_SUCCESS: |
84 return pairing_api::HostStatusParameters::ENROLLMENT_STATUS_SUCCESS; | 85 return pairing_api::HostStatusParameters::ENROLLMENT_STATUS_SUCCESS; |
85 default: | 86 default: |
86 NOTREACHED(); | 87 NOTREACHED(); |
87 return pairing_api::HostStatusParameters::ENROLLMENT_STATUS_UNKNOWN; | 88 return pairing_api::HostStatusParameters::ENROLLMENT_STATUS_UNKNOWN; |
88 } | 89 } |
89 } | 90 } |
90 | 91 |
| 92 std::vector<BluetoothHostPairingController::InputDeviceInfo> GetDevices() { |
| 93 std::vector<BluetoothHostPairingController::InputDeviceInfo> devices; |
| 94 if (device::InputServiceLinux::HasInstance()) |
| 95 device::InputServiceLinux::GetInstance()->GetDevices(&devices); |
| 96 return devices; |
| 97 } |
| 98 |
91 } // namespace | 99 } // namespace |
92 | 100 |
93 BluetoothHostPairingController::BluetoothHostPairingController() | 101 BluetoothHostPairingController::BluetoothHostPairingController( |
| 102 const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner) |
94 : current_stage_(STAGE_NONE), | 103 : current_stage_(STAGE_NONE), |
95 connectivity_status_(CONNECTIVITY_UNTESTED), | 104 connectivity_status_(CONNECTIVITY_UNTESTED), |
96 update_status_(UPDATE_STATUS_UNKNOWN), | 105 update_status_(UPDATE_STATUS_UNKNOWN), |
97 enrollment_status_(ENROLLMENT_STATUS_UNKNOWN), | 106 enrollment_status_(ENROLLMENT_STATUS_UNKNOWN), |
98 proto_decoder_(new ProtoDecoder(this)), | 107 proto_decoder_(new ProtoDecoder(this)), |
| 108 file_task_runner_(file_task_runner), |
99 ptr_factory_(this) {} | 109 ptr_factory_(this) {} |
100 | 110 |
101 BluetoothHostPairingController::~BluetoothHostPairingController() { | 111 BluetoothHostPairingController::~BluetoothHostPairingController() { |
102 Reset(); | 112 Reset(); |
103 } | 113 } |
104 | 114 |
105 void BluetoothHostPairingController::ChangeStage(Stage new_stage) { | 115 void BluetoothHostPairingController::ChangeStage(Stage new_stage) { |
106 if (current_stage_ == new_stage) | 116 if (current_stage_ == new_stage) |
107 return; | 117 return; |
108 VLOG(1) << "ChangeStage " << new_stage; | 118 VLOG(1) << "ChangeStage " << new_stage; |
(...skipping 29 matching lines...) Expand all Loading... |
138 io_buffer, size, | 148 io_buffer, size, |
139 base::Bind(&BluetoothHostPairingController::OnSendComplete, | 149 base::Bind(&BluetoothHostPairingController::OnSendComplete, |
140 ptr_factory_.GetWeakPtr()), | 150 ptr_factory_.GetWeakPtr()), |
141 base::Bind(&BluetoothHostPairingController::OnSendError, | 151 base::Bind(&BluetoothHostPairingController::OnSendError, |
142 ptr_factory_.GetWeakPtr())); | 152 ptr_factory_.GetWeakPtr())); |
143 } | 153 } |
144 | 154 |
145 void BluetoothHostPairingController::Reset() { | 155 void BluetoothHostPairingController::Reset() { |
146 if (controller_socket_.get()) { | 156 if (controller_socket_.get()) { |
147 controller_socket_->Close(); | 157 controller_socket_->Close(); |
148 controller_socket_ = NULL; | 158 controller_socket_ = nullptr; |
149 } | 159 } |
150 | 160 |
151 if (service_socket_.get()) { | 161 if (service_socket_.get()) { |
152 service_socket_->Close(); | 162 service_socket_->Close(); |
153 service_socket_ = NULL; | 163 service_socket_ = nullptr; |
154 } | 164 } |
155 | 165 |
156 if (adapter_.get()) { | 166 if (adapter_.get()) { |
157 if (adapter_->IsDiscoverable()) { | 167 if (adapter_->IsDiscoverable()) { |
158 adapter_->SetDiscoverable(false, base::Bind(&base::DoNothing), | 168 adapter_->SetDiscoverable(false, base::Bind(&base::DoNothing), |
159 base::Bind(&base::DoNothing)); | 169 base::Bind(&base::DoNothing)); |
160 } | 170 } |
161 if (!was_powered_) { | 171 |
162 adapter_->SetPowered(false, base::Bind(&base::DoNothing), | 172 base::PostTaskAndReplyWithResult( |
163 base::Bind(&base::DoNothing)); | 173 file_task_runner_.get(), FROM_HERE, base::Bind(&GetDevices), |
164 } | 174 base::Bind(&BluetoothHostPairingController::PowerOffAdapterIfApplicable, |
165 adapter_->RemoveObserver(this); | 175 ptr_factory_.GetWeakPtr())); |
166 adapter_ = NULL; | |
167 } | 176 } |
168 ChangeStage(STAGE_NONE); | 177 ChangeStage(STAGE_NONE); |
169 } | 178 } |
170 | 179 |
171 void BluetoothHostPairingController::OnGetAdapter( | 180 void BluetoothHostPairingController::OnGetAdapter( |
172 scoped_refptr<device::BluetoothAdapter> adapter) { | 181 scoped_refptr<device::BluetoothAdapter> adapter) { |
173 DCHECK(thread_checker_.CalledOnValidThread()); | 182 DCHECK(thread_checker_.CalledOnValidThread()); |
174 DCHECK(!adapter_.get()); | 183 DCHECK(!adapter_.get()); |
175 adapter_ = adapter; | 184 adapter_ = adapter; |
176 | 185 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 scoped_refptr<device::BluetoothSocket> socket) { | 261 scoped_refptr<device::BluetoothSocket> socket) { |
253 DCHECK(thread_checker_.CalledOnValidThread()); | 262 DCHECK(thread_checker_.CalledOnValidThread()); |
254 adapter_->SetDiscoverable( | 263 adapter_->SetDiscoverable( |
255 false, | 264 false, |
256 base::Bind(&BluetoothHostPairingController::OnSetDiscoverable, | 265 base::Bind(&BluetoothHostPairingController::OnSetDiscoverable, |
257 ptr_factory_.GetWeakPtr(), false), | 266 ptr_factory_.GetWeakPtr(), false), |
258 base::Bind(&BluetoothHostPairingController::OnSetError, | 267 base::Bind(&BluetoothHostPairingController::OnSetError, |
259 ptr_factory_.GetWeakPtr())); | 268 ptr_factory_.GetWeakPtr())); |
260 | 269 |
261 controller_socket_ = socket; | 270 controller_socket_ = socket; |
262 service_socket_ = NULL; | 271 service_socket_ = nullptr; |
263 | 272 |
264 SendHostStatus(); | 273 SendHostStatus(); |
265 | 274 |
266 controller_socket_->Receive( | 275 controller_socket_->Receive( |
267 kReceiveSize, | 276 kReceiveSize, |
268 base::Bind(&BluetoothHostPairingController::OnReceiveComplete, | 277 base::Bind(&BluetoothHostPairingController::OnReceiveComplete, |
269 ptr_factory_.GetWeakPtr()), | 278 ptr_factory_.GetWeakPtr()), |
270 base::Bind(&BluetoothHostPairingController::OnReceiveError, | 279 base::Bind(&BluetoothHostPairingController::OnReceiveError, |
271 ptr_factory_.GetWeakPtr())); | 280 ptr_factory_.GetWeakPtr())); |
272 } | 281 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
315 | 324 |
316 void BluetoothHostPairingController::OnSendError( | 325 void BluetoothHostPairingController::OnSendError( |
317 const std::string& error_message) { | 326 const std::string& error_message) { |
318 LOG(ERROR) << error_message; | 327 LOG(ERROR) << error_message; |
319 if (enrollment_status_ != ENROLLMENT_STATUS_ENROLLING && | 328 if (enrollment_status_ != ENROLLMENT_STATUS_ENROLLING && |
320 enrollment_status_ != ENROLLMENT_STATUS_SUCCESS) { | 329 enrollment_status_ != ENROLLMENT_STATUS_SUCCESS) { |
321 ChangeStage(STAGE_CONTROLLER_CONNECTION_ERROR); | 330 ChangeStage(STAGE_CONTROLLER_CONNECTION_ERROR); |
322 } | 331 } |
323 } | 332 } |
324 | 333 |
| 334 void BluetoothHostPairingController::PowerOffAdapterIfApplicable( |
| 335 const std::vector<InputDeviceInfo>& devices) { |
| 336 bool use_bluetooth = false; |
| 337 for (const auto& device : devices) { |
| 338 if (device.type == InputDeviceInfo::TYPE_BLUETOOTH) { |
| 339 use_bluetooth = true; |
| 340 break; |
| 341 } |
| 342 } |
| 343 if (!was_powered_ && !use_bluetooth) { |
| 344 adapter_->SetPowered(false, base::Bind(&base::DoNothing), |
| 345 base::Bind(&base::DoNothing)); |
| 346 } |
| 347 adapter_->RemoveObserver(this); |
| 348 adapter_ = nullptr; |
| 349 } |
| 350 |
325 void BluetoothHostPairingController::OnReceiveError( | 351 void BluetoothHostPairingController::OnReceiveError( |
326 device::BluetoothSocket::ErrorReason reason, | 352 device::BluetoothSocket::ErrorReason reason, |
327 const std::string& error_message) { | 353 const std::string& error_message) { |
328 LOG(ERROR) << reason << ", " << error_message; | 354 LOG(ERROR) << reason << ", " << error_message; |
329 ChangeStage(STAGE_CONTROLLER_CONNECTION_ERROR); | 355 ChangeStage(STAGE_CONTROLLER_CONNECTION_ERROR); |
330 } | 356 } |
331 | 357 |
332 void BluetoothHostPairingController::OnHostStatusMessage( | 358 void BluetoothHostPairingController::OnHostStatusMessage( |
333 const pairing_api::HostStatus& message) { | 359 const pairing_api::HostStatus& message) { |
334 NOTREACHED(); | 360 NOTREACHED(); |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 ChangeStage(STAGE_WAITING_FOR_CODE_CONFIRMATION); | 536 ChangeStage(STAGE_WAITING_FOR_CODE_CONFIRMATION); |
511 } | 537 } |
512 | 538 |
513 void BluetoothHostPairingController::AuthorizePairing( | 539 void BluetoothHostPairingController::AuthorizePairing( |
514 device::BluetoothDevice* device) { | 540 device::BluetoothDevice* device) { |
515 // Disallow unknown device. | 541 // Disallow unknown device. |
516 device->RejectPairing(); | 542 device->RejectPairing(); |
517 } | 543 } |
518 | 544 |
519 } // namespace pairing_chromeos | 545 } // namespace pairing_chromeos |
OLD | NEW |