| Index: chromeos/components/tether/ble_scanner.cc
|
| diff --git a/chromeos/components/tether/ble_scanner.cc b/chromeos/components/tether/ble_scanner.cc
|
| index 1553a09149521284988465ffddc4871f1769f424..84469711bf30054c9ec379f45b6a3d90eee3ef3f 100644
|
| --- a/chromeos/components/tether/ble_scanner.cc
|
| +++ b/chromeos/components/tether/ble_scanner.cc
|
| @@ -45,71 +45,68 @@ std::string StringToHexOfContents(const std::string& string) {
|
|
|
| } // namespace
|
|
|
| -BleScanner::DelegateImpl::DelegateImpl() {}
|
| +BleScanner::ServiceDataProviderImpl::ServiceDataProviderImpl() {}
|
|
|
| -BleScanner::DelegateImpl::~DelegateImpl() {}
|
| +BleScanner::ServiceDataProviderImpl::~ServiceDataProviderImpl() {}
|
|
|
| -bool BleScanner::DelegateImpl::IsBluetoothAdapterAvailable() const {
|
| - return device::BluetoothAdapterFactory::IsBluetoothAdapterAvailable();
|
| -}
|
| -
|
| -void BleScanner::DelegateImpl::GetAdapter(
|
| - const device::BluetoothAdapterFactory::AdapterCallback& callback) {
|
| - device::BluetoothAdapterFactory::GetAdapter(callback);
|
| -}
|
| -
|
| -const std::vector<uint8_t>* BleScanner::DelegateImpl::GetServiceDataForUUID(
|
| - const device::BluetoothUUID& service_uuid,
|
| +const std::vector<uint8_t>*
|
| +BleScanner::ServiceDataProviderImpl::GetServiceDataForUUID(
|
| device::BluetoothDevice* bluetooth_device) {
|
| - return bluetooth_device->GetServiceDataForUUID(service_uuid);
|
| + return bluetooth_device->GetServiceDataForUUID(
|
| + device::BluetoothUUID(kAdvertisingServiceUuid));
|
| }
|
|
|
| BleScanner::BleScanner(
|
| + scoped_refptr<device::BluetoothAdapter> adapter,
|
| const LocalDeviceDataProvider* local_device_data_provider)
|
| - : BleScanner(base::MakeUnique<DelegateImpl>(),
|
| + : BleScanner(base::MakeUnique<ServiceDataProviderImpl>(),
|
| + adapter,
|
| cryptauth::EidGenerator::GetInstance(),
|
| local_device_data_provider) {}
|
|
|
| -BleScanner::~BleScanner() {}
|
| -
|
| BleScanner::BleScanner(
|
| - std::unique_ptr<Delegate> delegate,
|
| + std::unique_ptr<ServiceDataProvider> service_data_provider,
|
| + scoped_refptr<device::BluetoothAdapter> adapter,
|
| const cryptauth::EidGenerator* eid_generator,
|
| const LocalDeviceDataProvider* local_device_data_provider)
|
| - : delegate_(std::move(delegate)),
|
| + : service_data_provider_(std::move(service_data_provider)),
|
| + adapter_(adapter),
|
| eid_generator_(eid_generator),
|
| local_device_data_provider_(local_device_data_provider),
|
| - is_initializing_adapter_(false),
|
| is_initializing_discovery_session_(false),
|
| discovery_session_(nullptr),
|
| - weak_ptr_factory_(this) {}
|
| + weak_ptr_factory_(this) {
|
| + adapter_->AddObserver(this);
|
| +}
|
| +
|
| +BleScanner::~BleScanner() {
|
| + adapter_->RemoveObserver(this);
|
| +}
|
|
|
| bool BleScanner::RegisterScanFilterForDevice(
|
| const cryptauth::RemoteDevice& remote_device) {
|
| - if (!delegate_->IsBluetoothAdapterAvailable()) {
|
| - PA_LOG(ERROR) << "Bluetooth is not supported on this platform.";
|
| - return false;
|
| - }
|
| -
|
| if (registered_remote_devices_.size() >= kMaxConcurrentAdvertisements) {
|
| // Each scan filter corresponds to an advertisement. Thus, the number of
|
| // concurrent advertisements cannot exceed the maximum number of concurrent
|
| // advertisements.
|
| + PA_LOG(WARNING) << "Attempted to start a scan for a new device when the "
|
| + << "maximum number of devices have already been "
|
| + << "registered.";
|
| return false;
|
| }
|
|
|
| std::vector<cryptauth::BeaconSeed> local_device_beacon_seeds;
|
| if (!local_device_data_provider_->GetLocalDeviceData(
|
| nullptr, &local_device_beacon_seeds)) {
|
| - // If the local device's beacon seeds could not be fetched, a scan filter
|
| - // cannot be generated.
|
| + PA_LOG(WARNING) << "Error fetching the local device's beacon seeds. Cannot "
|
| + << "generate scan without beacon seeds.";
|
| return false;
|
| }
|
|
|
| std::unique_ptr<cryptauth::EidGenerator::EidData> scan_filters =
|
| eid_generator_->GenerateBackgroundScanFilter(local_device_beacon_seeds);
|
| if (!scan_filters) {
|
| - // If a background scan filter cannot be generated, give up.
|
| + PA_LOG(WARNING) << "Error generating background scan filters. Cannot scan";
|
| return false;
|
| }
|
|
|
| @@ -177,13 +174,6 @@ void BleScanner::UpdateDiscoveryStatus() {
|
| return;
|
| }
|
|
|
| - if (is_initializing_adapter_) {
|
| - return;
|
| - } else if (!adapter_) {
|
| - InitializeBluetoothAdapter();
|
| - return;
|
| - }
|
| -
|
| if (!adapter_->IsPowered()) {
|
| // If the adapter has powered off, no devices can be discovered.
|
| StopDiscoverySession();
|
| @@ -198,26 +188,6 @@ void BleScanner::UpdateDiscoveryStatus() {
|
| }
|
| }
|
|
|
| -void BleScanner::InitializeBluetoothAdapter() {
|
| - PA_LOG(INFO) << "Initializing Bluetooth adapter.";
|
| - is_initializing_adapter_ = true;
|
| - delegate_->GetAdapter(base::Bind(&BleScanner::OnAdapterInitialized,
|
| - weak_ptr_factory_.GetWeakPtr()));
|
| -}
|
| -
|
| -void BleScanner::OnAdapterInitialized(
|
| - scoped_refptr<device::BluetoothAdapter> adapter) {
|
| - DCHECK(is_initializing_adapter_ && !discovery_session_ &&
|
| - !is_initializing_discovery_session_);
|
| - PA_LOG(INFO) << "Bluetooth adapter initialized.";
|
| - is_initializing_adapter_ = false;
|
| -
|
| - adapter_ = adapter;
|
| - adapter_->AddObserver(this);
|
| -
|
| - UpdateDiscoveryStatus();
|
| -}
|
| -
|
| void BleScanner::StartDiscoverySession() {
|
| DCHECK(adapter_);
|
| PA_LOG(INFO) << "Starting discovery session.";
|
| @@ -262,8 +232,8 @@ void BleScanner::HandleDeviceUpdated(
|
| device::BluetoothDevice* bluetooth_device) {
|
| DCHECK(bluetooth_device);
|
|
|
| - const std::vector<uint8_t>* service_data = delegate_->GetServiceDataForUUID(
|
| - device::BluetoothUUID(kAdvertisingServiceUuid), bluetooth_device);
|
| + const std::vector<uint8_t>* service_data =
|
| + service_data_provider_->GetServiceDataForUUID(bluetooth_device);
|
| if (!service_data || service_data->size() < kMinNumBytesInServiceData) {
|
| // If there is no service data or the service data is of insufficient
|
| // length, there is not enough information to create a connection.
|
|
|