| Index: content/browser/bluetooth/bluetooth_device_chooser_controller.cc
|
| diff --git a/content/browser/bluetooth/bluetooth_device_chooser_controller.cc b/content/browser/bluetooth/bluetooth_device_chooser_controller.cc
|
| index dc255a8e9afd601d84c9cb6cfe9969474fefb0eb..9b77ba56a9b4a8a51eed7bd08a3d674bca857c4d 100644
|
| --- a/content/browser/bluetooth/bluetooth_device_chooser_controller.cc
|
| +++ b/content/browser/bluetooth/bluetooth_device_chooser_controller.cc
|
| @@ -24,6 +24,8 @@
|
| #include "device/bluetooth/bluetooth_adapter.h"
|
| #include "device/bluetooth/bluetooth_discovery_session.h"
|
|
|
| +using device::BluetoothUUID;
|
| +
|
| namespace content {
|
|
|
| namespace {
|
| @@ -46,25 +48,12 @@ void LogRequestDeviceOptions(
|
| VLOG(1) << "Services: ";
|
| VLOG(1) << "\t[";
|
| for (const auto& service : filter->services)
|
| - VLOG(1) << "\t\t" << service;
|
| + VLOG(1) << "\t\t" << service->canonical_value();
|
| VLOG(1) << "\t]";
|
| }
|
| }
|
| }
|
|
|
| -bool IsValidUUID(const mojo::String& uuid) {
|
| - device::BluetoothUUID parsed_uuid(uuid);
|
| - return parsed_uuid.IsValid() &&
|
| - parsed_uuid.format() == device::BluetoothUUID::kFormat128Bit;
|
| -}
|
| -
|
| -bool HasInvalidOptionalServices(
|
| - const mojo::Array<mojo::String>& optional_services) {
|
| - return optional_services.end() != std::find_if_not(optional_services.begin(),
|
| - optional_services.end(),
|
| - IsValidUUID);
|
| -}
|
| -
|
| bool IsEmptyOrInvalidFilter(
|
| const blink::mojom::WebBluetoothScanFilterPtr& filter) {
|
| // At least one member needs to be present.
|
| @@ -80,12 +69,6 @@ bool IsEmptyOrInvalidFilter(
|
| filter->name_prefix.size() > kMaxLengthForDeviceName)
|
| return true;
|
|
|
| - if (!filter->services.is_null()) {
|
| - const auto& services = filter->services;
|
| - return services.end() !=
|
| - std::find_if_not(services.begin(), services.end(), IsValidUUID);
|
| - }
|
| -
|
| return false;
|
| }
|
|
|
| @@ -115,10 +98,10 @@ bool MatchesFilter(const device::BluetoothDevice& device,
|
|
|
| if (!filter->services.is_null()) {
|
| const auto& device_uuid_list = device.GetUUIDs();
|
| - const std::set<device::BluetoothUUID> device_uuids(device_uuid_list.begin(),
|
| - device_uuid_list.end());
|
| - for (const auto& service : filter->services) {
|
| - if (!ContainsKey(device_uuids, device::BluetoothUUID(service))) {
|
| + const std::unordered_set<BluetoothUUID> device_uuids(
|
| + device_uuid_list.begin(), device_uuid_list.end());
|
| + for (const base::Optional<BluetoothUUID>& service : filter->services) {
|
| + if (!ContainsKey(device_uuids, service.value())) {
|
| return false;
|
| }
|
| }
|
| @@ -141,16 +124,16 @@ bool MatchesFilters(
|
|
|
| std::unique_ptr<device::BluetoothDiscoveryFilter> ComputeScanFilter(
|
| const mojo::Array<blink::mojom::WebBluetoothScanFilterPtr>& filters) {
|
| - std::unordered_set<std::string> services;
|
| + std::unordered_set<BluetoothUUID> services;
|
| for (const auto& filter : filters) {
|
| - for (const std::string& service : filter->services) {
|
| - services.insert(service);
|
| + for (const base::Optional<BluetoothUUID>& service : filter->services) {
|
| + services.insert(service.value());
|
| }
|
| }
|
| auto discovery_filter = base::MakeUnique<device::BluetoothDiscoveryFilter>(
|
| device::BluetoothDiscoveryFilter::TRANSPORT_DUAL);
|
| - for (const std::string& service : services) {
|
| - discovery_filter->AddUUID(device::BluetoothUUID(service));
|
| + for (const BluetoothUUID& service : services) {
|
| + discovery_filter->AddUUID(service);
|
| }
|
| return discovery_filter;
|
| }
|
| @@ -233,8 +216,7 @@ void BluetoothDeviceChooserController::GetDevice(
|
| error_callback_ = error_callback;
|
|
|
| // The renderer should never send empty filters.
|
| - if (HasEmptyOrInvalidFilter(options->filters) ||
|
| - HasInvalidOptionalServices(options->optional_services)) {
|
| + if (HasEmptyOrInvalidFilter(options->filters)) {
|
| web_bluetooth_service_->CrashRendererAndClosePipe(
|
| bad_message::BDH_EMPTY_OR_INVALID_FILTERS);
|
| return;
|
|
|