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

Side by Side Diff: content/browser/bluetooth/bluetooth_device_chooser_controller.cc

Issue 2506813003: Use new wrapper types for web_bluetooth.mojom (Closed)
Patch Set: merge master and resolve conflicts Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/bluetooth/bluetooth_device_chooser_controller.h" 5 #include "content/browser/bluetooth/bluetooth_device_chooser_controller.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <unordered_set> 9 #include <unordered_set>
10 10
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 // The duration of a Bluetooth Scan in seconds. 57 // The duration of a Bluetooth Scan in seconds.
58 constexpr int kScanDuration = 60; 58 constexpr int kScanDuration = 60;
59 constexpr int kTestScanDuration = 0; 59 constexpr int kTestScanDuration = 0;
60 60
61 void LogRequestDeviceOptions( 61 void LogRequestDeviceOptions(
62 const blink::mojom::WebBluetoothRequestDeviceOptionsPtr& options) { 62 const blink::mojom::WebBluetoothRequestDeviceOptionsPtr& options) {
63 VLOG(1) << "requestDevice called with the following filters: "; 63 VLOG(1) << "requestDevice called with the following filters: ";
64 int i = 0; 64 int i = 0;
65 for (const auto& filter : options->filters) { 65 for (const auto& filter : options->filters) {
66 VLOG(1) << "Filter #" << ++i; 66 VLOG(1) << "Filter #" << ++i;
67 if (!filter->name.is_null()) 67 if (filter->name)
68 VLOG(1) << "Name: " << filter->name; 68 VLOG(1) << "Name: " << filter->name.value();
69 69
70 if (!filter->name_prefix.is_null()) 70 if (filter->name_prefix)
71 VLOG(1) << "Name Prefix: " << filter->name_prefix; 71 VLOG(1) << "Name Prefix: " << filter->name_prefix.value();
72 72
73 if (!filter->services.is_null()) { 73 if (filter->services) {
74 VLOG(1) << "Services: "; 74 VLOG(1) << "Services: ";
75 VLOG(1) << "\t["; 75 VLOG(1) << "\t[";
76 for (const auto& service : filter->services) 76 for (const auto& service : filter->services.value())
77 VLOG(1) << "\t\t" << service->canonical_value(); 77 VLOG(1) << "\t\t" << service.canonical_value();
78 VLOG(1) << "\t]"; 78 VLOG(1) << "\t]";
79 } 79 }
80 } 80 }
81 } 81 }
82 82
83 bool IsEmptyOrInvalidFilter( 83 bool IsEmptyOrInvalidFilter(
84 const blink::mojom::WebBluetoothScanFilterPtr& filter) { 84 const blink::mojom::WebBluetoothScanFilterPtr& filter) {
85 // At least one member needs to be present. 85 // At least one member needs to be present.
86 if (filter->name.is_null() && filter->name_prefix.is_null() && 86 if (!filter->name && !filter->name_prefix && !filter->services)
87 filter->services.is_null())
88 return true; 87 return true;
89 88
90 // The renderer will never send a name or a name_prefix longer than 89 // The renderer will never send a name or a name_prefix longer than
91 // kMaxLengthForDeviceName. 90 // kMaxLengthForDeviceName.
92 if (!filter->name.is_null() && filter->name.size() > kMaxLengthForDeviceName) 91 if (filter->name && filter->name->size() > kMaxLengthForDeviceName)
93 return true; 92 return true;
94 if (!filter->name_prefix.is_null() && filter->name_prefix.size() == 0) 93 if (filter->name_prefix && filter->name_prefix->size() == 0)
95 return true; 94 return true;
96 if (!filter->name_prefix.is_null() && 95 if (filter->name_prefix &&
97 filter->name_prefix.size() > kMaxLengthForDeviceName) 96 filter->name_prefix->size() > kMaxLengthForDeviceName)
98 return true; 97 return true;
99 98
100 return false; 99 return false;
101 } 100 }
102 101
103 bool HasEmptyOrInvalidFilter( 102 bool HasEmptyOrInvalidFilter(
104 const mojo::Array<blink::mojom::WebBluetoothScanFilterPtr>& filters) { 103 const std::vector<blink::mojom::WebBluetoothScanFilterPtr>& filters) {
105 return filters.empty() 104 return filters.empty()
106 ? true 105 ? true
107 : filters.end() != std::find_if(filters.begin(), filters.end(), 106 : filters.end() != std::find_if(filters.begin(), filters.end(),
108 IsEmptyOrInvalidFilter); 107 IsEmptyOrInvalidFilter);
109 } 108 }
110 109
111 bool MatchesFilter(const std::string* device_name, 110 bool MatchesFilter(const std::string* device_name,
112 const UUIDSet& device_uuids, 111 const UUIDSet& device_uuids,
113 const blink::mojom::WebBluetoothScanFilterPtr& filter) { 112 const blink::mojom::WebBluetoothScanFilterPtr& filter) {
114 if (!filter->name.is_null()) { 113 if (filter->name) {
115 if (device_name == nullptr) 114 if (device_name == nullptr)
116 return false; 115 return false;
117 if (filter->name != *device_name) 116 if (filter->name.value() != *device_name)
118 return false; 117 return false;
119 } 118 }
120 119
121 if (!filter->name_prefix.is_null() && filter->name_prefix.size()) { 120 if (filter->name_prefix && filter->name_prefix->size()) {
122 if (device_name == nullptr) 121 if (device_name == nullptr)
123 return false; 122 return false;
124 if (!base::StartsWith(*device_name, filter->name_prefix.get(), 123 if (!base::StartsWith(*device_name, filter->name_prefix.value(),
125 base::CompareCase::SENSITIVE)) 124 base::CompareCase::SENSITIVE))
126 return false; 125 return false;
127 } 126 }
128 127
129 if (!filter->services.is_null()) { 128 if (filter->services) {
130 for (const base::Optional<BluetoothUUID>& service : filter->services) { 129 for (const auto& service : filter->services.value()) {
131 if (!base::ContainsKey(device_uuids, service.value())) { 130 if (!base::ContainsKey(device_uuids, service)) {
132 return false; 131 return false;
133 } 132 }
134 } 133 }
135 } 134 }
136 135
137 return true; 136 return true;
138 } 137 }
139 138
140 bool MatchesFilters( 139 bool MatchesFilters(
141 const std::string* device_name, 140 const std::string* device_name,
142 const UUIDSet& device_uuids, 141 const UUIDSet& device_uuids,
143 const mojo::Array<blink::mojom::WebBluetoothScanFilterPtr>& filters) { 142 const std::vector<blink::mojom::WebBluetoothScanFilterPtr>& filters) {
144 DCHECK(!HasEmptyOrInvalidFilter(filters)); 143 DCHECK(!HasEmptyOrInvalidFilter(filters));
145 for (const auto& filter : filters) { 144 for (const auto& filter : filters) {
146 if (MatchesFilter(device_name, device_uuids, filter)) { 145 if (MatchesFilter(device_name, device_uuids, filter)) {
147 return true; 146 return true;
148 } 147 }
149 } 148 }
150 return false; 149 return false;
151 } 150 }
152 151
153 std::unique_ptr<device::BluetoothDiscoveryFilter> ComputeScanFilter( 152 std::unique_ptr<device::BluetoothDiscoveryFilter> ComputeScanFilter(
154 const mojo::Array<blink::mojom::WebBluetoothScanFilterPtr>& filters) { 153 const std::vector<blink::mojom::WebBluetoothScanFilterPtr>& filters) {
155 std::unordered_set<BluetoothUUID, device::BluetoothUUIDHash> services; 154 std::unordered_set<BluetoothUUID, device::BluetoothUUIDHash> services;
156 for (const auto& filter : filters) { 155 for (const auto& filter : filters) {
157 for (const base::Optional<BluetoothUUID>& service : filter->services) { 156 if (!filter->services) {
158 services.insert(service.value()); 157 continue;
158 }
159 for (const auto& service : filter->services.value()) {
160 services.insert(service);
159 } 161 }
160 } 162 }
161 // There isn't much support for GATT over BR/EDR from neither platforms nor 163 // There isn't much support for GATT over BR/EDR from neither platforms nor
162 // devices so performing a Dual scan will find devices that the API is not 164 // devices so performing a Dual scan will find devices that the API is not
163 // able to interact with. To avoid wasting power and confusing users with 165 // able to interact with. To avoid wasting power and confusing users with
164 // devices they are not able to interact with, we only perform an LE Scan. 166 // devices they are not able to interact with, we only perform an LE Scan.
165 auto discovery_filter = base::MakeUnique<device::BluetoothDiscoveryFilter>( 167 auto discovery_filter = base::MakeUnique<device::BluetoothDiscoveryFilter>(
166 device::BLUETOOTH_TRANSPORT_LE); 168 device::BLUETOOTH_TRANSPORT_LE);
167 for (const BluetoothUUID& service : services) { 169 for (const BluetoothUUID& service : services) {
168 discovery_filter->AddUUID(service); 170 discovery_filter->AddUUID(service);
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 557
556 void BluetoothDeviceChooserController::PostErrorCallback( 558 void BluetoothDeviceChooserController::PostErrorCallback(
557 blink::mojom::WebBluetoothResult error) { 559 blink::mojom::WebBluetoothResult error) {
558 if (!base::ThreadTaskRunnerHandle::Get()->PostTask( 560 if (!base::ThreadTaskRunnerHandle::Get()->PostTask(
559 FROM_HERE, base::Bind(error_callback_, error))) { 561 FROM_HERE, base::Bind(error_callback_, error))) {
560 LOG(WARNING) << "No TaskRunner."; 562 LOG(WARNING) << "No TaskRunner.";
561 } 563 }
562 } 564 }
563 565
564 } // namespace content 566 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698