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

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: updated web_bluetooth_impl.cc Created 4 years, 1 month 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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 // The duration of a Bluetooth Scan in seconds. 56 // The duration of a Bluetooth Scan in seconds.
57 constexpr int kScanDuration = 10; 57 constexpr int kScanDuration = 10;
58 constexpr int kTestScanDuration = 0; 58 constexpr int kTestScanDuration = 0;
59 59
60 void LogRequestDeviceOptions( 60 void LogRequestDeviceOptions(
61 const blink::mojom::WebBluetoothRequestDeviceOptionsPtr& options) { 61 const blink::mojom::WebBluetoothRequestDeviceOptionsPtr& options) {
62 VLOG(1) << "requestDevice called with the following filters: "; 62 VLOG(1) << "requestDevice called with the following filters: ";
63 int i = 0; 63 int i = 0;
64 for (const auto& filter : options->filters) { 64 for (const auto& filter : options->filters) {
65 VLOG(1) << "Filter #" << ++i; 65 VLOG(1) << "Filter #" << ++i;
66 if (!filter->name.is_null()) 66 if (filter->name)
67 VLOG(1) << "Name: " << filter->name; 67 VLOG(1) << "Name: " << filter->name.value();
68 68
69 if (!filter->name_prefix.is_null()) 69 if (filter->name_prefix)
70 VLOG(1) << "Name Prefix: " << filter->name_prefix; 70 VLOG(1) << "Name Prefix: " << filter->name_prefix.value();
71 71
72 if (!filter->services.is_null()) { 72 if (filter->services) {
73 VLOG(1) << "Services: "; 73 VLOG(1) << "Services: ";
74 VLOG(1) << "\t["; 74 VLOG(1) << "\t[";
75 for (const auto& service : filter->services) 75 for (const auto& service : filter->services.value())
76 VLOG(1) << "\t\t" << service->canonical_value(); 76 VLOG(1) << "\t\t" << service.canonical_value();
77 VLOG(1) << "\t]"; 77 VLOG(1) << "\t]";
78 } 78 }
79 } 79 }
80 } 80 }
81 81
82 bool IsEmptyOrInvalidFilter( 82 bool IsEmptyOrInvalidFilter(
83 const blink::mojom::WebBluetoothScanFilterPtr& filter) { 83 const blink::mojom::WebBluetoothScanFilterPtr& filter) {
84 // At least one member needs to be present. 84 // At least one member needs to be present.
85 if (filter->name.is_null() && filter->name_prefix.is_null() && 85 if (!filter->name && !filter->name_prefix && !filter->services)
86 filter->services.is_null())
87 return true; 86 return true;
88 87
89 // The renderer will never send a name or a name_prefix longer than 88 // The renderer will never send a name or a name_prefix longer than
90 // kMaxLengthForDeviceName. 89 // kMaxLengthForDeviceName.
91 if (!filter->name.is_null() && filter->name.size() > kMaxLengthForDeviceName) 90 if (filter->name && filter->name->size() > kMaxLengthForDeviceName)
92 return true; 91 return true;
93 if (!filter->name_prefix.is_null() && filter->name_prefix.size() == 0) 92 if (filter->name_prefix && filter->name_prefix->size() == 0)
94 return true; 93 return true;
95 if (!filter->name_prefix.is_null() && 94 if (filter->name_prefix &&
96 filter->name_prefix.size() > kMaxLengthForDeviceName) 95 filter->name_prefix->size() > kMaxLengthForDeviceName)
97 return true; 96 return true;
98 97
99 return false; 98 return false;
100 } 99 }
101 100
102 bool HasEmptyOrInvalidFilter( 101 bool HasEmptyOrInvalidFilter(
103 const mojo::Array<blink::mojom::WebBluetoothScanFilterPtr>& filters) { 102 const std::vector<blink::mojom::WebBluetoothScanFilterPtr>& filters) {
104 return filters.empty() 103 return filters.empty()
105 ? true 104 ? true
106 : filters.end() != std::find_if(filters.begin(), filters.end(), 105 : filters.end() != std::find_if(filters.begin(), filters.end(),
107 IsEmptyOrInvalidFilter); 106 IsEmptyOrInvalidFilter);
108 } 107 }
109 108
110 bool MatchesFilter(const std::string* device_name, 109 bool MatchesFilter(const std::string* device_name,
111 const UUIDSet& device_uuids, 110 const UUIDSet& device_uuids,
112 const blink::mojom::WebBluetoothScanFilterPtr& filter) { 111 const blink::mojom::WebBluetoothScanFilterPtr& filter) {
113 if (!filter->name.is_null()) { 112 if (filter->name) {
114 if (device_name == nullptr) 113 if (device_name == nullptr)
115 return false; 114 return false;
116 if (filter->name != *device_name) 115 if (filter->name.value() != *device_name)
117 return false; 116 return false;
118 } 117 }
119 118
120 if (!filter->name_prefix.is_null() && filter->name_prefix.size()) { 119 if (filter->name_prefix && filter->name_prefix->size()) {
121 if (device_name == nullptr) 120 if (device_name == nullptr)
122 return false; 121 return false;
123 if (!base::StartsWith(*device_name, filter->name_prefix.get(), 122 if (!base::StartsWith(*device_name, filter->name_prefix.value(),
124 base::CompareCase::SENSITIVE)) 123 base::CompareCase::SENSITIVE))
125 return false; 124 return false;
126 } 125 }
127 126
128 if (!filter->services.is_null()) { 127 if (filter->services) {
129 for (const base::Optional<BluetoothUUID>& service : filter->services) { 128 for (const auto& service : filter->services.value()) {
130 if (!base::ContainsKey(device_uuids, service.value())) { 129 if (!base::ContainsKey(device_uuids, service)) {
131 return false; 130 return false;
132 } 131 }
133 } 132 }
134 } 133 }
135 134
136 return true; 135 return true;
137 } 136 }
138 137
139 bool MatchesFilters( 138 bool MatchesFilters(
140 const std::string* device_name, 139 const std::string* device_name,
141 const UUIDSet& device_uuids, 140 const UUIDSet& device_uuids,
142 const mojo::Array<blink::mojom::WebBluetoothScanFilterPtr>& filters) { 141 const std::vector<blink::mojom::WebBluetoothScanFilterPtr>& filters) {
143 DCHECK(!HasEmptyOrInvalidFilter(filters)); 142 DCHECK(!HasEmptyOrInvalidFilter(filters));
144 for (const auto& filter : filters) { 143 for (const auto& filter : filters) {
145 if (MatchesFilter(device_name, device_uuids, filter)) { 144 if (MatchesFilter(device_name, device_uuids, filter)) {
146 return true; 145 return true;
147 } 146 }
148 } 147 }
149 return false; 148 return false;
150 } 149 }
151 150
152 std::unique_ptr<device::BluetoothDiscoveryFilter> ComputeScanFilter( 151 std::unique_ptr<device::BluetoothDiscoveryFilter> ComputeScanFilter(
153 const mojo::Array<blink::mojom::WebBluetoothScanFilterPtr>& filters) { 152 const std::vector<blink::mojom::WebBluetoothScanFilterPtr>& filters) {
154 std::unordered_set<BluetoothUUID, device::BluetoothUUIDHash> services; 153 std::unordered_set<BluetoothUUID, device::BluetoothUUIDHash> services;
155 for (const auto& filter : filters) { 154 for (const auto& filter : filters) {
156 for (const base::Optional<BluetoothUUID>& service : filter->services) { 155 if (filter->services) {
ortuno 2016/11/21 04:42:31 if (!filter->services) { continue; } ...
juncai 2016/11/21 21:27:05 Done.
157 services.insert(service.value()); 156 for (const auto& service : filter->services.value()) {
157 services.insert(service);
158 }
158 } 159 }
159 } 160 }
160 // There isn't much support for GATT over BR/EDR from neither platforms nor 161 // There isn't much support for GATT over BR/EDR from neither platforms nor
161 // devices so performing a Dual scan will find devices that the API is not 162 // devices so performing a Dual scan will find devices that the API is not
162 // able to interact with. To avoid wasting power and confusing users with 163 // able to interact with. To avoid wasting power and confusing users with
163 // devices they are not able to interact with, we only perform an LE Scan. 164 // devices they are not able to interact with, we only perform an LE Scan.
164 auto discovery_filter = base::MakeUnique<device::BluetoothDiscoveryFilter>( 165 auto discovery_filter = base::MakeUnique<device::BluetoothDiscoveryFilter>(
165 device::BLUETOOTH_TRANSPORT_LE); 166 device::BLUETOOTH_TRANSPORT_LE);
166 for (const BluetoothUUID& service : services) { 167 for (const BluetoothUUID& service : services) {
167 discovery_filter->AddUUID(service); 168 discovery_filter->AddUUID(service);
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 536
536 void BluetoothDeviceChooserController::PostErrorCallback( 537 void BluetoothDeviceChooserController::PostErrorCallback(
537 blink::mojom::WebBluetoothResult error) { 538 blink::mojom::WebBluetoothResult error) {
538 if (!base::ThreadTaskRunnerHandle::Get()->PostTask( 539 if (!base::ThreadTaskRunnerHandle::Get()->PostTask(
539 FROM_HERE, base::Bind(error_callback_, error))) { 540 FROM_HERE, base::Bind(error_callback_, error))) {
540 LOG(WARNING) << "No TaskRunner."; 541 LOG(WARNING) << "No TaskRunner.";
541 } 542 }
542 } 543 }
543 544
544 } // namespace content 545 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698