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

Side by Side Diff: chromeos/dbus/shill_device_client.cc

Issue 10949030: This converts the Shill clients to allow propagation of shill errors (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 3 months 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chromeos/dbus/shill_device_client.h" 5 #include "chromeos/dbus/shill_device_client.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 11 matching lines...) Expand all
22 // The ShillDeviceClient implementation. 22 // The ShillDeviceClient implementation.
23 class ShillDeviceClientImpl : public ShillDeviceClient { 23 class ShillDeviceClientImpl : public ShillDeviceClient {
24 public: 24 public:
25 explicit ShillDeviceClientImpl(dbus::Bus* bus) 25 explicit ShillDeviceClientImpl(dbus::Bus* bus)
26 : bus_(bus), 26 : bus_(bus),
27 helpers_deleter_(&helpers_) { 27 helpers_deleter_(&helpers_) {
28 } 28 }
29 29
30 /////////////////////////////////////// 30 ///////////////////////////////////////
31 // ShillDeviceClient overrides. 31 // ShillDeviceClient overrides.
32 virtual void SetPropertyChangedHandler( 32 virtual void AddPropertyChangedObserver(
33 const dbus::ObjectPath& device_path, 33 const dbus::ObjectPath& device_path,
34 const PropertyChangedHandler& handler) OVERRIDE { 34 PropertyChangedObserver* observer) OVERRIDE {
35 GetHelper(device_path)->SetPropertyChangedHandler(handler); 35 GetHelper(device_path)->AddPropertyChangedObserver(observer);
36 } 36 }
37 37
38 virtual void ResetPropertyChangedHandler( 38 virtual void RemovePropertyChangedObserver(
39 const dbus::ObjectPath& device_path) OVERRIDE { 39 const dbus::ObjectPath& device_path,
40 GetHelper(device_path)->ResetPropertyChangedHandler(); 40 PropertyChangedObserver* observer) OVERRIDE {
41 GetHelper(device_path)->RemovePropertyChangedObserver(observer);
41 } 42 }
42 43
43 virtual void GetProperties(const dbus::ObjectPath& device_path, 44 virtual void GetProperties(const dbus::ObjectPath& device_path,
44 const DictionaryValueCallback& callback) OVERRIDE { 45 const DictionaryValueCallback& callback) OVERRIDE {
45 dbus::MethodCall method_call(flimflam::kFlimflamDeviceInterface, 46 dbus::MethodCall method_call(flimflam::kFlimflamDeviceInterface,
46 flimflam::kGetPropertiesFunction); 47 flimflam::kGetPropertiesFunction);
47 GetHelper(device_path)->CallDictionaryValueMethod(&method_call, callback); 48 GetHelper(device_path)->CallDictionaryValueMethod(&method_call, callback);
48 } 49 }
49 50
50 virtual base::DictionaryValue* CallGetPropertiesAndBlock( 51 virtual base::DictionaryValue* CallGetPropertiesAndBlock(
51 const dbus::ObjectPath& device_path) OVERRIDE { 52 const dbus::ObjectPath& device_path) OVERRIDE {
52 dbus::MethodCall method_call(flimflam::kFlimflamDeviceInterface, 53 dbus::MethodCall method_call(flimflam::kFlimflamDeviceInterface,
53 flimflam::kGetPropertiesFunction); 54 flimflam::kGetPropertiesFunction);
54 return GetHelper(device_path)->CallDictionaryValueMethodAndBlock( 55 return GetHelper(device_path)->CallDictionaryValueMethodAndBlock(
55 &method_call); 56 &method_call);
56 } 57 }
57 58
58 virtual void ProposeScan(const dbus::ObjectPath& device_path, 59 virtual void ProposeScan(const dbus::ObjectPath& device_path,
59 const VoidDBusMethodCallback& callback) OVERRIDE { 60 const VoidDBusMethodCallback& callback) OVERRIDE {
60 dbus::MethodCall method_call(flimflam::kFlimflamDeviceInterface, 61 dbus::MethodCall method_call(flimflam::kFlimflamDeviceInterface,
61 flimflam::kProposeScanFunction); 62 flimflam::kProposeScanFunction);
62 GetHelper(device_path)->CallVoidMethod(&method_call, callback); 63 GetHelper(device_path)->CallVoidMethod(&method_call, callback);
63 } 64 }
64 65
65 virtual void SetProperty(const dbus::ObjectPath& device_path, 66 virtual void SetProperty(const dbus::ObjectPath& device_path,
66 const std::string& name, 67 const std::string& name,
67 const base::Value& value, 68 const base::Value& value,
68 const VoidDBusMethodCallback& callback) OVERRIDE { 69 const base::Closure& callback,
70 const ErrorCallback& error_callback) OVERRIDE {
69 dbus::MethodCall method_call(flimflam::kFlimflamDeviceInterface, 71 dbus::MethodCall method_call(flimflam::kFlimflamDeviceInterface,
70 flimflam::kSetPropertyFunction); 72 flimflam::kSetPropertyFunction);
71 dbus::MessageWriter writer(&method_call); 73 dbus::MessageWriter writer(&method_call);
72 writer.AppendString(name); 74 writer.AppendString(name);
73 ShillClientHelper::AppendValueDataAsVariant(&writer, value); 75 ShillClientHelper::AppendValueDataAsVariant(&writer, value);
74 GetHelper(device_path)->CallVoidMethod(&method_call, callback); 76 GetHelper(device_path)->CallVoidMethodWithErrorCallback(&method_call,
77 callback,
78 error_callback);
75 } 79 }
76 80
77 virtual void ClearProperty(const dbus::ObjectPath& device_path, 81 virtual void ClearProperty(const dbus::ObjectPath& device_path,
78 const std::string& name, 82 const std::string& name,
79 const VoidDBusMethodCallback& callback) OVERRIDE { 83 const VoidDBusMethodCallback& callback) OVERRIDE {
80 dbus::MethodCall method_call(flimflam::kFlimflamDeviceInterface, 84 dbus::MethodCall method_call(flimflam::kFlimflamDeviceInterface,
81 flimflam::kClearPropertyFunction); 85 flimflam::kClearPropertyFunction);
82 dbus::MessageWriter writer(&method_call); 86 dbus::MessageWriter writer(&method_call);
83 writer.AppendString(name); 87 writer.AppendString(name);
84 GetHelper(device_path)->CallVoidMethod(&method_call, callback); 88 GetHelper(device_path)->CallVoidMethod(&method_call, callback);
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 base::Value::CreateStringValue(":stub.0")); 232 base::Value::CreateStringValue(":stub.0"));
229 cellular_properties->SetWithoutPathExpansion( 233 cellular_properties->SetWithoutPathExpansion(
230 flimflam::kDBusObjectProperty, 234 flimflam::kDBusObjectProperty,
231 base::Value::CreateStringValue( 235 base::Value::CreateStringValue(
232 "/org/freedesktop/ModemManager1/stub/0")); 236 "/org/freedesktop/ModemManager1/stub/0"));
233 stub_devices_.Set(kStubCellular2, cellular_properties); 237 stub_devices_.Set(kStubCellular2, cellular_properties);
234 } 238 }
235 239
236 virtual ~ShillDeviceClientStubImpl() {} 240 virtual ~ShillDeviceClientStubImpl() {}
237 241
238 // ShillDeviceClient override. 242 ///////////////////////////////////
239 virtual void SetPropertyChangedHandler( 243 // ShillDeviceClient overrides.
244 virtual void AddPropertyChangedObserver(
240 const dbus::ObjectPath& device_path, 245 const dbus::ObjectPath& device_path,
241 const PropertyChangedHandler& handler) OVERRIDE {} 246 PropertyChangedObserver* observer) OVERRIDE {}
242 247
243 // ShillDeviceClient override. 248 virtual void RemovePropertyChangedObserver(
244 virtual void ResetPropertyChangedHandler( 249 const dbus::ObjectPath& device_path,
245 const dbus::ObjectPath& device_path) OVERRIDE {} 250 PropertyChangedObserver* observer) OVERRIDE {}
246 251
247 // ShillDeviceClient override.
248 virtual void GetProperties(const dbus::ObjectPath& device_path, 252 virtual void GetProperties(const dbus::ObjectPath& device_path,
249 const DictionaryValueCallback& callback) OVERRIDE { 253 const DictionaryValueCallback& callback) OVERRIDE {
250 MessageLoop::current()->PostTask( 254 MessageLoop::current()->PostTask(
251 FROM_HERE, 255 FROM_HERE,
252 base::Bind(&ShillDeviceClientStubImpl::PassStubDevicePrperties, 256 base::Bind(&ShillDeviceClientStubImpl::PassStubDeviceProperties,
253 weak_ptr_factory_.GetWeakPtr(), 257 weak_ptr_factory_.GetWeakPtr(),
254 device_path, callback)); 258 device_path, callback));
255 } 259 }
256 260
257 // ShillDeviceClient override.
258 virtual base::DictionaryValue* CallGetPropertiesAndBlock( 261 virtual base::DictionaryValue* CallGetPropertiesAndBlock(
259 const dbus::ObjectPath& device_path) OVERRIDE { 262 const dbus::ObjectPath& device_path) OVERRIDE {
260 return new base::DictionaryValue; 263 return new base::DictionaryValue;
261 } 264 }
262 265
263 // ShillProfileClient override.
264 virtual void ProposeScan(const dbus::ObjectPath& device_path, 266 virtual void ProposeScan(const dbus::ObjectPath& device_path,
265 const VoidDBusMethodCallback& callback) OVERRIDE { 267 const VoidDBusMethodCallback& callback) OVERRIDE {
266 PostVoidCallback(callback, DBUS_METHOD_CALL_SUCCESS); 268 PostVoidCallback(callback, DBUS_METHOD_CALL_SUCCESS);
267 } 269 }
268 270
269 // ShillDeviceClient override.
270 virtual void SetProperty(const dbus::ObjectPath& device_path, 271 virtual void SetProperty(const dbus::ObjectPath& device_path,
271 const std::string& name, 272 const std::string& name,
272 const base::Value& value, 273 const base::Value& value,
273 const VoidDBusMethodCallback& callback) OVERRIDE { 274 const base::Closure& callback,
275 const ErrorCallback& error_callback) OVERRIDE {
274 base::DictionaryValue* device_properties = NULL; 276 base::DictionaryValue* device_properties = NULL;
275 if (!stub_devices_.GetDictionary(device_path.value(), &device_properties)) { 277 if (!stub_devices_.GetDictionary(device_path.value(), &device_properties)) {
276 PostVoidCallback(callback, DBUS_METHOD_CALL_FAILURE); 278 std::string error_name("org.chromium.flimflam.Error.Failure");
279 std::string error_message("Failed");
280 MessageLoop::current()->PostTask(FROM_HERE,
281 base::Bind(error_callback,
282 error_name,
283 error_message));
277 return; 284 return;
278 } 285 }
279 device_properties->Set(name, value.DeepCopy()); 286 device_properties->Set(name, value.DeepCopy());
280 PostVoidCallback(callback, DBUS_METHOD_CALL_SUCCESS); 287 MessageLoop::current()->PostTask(FROM_HERE, callback);
281 } 288 }
282 289
283 // ShillDeviceClient override.
284 virtual void ClearProperty(const dbus::ObjectPath& device_path, 290 virtual void ClearProperty(const dbus::ObjectPath& device_path,
285 const std::string& name, 291 const std::string& name,
286 const VoidDBusMethodCallback& callback) OVERRIDE { 292 const VoidDBusMethodCallback& callback) OVERRIDE {
287 base::DictionaryValue* device_properties = NULL; 293 base::DictionaryValue* device_properties = NULL;
288 if (!stub_devices_.GetDictionary(device_path.value(), &device_properties)) { 294 if (!stub_devices_.GetDictionary(device_path.value(), &device_properties)) {
289 PostVoidCallback(callback, DBUS_METHOD_CALL_FAILURE); 295 PostVoidCallback(callback, DBUS_METHOD_CALL_FAILURE);
290 return; 296 return;
291 } 297 }
292 device_properties->Remove(name, NULL); 298 device_properties->Remove(name, NULL);
293 PostVoidCallback(callback, DBUS_METHOD_CALL_SUCCESS); 299 PostVoidCallback(callback, DBUS_METHOD_CALL_SUCCESS);
294 } 300 }
295 301
296 // ShillDeviceClient override.
297 virtual void AddIPConfig( 302 virtual void AddIPConfig(
298 const dbus::ObjectPath& device_path, 303 const dbus::ObjectPath& device_path,
299 const std::string& method, 304 const std::string& method,
300 const ObjectPathDBusMethodCallback& callback) OVERRIDE { 305 const ObjectPathDBusMethodCallback& callback) OVERRIDE {
301 MessageLoop::current()->PostTask(FROM_HERE, 306 MessageLoop::current()->PostTask(FROM_HERE,
302 base::Bind(callback, 307 base::Bind(callback,
303 DBUS_METHOD_CALL_SUCCESS, 308 DBUS_METHOD_CALL_SUCCESS,
304 dbus::ObjectPath())); 309 dbus::ObjectPath()));
305 } 310 }
306 311
307 // ShillDeviceClient override.
308 virtual dbus::ObjectPath CallAddIPConfigAndBlock( 312 virtual dbus::ObjectPath CallAddIPConfigAndBlock(
309 const dbus::ObjectPath& device_path, 313 const dbus::ObjectPath& device_path,
310 const std::string& method) OVERRIDE { 314 const std::string& method) OVERRIDE {
311 return dbus::ObjectPath(); 315 return dbus::ObjectPath();
312 } 316 }
313 317
314 // ShillDeviceClient override.
315 virtual void RequirePin(const dbus::ObjectPath& device_path, 318 virtual void RequirePin(const dbus::ObjectPath& device_path,
316 const std::string& pin, 319 const std::string& pin,
317 bool require, 320 bool require,
318 const base::Closure& callback, 321 const base::Closure& callback,
319 const ErrorCallback& error_callback) OVERRIDE { 322 const ErrorCallback& error_callback) OVERRIDE {
320 MessageLoop::current()->PostTask(FROM_HERE, callback); 323 MessageLoop::current()->PostTask(FROM_HERE, callback);
321 } 324 }
322 325
323 // ShillDeviceClient override.
324 virtual void EnterPin(const dbus::ObjectPath& device_path, 326 virtual void EnterPin(const dbus::ObjectPath& device_path,
325 const std::string& pin, 327 const std::string& pin,
326 const base::Closure& callback, 328 const base::Closure& callback,
327 const ErrorCallback& error_callback) OVERRIDE { 329 const ErrorCallback& error_callback) OVERRIDE {
328 MessageLoop::current()->PostTask(FROM_HERE, callback); 330 MessageLoop::current()->PostTask(FROM_HERE, callback);
329 } 331 }
330 332
331 // ShillDeviceClient override.
332 virtual void UnblockPin(const dbus::ObjectPath& device_path, 333 virtual void UnblockPin(const dbus::ObjectPath& device_path,
333 const std::string& puk, 334 const std::string& puk,
334 const std::string& pin, 335 const std::string& pin,
335 const base::Closure& callback, 336 const base::Closure& callback,
336 const ErrorCallback& error_callback) OVERRIDE { 337 const ErrorCallback& error_callback) OVERRIDE {
337 MessageLoop::current()->PostTask(FROM_HERE, callback); 338 MessageLoop::current()->PostTask(FROM_HERE, callback);
338 } 339 }
339 340
340 // ShillDeviceClient override.
341 virtual void ChangePin(const dbus::ObjectPath& device_path, 341 virtual void ChangePin(const dbus::ObjectPath& device_path,
342 const std::string& old_pin, 342 const std::string& old_pin,
343 const std::string& new_pin, 343 const std::string& new_pin,
344 const base::Closure& callback, 344 const base::Closure& callback,
345 const ErrorCallback& error_callback) OVERRIDE { 345 const ErrorCallback& error_callback) OVERRIDE {
346 MessageLoop::current()->PostTask(FROM_HERE, callback); 346 MessageLoop::current()->PostTask(FROM_HERE, callback);
347 } 347 }
348 348
349 // ShillDeviceClient override.
350 virtual void Register(const dbus::ObjectPath& device_path, 349 virtual void Register(const dbus::ObjectPath& device_path,
351 const std::string& network_id, 350 const std::string& network_id,
352 const base::Closure& callback, 351 const base::Closure& callback,
353 const ErrorCallback& error_callback) OVERRIDE { 352 const ErrorCallback& error_callback) OVERRIDE {
354 MessageLoop::current()->PostTask(FROM_HERE, callback); 353 MessageLoop::current()->PostTask(FROM_HERE, callback);
355 } 354 }
356 355
357 private: 356 private:
358 void PassStubDevicePrperties(const dbus::ObjectPath& device_path, 357 void PassStubDeviceProperties(const dbus::ObjectPath& device_path,
359 const DictionaryValueCallback& callback) const { 358 const DictionaryValueCallback& callback) const {
360 const base::DictionaryValue* device_properties = NULL; 359 const base::DictionaryValue* device_properties = NULL;
361 if (!stub_devices_.GetDictionary(device_path.value(), &device_properties)) { 360 if (!stub_devices_.GetDictionary(device_path.value(), &device_properties)) {
362 base::DictionaryValue empty_dictionary; 361 base::DictionaryValue empty_dictionary;
363 callback.Run(DBUS_METHOD_CALL_FAILURE, empty_dictionary); 362 callback.Run(DBUS_METHOD_CALL_FAILURE, empty_dictionary);
364 return; 363 return;
365 } 364 }
366 callback.Run(DBUS_METHOD_CALL_SUCCESS, *device_properties); 365 callback.Run(DBUS_METHOD_CALL_SUCCESS, *device_properties);
367 } 366 }
368 367
(...skipping 24 matching lines...) Expand all
393 ShillDeviceClient* ShillDeviceClient::Create( 392 ShillDeviceClient* ShillDeviceClient::Create(
394 DBusClientImplementationType type, 393 DBusClientImplementationType type,
395 dbus::Bus* bus) { 394 dbus::Bus* bus) {
396 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) 395 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
397 return new ShillDeviceClientImpl(bus); 396 return new ShillDeviceClientImpl(bus);
398 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); 397 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type);
399 return new ShillDeviceClientStubImpl(); 398 return new ShillDeviceClientStubImpl();
400 } 399 }
401 400
402 } // namespace chromeos 401 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698