Commit 3d37a24b authored by Ryan Hansberry's avatar Ryan Hansberry Committed by Commit Bot

[Nearby] Tweak BT Classic discovery to filter out BLE advertisements.

Keep BluetoothDevices discovered by BluetoothClassicMedium distinct
from BlePeripherals discovered by BleMedium.

Bug: b:154849033
Change-Id: I4f77a21b6a0f5fec29131cbc2c2d4e39d247baed
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2370093
Commit-Queue: Ryan Hansberry <hansberry@chromium.org>
Reviewed-by: default avatarJames Vecore <vecore@google.com>
Cr-Commit-Position: refs/heads/master@{#801940}
parent abc1c888
...@@ -147,6 +147,14 @@ void BluetoothClassicMedium::DeviceAdded( ...@@ -147,6 +147,14 @@ void BluetoothClassicMedium::DeviceAdded(
return; return;
} }
// Best-effort attempt to filter out BLE advertisements. BLE advertisements
// represented as "devices" may have their |name| set if the system has
// created a GATT connection to the advertiser, but all BT Classic devices
// that we are interested in must have their |name| set. See BleMedium
// for separate discovery of BLE advertisements (BlePeripherals).
if (!device->name)
return;
const std::string& address = device->address; const std::string& address = device->address;
if (base::Contains(discovered_bluetooth_devices_map_, address)) { if (base::Contains(discovered_bluetooth_devices_map_, address)) {
auto& bluetooth_device = discovered_bluetooth_devices_map_.at(address); auto& bluetooth_device = discovered_bluetooth_devices_map_.at(address);
......
...@@ -155,7 +155,8 @@ TEST_F(BluetoothClassicMediumTest, TestDiscovery_StartDiscoveryError) { ...@@ -155,7 +155,8 @@ TEST_F(BluetoothClassicMediumTest, TestDiscovery_StartDiscoveryError) {
EXPECT_FALSE(fake_adapter_->IsDiscoverySessionActive()); EXPECT_FALSE(fake_adapter_->IsDiscoverySessionActive());
} }
TEST_F(BluetoothClassicMediumTest, TestDiscovery_DeviceDiscovered) { TEST_F(BluetoothClassicMediumTest,
TestDiscovery_DeviceDiscovered_BluetoothClassicDevice) {
StartDiscovery(); StartDiscovery();
NotifyDeviceAdded(kDeviceAddress1, kDeviceName1); NotifyDeviceAdded(kDeviceAddress1, kDeviceName1);
...@@ -170,6 +171,25 @@ TEST_F(BluetoothClassicMediumTest, TestDiscovery_DeviceDiscovered) { ...@@ -170,6 +171,25 @@ TEST_F(BluetoothClassicMediumTest, TestDiscovery_DeviceDiscovered) {
StopDiscovery(); StopDiscovery();
} }
TEST_F(BluetoothClassicMediumTest,
TestDiscovery_DeviceDiscovered_BleAdvertisement) {
StartDiscovery();
on_device_discovered_callback_ = base::BindOnce([]() { FAIL(); });
// Do not set |name|. This reflects Chrome's usual representation of a BLE
// advertisement.
auto device_info = bluetooth::mojom::DeviceInfo::New();
device_info->address = kDeviceAddress1;
device_info->name_for_display = kDeviceAddress1;
fake_adapter_->NotifyDeviceAdded(std::move(device_info));
EXPECT_FALSE(last_device_discovered_);
StopDiscovery();
}
TEST_F(BluetoothClassicMediumTest, TestDiscovery_DeviceNameChanged) { TEST_F(BluetoothClassicMediumTest, TestDiscovery_DeviceNameChanged) {
StartDiscovery(); StartDiscovery();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment