| Index: components/pairing/bluetooth_host_pairing_controller.cc
|
| diff --git a/components/pairing/bluetooth_host_pairing_controller.cc b/components/pairing/bluetooth_host_pairing_controller.cc
|
| index 98f85b731e3a648dc7614a0314b48fea446a4155..dec2cc348ba8df3ec3a2315868eb5cc11e6958c1 100644
|
| --- a/components/pairing/bluetooth_host_pairing_controller.cc
|
| +++ b/components/pairing/bluetooth_host_pairing_controller.cc
|
| @@ -8,6 +8,7 @@
|
| #include "base/hash.h"
|
| #include "base/logging.h"
|
| #include "base/strings/stringprintf.h"
|
| +#include "base/task_runner_util.h"
|
| #include "chromeos/system/devicetype.h"
|
| #include "components/pairing/bluetooth_pairing_constants.h"
|
| #include "components/pairing/pairing_api.pb.h"
|
| @@ -88,14 +89,23 @@ pairing_api::HostStatusParameters::EnrollmentStatus PairingApiEnrollmentStatus(
|
| }
|
| }
|
|
|
| +std::vector<BluetoothHostPairingController::InputDeviceInfo> GetDevices() {
|
| + std::vector<BluetoothHostPairingController::InputDeviceInfo> devices;
|
| + if (device::InputServiceLinux::HasInstance())
|
| + device::InputServiceLinux::GetInstance()->GetDevices(&devices);
|
| + return devices;
|
| +}
|
| +
|
| } // namespace
|
|
|
| -BluetoothHostPairingController::BluetoothHostPairingController()
|
| +BluetoothHostPairingController::BluetoothHostPairingController(
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner)
|
| : current_stage_(STAGE_NONE),
|
| connectivity_status_(CONNECTIVITY_UNTESTED),
|
| update_status_(UPDATE_STATUS_UNKNOWN),
|
| enrollment_status_(ENROLLMENT_STATUS_UNKNOWN),
|
| proto_decoder_(new ProtoDecoder(this)),
|
| + file_task_runner_(file_task_runner),
|
| ptr_factory_(this) {}
|
|
|
| BluetoothHostPairingController::~BluetoothHostPairingController() {
|
| @@ -145,12 +155,12 @@ void BluetoothHostPairingController::SendHostStatus() {
|
| void BluetoothHostPairingController::Reset() {
|
| if (controller_socket_.get()) {
|
| controller_socket_->Close();
|
| - controller_socket_ = NULL;
|
| + controller_socket_ = nullptr;
|
| }
|
|
|
| if (service_socket_.get()) {
|
| service_socket_->Close();
|
| - service_socket_ = NULL;
|
| + service_socket_ = nullptr;
|
| }
|
|
|
| if (adapter_.get()) {
|
| @@ -158,12 +168,11 @@ void BluetoothHostPairingController::Reset() {
|
| adapter_->SetDiscoverable(false, base::Bind(&base::DoNothing),
|
| base::Bind(&base::DoNothing));
|
| }
|
| - if (!was_powered_) {
|
| - adapter_->SetPowered(false, base::Bind(&base::DoNothing),
|
| - base::Bind(&base::DoNothing));
|
| - }
|
| - adapter_->RemoveObserver(this);
|
| - adapter_ = NULL;
|
| +
|
| + base::PostTaskAndReplyWithResult(
|
| + file_task_runner_.get(), FROM_HERE, base::Bind(&GetDevices),
|
| + base::Bind(&BluetoothHostPairingController::PowerOffAdapterIfApplicable,
|
| + ptr_factory_.GetWeakPtr()));
|
| }
|
| ChangeStage(STAGE_NONE);
|
| }
|
| @@ -259,7 +268,7 @@ void BluetoothHostPairingController::OnAccept(
|
| ptr_factory_.GetWeakPtr()));
|
|
|
| controller_socket_ = socket;
|
| - service_socket_ = NULL;
|
| + service_socket_ = nullptr;
|
|
|
| SendHostStatus();
|
|
|
| @@ -322,6 +331,23 @@ void BluetoothHostPairingController::OnSendError(
|
| }
|
| }
|
|
|
| +void BluetoothHostPairingController::PowerOffAdapterIfApplicable(
|
| + const std::vector<InputDeviceInfo>& devices) {
|
| + bool use_bluetooth = false;
|
| + for (const auto& device : devices) {
|
| + if (device.type == InputDeviceInfo::TYPE_BLUETOOTH) {
|
| + use_bluetooth = true;
|
| + break;
|
| + }
|
| + }
|
| + if (!was_powered_ && !use_bluetooth) {
|
| + adapter_->SetPowered(false, base::Bind(&base::DoNothing),
|
| + base::Bind(&base::DoNothing));
|
| + }
|
| + adapter_->RemoveObserver(this);
|
| + adapter_ = nullptr;
|
| +}
|
| +
|
| void BluetoothHostPairingController::OnReceiveError(
|
| device::BluetoothSocket::ErrorReason reason,
|
| const std::string& error_message) {
|
|
|