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

Unified Diff: components/proximity_auth/ble/bluetooth_low_energy_connection_finder.cc

Issue 1277483007: Implement finding BLE connections in chrome://proximity-auth. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: refactor unit test Created 5 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: components/proximity_auth/ble/bluetooth_low_energy_connection_finder.cc
diff --git a/components/proximity_auth/ble/bluetooth_low_energy_connection_finder.cc b/components/proximity_auth/ble/bluetooth_low_energy_connection_finder.cc
index 420500f835164e10d34bf340c0cc85e059354514..9513f991907ca231ad0e9040c802716169929625 100644
--- a/components/proximity_auth/ble/bluetooth_low_energy_connection_finder.cc
+++ b/components/proximity_auth/ble/bluetooth_low_energy_connection_finder.cc
@@ -114,15 +114,17 @@ void BluetoothLowEnergyConnectionFinder::DeviceChanged(
BluetoothDevice* device) {
DCHECK_EQ(adapter_.get(), adapter);
DCHECK(device);
- PA_LOG(INFO) << "Device changed: " << device->GetAddress();
// Note: Only consider |device| when it was actually added/updated during a
// scanning, otherwise the device is stale and the GATT connection will fail.
// For instance, when |adapter_| change status from unpowered to powered,
// |DeviceAdded| is called for each paired |device|.
if (adapter_->IsPowered() && discovery_session_ &&
- discovery_session_->IsActive())
+ discovery_session_->IsActive()) {
+ if (device_whitelist_->HasDeviceWithAddress(device->GetAddress()))
+ PA_LOG(INFO) << "Whitelisted device changed: " << device->GetAddress();
HandleDeviceUpdated(device);
+ }
}
void BluetoothLowEnergyConnectionFinder::HandleDeviceUpdated(
@@ -266,11 +268,14 @@ void BluetoothLowEnergyConnectionFinder::OnConnectionStatusChanged(
adapter_->RemoveObserver(this);
connection_->RemoveObserver(this);
- // Note: any observer of |connection_| added in |connection_callback_| will
- // also receive this |OnConnectionStatusChanged| notification (IN_PROGRESS
- // -> CONNECTED).
- connection_callback_.Run(connection_.Pass());
- connection_callback_.Reset();
+ // If we invoke the callback now, the callback function may install its own
+ // observer to |connection_|. Because we are in the ConnectionObserver
+ // callstack, this new observer will receive this connection event.
+ // Therefore, we need to invoke the callback asynchronously.
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE,
+ base::Bind(&BluetoothLowEnergyConnectionFinder::InvokeCallbackAsync,
+ weak_ptr_factory_.GetWeakPtr()));
} else if (old_status == Connection::IN_PROGRESS) {
PA_LOG(WARNING) << "Connection failed. Retrying.";
RestartDiscoverySessionWhenReady();
@@ -315,4 +320,8 @@ BluetoothDevice* BluetoothLowEnergyConnectionFinder::GetDevice(
return nullptr;
}
+void BluetoothLowEnergyConnectionFinder::InvokeCallbackAsync() {
+ connection_callback_.Run(connection_.Pass());
+}
+
} // namespace proximity_auth

Powered by Google App Engine
This is Rietveld 408576698