OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "device/bluetooth/dbus/bluetooth_le_advertisement_service_provider.h" | 5 #include "device/bluetooth/dbus/bluetooth_le_advertisement_service_provider.h" |
6 | 6 |
| 7 #include <utility> |
| 8 |
7 #include "base/bind.h" | 9 #include "base/bind.h" |
8 #include "base/logging.h" | 10 #include "base/logging.h" |
9 #include "base/macros.h" | 11 #include "base/macros.h" |
10 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
11 #include "base/threading/platform_thread.h" | 13 #include "base/threading/platform_thread.h" |
12 #include "dbus/exported_object.h" | 14 #include "dbus/exported_object.h" |
13 #include "dbus/message.h" | 15 #include "dbus/message.h" |
14 #include "device/bluetooth/dbus/bluez_dbus_manager.h" | 16 #include "device/bluetooth/dbus/bluez_dbus_manager.h" |
15 #include "device/bluetooth/dbus/fake_bluetooth_le_advertisement_service_provider
.h" | 17 #include "device/bluetooth/dbus/fake_bluetooth_le_advertisement_service_provider
.h" |
16 #include "third_party/cros_system_api/dbus/service_constants.h" | 18 #include "third_party/cros_system_api/dbus/service_constants.h" |
(...skipping 14 matching lines...) Expand all Loading... |
31 Delegate* delegate, | 33 Delegate* delegate, |
32 AdvertisementType type, | 34 AdvertisementType type, |
33 scoped_ptr<UUIDList> service_uuids, | 35 scoped_ptr<UUIDList> service_uuids, |
34 scoped_ptr<ManufacturerData> manufacturer_data, | 36 scoped_ptr<ManufacturerData> manufacturer_data, |
35 scoped_ptr<UUIDList> solicit_uuids, | 37 scoped_ptr<UUIDList> solicit_uuids, |
36 scoped_ptr<ServiceData> service_data) | 38 scoped_ptr<ServiceData> service_data) |
37 : origin_thread_id_(base::PlatformThread::CurrentId()), | 39 : origin_thread_id_(base::PlatformThread::CurrentId()), |
38 bus_(bus), | 40 bus_(bus), |
39 delegate_(delegate), | 41 delegate_(delegate), |
40 type_(type), | 42 type_(type), |
41 service_uuids_(service_uuids.Pass()), | 43 service_uuids_(std::move(service_uuids)), |
42 manufacturer_data_(manufacturer_data.Pass()), | 44 manufacturer_data_(std::move(manufacturer_data)), |
43 solicit_uuids_(solicit_uuids.Pass()), | 45 solicit_uuids_(std::move(solicit_uuids)), |
44 service_data_(service_data.Pass()), | 46 service_data_(std::move(service_data)), |
45 weak_ptr_factory_(this) { | 47 weak_ptr_factory_(this) { |
46 DCHECK(bus); | 48 DCHECK(bus); |
47 DCHECK(delegate); | 49 DCHECK(delegate); |
48 | 50 |
49 VLOG(1) << "Creating Bluetooth Advertisement: " << object_path_.value(); | 51 VLOG(1) << "Creating Bluetooth Advertisement: " << object_path_.value(); |
50 | 52 |
51 object_path_ = object_path; | 53 object_path_ = object_path; |
52 exported_object_ = bus_->GetExportedObject(object_path_); | 54 exported_object_ = bus_->GetExportedObject(object_path_); |
53 | 55 |
54 // Export Bluetooth Advertisement interface methods. | 56 // Export Bluetooth Advertisement interface methods. |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 | 111 |
110 dbus::MessageReader reader(method_call); | 112 dbus::MessageReader reader(method_call); |
111 | 113 |
112 std::string interface_name; | 114 std::string interface_name; |
113 std::string property_name; | 115 std::string property_name; |
114 if (!reader.PopString(&interface_name) || | 116 if (!reader.PopString(&interface_name) || |
115 !reader.PopString(&property_name) || reader.HasMoreData()) { | 117 !reader.PopString(&property_name) || reader.HasMoreData()) { |
116 scoped_ptr<dbus::ErrorResponse> error_response = | 118 scoped_ptr<dbus::ErrorResponse> error_response = |
117 dbus::ErrorResponse::FromMethodCall(method_call, kErrorInvalidArgs, | 119 dbus::ErrorResponse::FromMethodCall(method_call, kErrorInvalidArgs, |
118 "Expected 'ss'."); | 120 "Expected 'ss'."); |
119 response_sender.Run(error_response.Pass()); | 121 response_sender.Run(std::move(error_response)); |
120 return; | 122 return; |
121 } | 123 } |
122 | 124 |
123 // Only the advertisement interface is supported. | 125 // Only the advertisement interface is supported. |
124 if (interface_name != | 126 if (interface_name != |
125 bluetooth_advertisement::kBluetoothAdvertisementInterface) { | 127 bluetooth_advertisement::kBluetoothAdvertisementInterface) { |
126 scoped_ptr<dbus::ErrorResponse> error_response = | 128 scoped_ptr<dbus::ErrorResponse> error_response = |
127 dbus::ErrorResponse::FromMethodCall( | 129 dbus::ErrorResponse::FromMethodCall( |
128 method_call, kErrorInvalidArgs, | 130 method_call, kErrorInvalidArgs, |
129 "No such interface: '" + interface_name + "'."); | 131 "No such interface: '" + interface_name + "'."); |
130 response_sender.Run(error_response.Pass()); | 132 response_sender.Run(std::move(error_response)); |
131 return; | 133 return; |
132 } | 134 } |
133 | 135 |
134 scoped_ptr<dbus::Response> response = | 136 scoped_ptr<dbus::Response> response = |
135 dbus::Response::FromMethodCall(method_call); | 137 dbus::Response::FromMethodCall(method_call); |
136 dbus::MessageWriter writer(response.get()); | 138 dbus::MessageWriter writer(response.get()); |
137 dbus::MessageWriter variant_writer(NULL); | 139 dbus::MessageWriter variant_writer(NULL); |
138 | 140 |
139 if (property_name == bluetooth_advertisement::kTypeProperty) { | 141 if (property_name == bluetooth_advertisement::kTypeProperty) { |
140 writer.OpenVariant("s", &variant_writer); | 142 writer.OpenVariant("s", &variant_writer); |
(...skipping 20 matching lines...) Expand all Loading... |
161 } else if ((property_name == | 163 } else if ((property_name == |
162 bluetooth_advertisement::kServiceDataProperty) && | 164 bluetooth_advertisement::kServiceDataProperty) && |
163 service_data_) { | 165 service_data_) { |
164 writer.OpenVariant("o", &variant_writer); | 166 writer.OpenVariant("o", &variant_writer); |
165 AppendServiceDataVariant(&variant_writer); | 167 AppendServiceDataVariant(&variant_writer); |
166 } else { | 168 } else { |
167 scoped_ptr<dbus::ErrorResponse> error_response = | 169 scoped_ptr<dbus::ErrorResponse> error_response = |
168 dbus::ErrorResponse::FromMethodCall( | 170 dbus::ErrorResponse::FromMethodCall( |
169 method_call, kErrorInvalidArgs, | 171 method_call, kErrorInvalidArgs, |
170 "No such property: '" + property_name + "'."); | 172 "No such property: '" + property_name + "'."); |
171 response_sender.Run(error_response.Pass()); | 173 response_sender.Run(std::move(error_response)); |
172 } | 174 } |
173 | 175 |
174 writer.CloseContainer(&variant_writer); | 176 writer.CloseContainer(&variant_writer); |
175 response_sender.Run(response.Pass()); | 177 response_sender.Run(std::move(response)); |
176 } | 178 } |
177 | 179 |
178 // Called by dbus:: when the Bluetooth daemon fetches all properties of the | 180 // Called by dbus:: when the Bluetooth daemon fetches all properties of the |
179 // descriptor. | 181 // descriptor. |
180 void GetAll(dbus::MethodCall* method_call, | 182 void GetAll(dbus::MethodCall* method_call, |
181 dbus::ExportedObject::ResponseSender response_sender) { | 183 dbus::ExportedObject::ResponseSender response_sender) { |
182 VLOG(2) << "BluetoothAdvertisementServiceProvider::GetAll: " | 184 VLOG(2) << "BluetoothAdvertisementServiceProvider::GetAll: " |
183 << object_path_.value(); | 185 << object_path_.value(); |
184 DCHECK(OnOriginThread()); | 186 DCHECK(OnOriginThread()); |
185 | 187 |
186 dbus::MessageReader reader(method_call); | 188 dbus::MessageReader reader(method_call); |
187 | 189 |
188 std::string interface_name; | 190 std::string interface_name; |
189 if (!reader.PopString(&interface_name) || reader.HasMoreData()) { | 191 if (!reader.PopString(&interface_name) || reader.HasMoreData()) { |
190 scoped_ptr<dbus::ErrorResponse> error_response = | 192 scoped_ptr<dbus::ErrorResponse> error_response = |
191 dbus::ErrorResponse::FromMethodCall(method_call, kErrorInvalidArgs, | 193 dbus::ErrorResponse::FromMethodCall(method_call, kErrorInvalidArgs, |
192 "Expected 's'."); | 194 "Expected 's'."); |
193 response_sender.Run(error_response.Pass()); | 195 response_sender.Run(std::move(error_response)); |
194 return; | 196 return; |
195 } | 197 } |
196 | 198 |
197 // Only the advertisement interface is supported. | 199 // Only the advertisement interface is supported. |
198 if (interface_name != | 200 if (interface_name != |
199 bluetooth_advertisement::kBluetoothAdvertisementInterface) { | 201 bluetooth_advertisement::kBluetoothAdvertisementInterface) { |
200 scoped_ptr<dbus::ErrorResponse> error_response = | 202 scoped_ptr<dbus::ErrorResponse> error_response = |
201 dbus::ErrorResponse::FromMethodCall( | 203 dbus::ErrorResponse::FromMethodCall( |
202 method_call, kErrorInvalidArgs, | 204 method_call, kErrorInvalidArgs, |
203 "No such interface: '" + interface_name + "'."); | 205 "No such interface: '" + interface_name + "'."); |
204 response_sender.Run(error_response.Pass()); | 206 response_sender.Run(std::move(error_response)); |
205 return; | 207 return; |
206 } | 208 } |
207 | 209 |
208 response_sender.Run(CreateGetAllResponse(method_call).Pass()); | 210 response_sender.Run(CreateGetAllResponse(method_call)); |
209 } | 211 } |
210 | 212 |
211 // Called by dbus:: when a method is exported. | 213 // Called by dbus:: when a method is exported. |
212 void OnExported(const std::string& interface_name, | 214 void OnExported(const std::string& interface_name, |
213 const std::string& method_name, | 215 const std::string& method_name, |
214 bool success) { | 216 bool success) { |
215 LOG_IF(WARNING, !success) << "Failed to export " << interface_name << "." | 217 LOG_IF(WARNING, !success) << "Failed to export " << interface_name << "." |
216 << method_name; | 218 << method_name; |
217 } | 219 } |
218 | 220 |
(...skipping 29 matching lines...) Expand all Loading... |
248 VLOG(2) << "Returning descriptor value obtained from delegate."; | 250 VLOG(2) << "Returning descriptor value obtained from delegate."; |
249 scoped_ptr<dbus::Response> response = | 251 scoped_ptr<dbus::Response> response = |
250 dbus::Response::FromMethodCall(method_call); | 252 dbus::Response::FromMethodCall(method_call); |
251 dbus::MessageWriter writer(response.get()); | 253 dbus::MessageWriter writer(response.get()); |
252 dbus::MessageWriter variant_writer(NULL); | 254 dbus::MessageWriter variant_writer(NULL); |
253 | 255 |
254 writer.OpenVariant("ay", &variant_writer); | 256 writer.OpenVariant("ay", &variant_writer); |
255 variant_writer.AppendArrayOfBytes(value.data(), value.size()); | 257 variant_writer.AppendArrayOfBytes(value.data(), value.size()); |
256 writer.CloseContainer(&variant_writer); | 258 writer.CloseContainer(&variant_writer); |
257 | 259 |
258 response_sender.Run(response.Pass()); | 260 response_sender.Run(std::move(response)); |
259 } | 261 } |
260 | 262 |
261 void AppendArrayVariantOfStrings(dbus::MessageWriter* dict_writer, | 263 void AppendArrayVariantOfStrings(dbus::MessageWriter* dict_writer, |
262 const UUIDList& strings) { | 264 const UUIDList& strings) { |
263 dbus::MessageWriter strings_array_variant(nullptr); | 265 dbus::MessageWriter strings_array_variant(nullptr); |
264 dict_writer->OpenVariant("as", &strings_array_variant); | 266 dict_writer->OpenVariant("as", &strings_array_variant); |
265 strings_array_variant.AppendArrayOfStrings(strings); | 267 strings_array_variant.AppendArrayOfStrings(strings); |
266 dict_writer->CloseContainer(&strings_array_variant); | 268 dict_writer->CloseContainer(&strings_array_variant); |
267 } | 269 } |
268 | 270 |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
406 dbus::Bus* bus, | 408 dbus::Bus* bus, |
407 const dbus::ObjectPath& object_path, | 409 const dbus::ObjectPath& object_path, |
408 Delegate* delegate, | 410 Delegate* delegate, |
409 AdvertisementType type, | 411 AdvertisementType type, |
410 scoped_ptr<UUIDList> service_uuids, | 412 scoped_ptr<UUIDList> service_uuids, |
411 scoped_ptr<ManufacturerData> manufacturer_data, | 413 scoped_ptr<ManufacturerData> manufacturer_data, |
412 scoped_ptr<UUIDList> solicit_uuids, | 414 scoped_ptr<UUIDList> solicit_uuids, |
413 scoped_ptr<ServiceData> service_data) { | 415 scoped_ptr<ServiceData> service_data) { |
414 if (!bluez::BluezDBusManager::Get()->IsUsingStub()) { | 416 if (!bluez::BluezDBusManager::Get()->IsUsingStub()) { |
415 return make_scoped_ptr(new BluetoothAdvertisementServiceProviderImpl( | 417 return make_scoped_ptr(new BluetoothAdvertisementServiceProviderImpl( |
416 bus, object_path, delegate, type, service_uuids.Pass(), | 418 bus, object_path, delegate, type, std::move(service_uuids), |
417 manufacturer_data.Pass(), solicit_uuids.Pass(), service_data.Pass())); | 419 std::move(manufacturer_data), std::move(solicit_uuids), |
| 420 std::move(service_data))); |
418 } else { | 421 } else { |
419 return make_scoped_ptr( | 422 return make_scoped_ptr( |
420 new FakeBluetoothLEAdvertisementServiceProvider(object_path, delegate)); | 423 new FakeBluetoothLEAdvertisementServiceProvider(object_path, delegate)); |
421 } | 424 } |
422 } | 425 } |
423 | 426 |
424 } // namespace bluez | 427 } // namespace bluez |
OLD | NEW |