diff --git a/chromecast/device/bluetooth/le/gatt_client_manager_impl.cc b/chromecast/device/bluetooth/le/gatt_client_manager_impl.cc index f7965a4d5b1606..c5aa4321f78dba 100644 --- a/chromecast/device/bluetooth/le/gatt_client_manager_impl.cc +++ b/chromecast/device/bluetooth/le/gatt_client_manager_impl.cc @@ -158,6 +158,12 @@ void GattClientManagerImpl::EnqueueReadRemoteRssiRequest( } } +bool GattClientManagerImpl::IsConnectedLeDevice( + const bluetooth_v2_shlib::Addr& addr) { + DCHECK(io_task_runner_->BelongsToCurrentThread()); + return connected_devices_.find(addr) != connected_devices_.end(); +} + scoped_refptr GattClientManagerImpl::task_runner() { return io_task_runner_; diff --git a/chromecast/device/bluetooth/le/gatt_client_manager_impl.h b/chromecast/device/bluetooth/le/gatt_client_manager_impl.h index a45553aaceb874..4ccab6dcd4320d 100644 --- a/chromecast/device/bluetooth/le/gatt_client_manager_impl.h +++ b/chromecast/device/bluetooth/le/gatt_client_manager_impl.h @@ -62,6 +62,9 @@ class GattClientManagerImpl // serially. void EnqueueReadRemoteRssiRequest(const bluetooth_v2_shlib::Addr& addr); + // True if it is a connected BLE device. Must be called on IO task runner. + bool IsConnectedLeDevice(const bluetooth_v2_shlib::Addr& addr); + // TODO(bcf): Should be private and passed into objects which need it (e.g. // RemoteDevice, RemoteCharacteristic). bluetooth_v2_shlib::GattClient* gatt_client() const { return gatt_client_; } diff --git a/chromecast/device/bluetooth/le/gatt_client_manager_impl_test.cc b/chromecast/device/bluetooth/le/gatt_client_manager_impl_test.cc index 3f044573b53fa4..d95511a0188674 100644 --- a/chromecast/device/bluetooth/le/gatt_client_manager_impl_test.cc +++ b/chromecast/device/bluetooth/le/gatt_client_manager_impl_test.cc @@ -250,6 +250,7 @@ TEST_F(GattClientManagerTest, RemoteDeviceConnect) { scoped_refptr device = GetDevice(kTestAddr1); EXPECT_FALSE(device->IsConnected()); + EXPECT_FALSE(gatt_client_manager_->IsConnectedLeDevice(kTestAddr1)); EXPECT_EQ(kTestAddr1, device->addr()); // These should fail if we're not connected. @@ -280,6 +281,7 @@ TEST_F(GattClientManagerTest, RemoteDeviceConnect) { delegate->OnGetServices(kTestAddr1, {}); EXPECT_TRUE(device->IsConnected()); + EXPECT_TRUE(gatt_client_manager_->IsConnectedLeDevice(kTestAddr1)); base::MockCallback< base::OnceCallback>)>> @@ -298,6 +300,8 @@ TEST_F(GattClientManagerTest, RemoteDeviceConnect) { delegate->OnConnectChanged(kTestAddr1, true /* status */, false /* connected */); EXPECT_FALSE(device->IsConnected()); + EXPECT_FALSE(gatt_client_manager_->IsConnectedLeDevice(kTestAddr1)); + fake_task_runner_->RunUntilIdle(); }