Index: components/arc/bluetooth/arc_bluetooth_bridge.cc |
diff --git a/components/arc/bluetooth/arc_bluetooth_bridge.cc b/components/arc/bluetooth/arc_bluetooth_bridge.cc |
index 3b8cf87ba4cd2e19c14df0cc88ef04ff501e8bc6..79f375d7e19eee765b9887638a04f75fb81827ba 100644 |
--- a/components/arc/bluetooth/arc_bluetooth_bridge.cc |
+++ b/components/arc/bluetooth/arc_bluetooth_bridge.cc |
@@ -194,7 +194,8 @@ bool IsGattOffsetValid(int offset) { |
return 0 <= offset && offset < kMaxGattAttributeLength; |
} |
-// This is needed because Android only support UUID 16 bits in advertising data. |
+// This is needed because Android only support UUID 16 bits in service data |
+// section in advertising data |
uint16_t GetUUID16(const BluetoothUUID& uuid) { |
// Convert xxxxyyyy-xxxx-xxxx-xxxx-xxxxxxxxxxxx to int16 yyyy |
return std::stoi(uuid.canonical_value().substr(4, 4), nullptr, 16); |
@@ -1864,8 +1865,8 @@ ArcBluetoothBridge::GetAdapterProperties( |
// Android support 5 types of Advertising Data. |
// However Chrome didn't expose AdvertiseFlag and ManufacturerData. |
// So we will only expose local_name, service_uuids and service_data. |
-// Note that we need to use UUID 16 bits because Android does not support |
-// UUID 128 bits. |
+// Note that we need to use UUID 16 bits in service_data section |
+// because Android does not support UUID 128 bits there. |
// TODO(crbug.com/618442) Make Chrome expose missing data. |
mojo::Array<mojom::BluetoothAdvertisingDataPtr> |
ArcBluetoothBridge::GetAdvertisingData(BluetoothDevice* device) const { |
@@ -1879,18 +1880,13 @@ ArcBluetoothBridge::GetAdvertisingData(BluetoothDevice* device) const { |
advertising_data.push_back(std::move(local_name)); |
// ServiceUuid |
- BluetoothDevice::UUIDSet uuid_set = device->GetUUIDs(); |
+ const BluetoothDevice::UUIDSet& uuid_set = device->GetUUIDs(); |
if (uuid_set.size() > 0) { |
- mojom::BluetoothAdvertisingDataPtr service_uuids_16 = |
+ mojom::BluetoothAdvertisingDataPtr service_uuids = |
mojom::BluetoothAdvertisingData::New(); |
- mojo::Array<uint16_t> uuid16s(uuid_set.size()); |
- size_t i = 0; |
- for (const auto& uuid : uuid_set) { |
- uuid16s[i] = GetUUID16(uuid); |
- i++; |
- } |
- service_uuids_16->set_service_uuids_16(std::move(uuid16s)); |
- advertising_data.push_back(std::move(service_uuids_16)); |
+ service_uuids->set_service_uuids(mojo::Array<BluetoothUUID>::From( |
+ std::vector<BluetoothUUID>(uuid_set.begin(), uuid_set.end()))); |
+ advertising_data.push_back(std::move(service_uuids)); |
} |
// Service data |
@@ -1900,6 +1896,7 @@ ArcBluetoothBridge::GetAdvertisingData(BluetoothDevice* device) const { |
mojom::BluetoothServiceDataPtr service_data = |
mojom::BluetoothServiceData::New(); |
+ // Android only supports UUID 16 bit here. |
service_data->uuid_16bit = GetUUID16(uuid); |
const std::vector<uint8_t>* data = device->GetServiceDataForUUID(uuid); |