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
3 // found in the LICENSE file.
5 #include "chromeos/network/network_handler_callbacks.h"
7 #include "base/logging.h"
8 #include "base/values.h"
9 #include "chromeos/network/network_event_log.h"
12 namespace network_handler
{
14 // None of these messages are user-facing, they should only appear in logs.
15 const char kDBusFailedError
[] = "Error.DBusFailed";
16 const char kDBusFailedErrorMessage
[] = "DBus call failed.";
18 // These are names of fields in the error data dictionary for ErrorCallback.
19 const char kErrorName
[] = "errorName";
20 const char kErrorDetail
[] = "errorDetail";
21 const char kDbusErrorName
[] = "dbusErrorName";
22 const char kDbusErrorMessage
[] = "dbusErrorMessage";
23 const char kPath
[] = "path";
25 base::DictionaryValue
* CreateErrorData(const std::string
& path
,
26 const std::string
& error_name
,
27 const std::string
& error_detail
) {
28 return CreateDBusErrorData(path
, error_name
, error_detail
, "", "");
31 void RunErrorCallback(const ErrorCallback
& error_callback
,
32 const std::string
& path
,
33 const std::string
& error_name
,
34 const std::string
& error_detail
) {
35 if (error_callback
.is_null())
39 make_scoped_ptr(CreateErrorData(path
, error_name
, error_detail
)));
42 base::DictionaryValue
* CreateDBusErrorData(
43 const std::string
& path
,
44 const std::string
& error_name
,
45 const std::string
& error_detail
,
46 const std::string
& dbus_error_name
,
47 const std::string
& dbus_error_message
) {
48 base::DictionaryValue
* error_data(new base::DictionaryValue
);
49 error_data
->SetString(kErrorName
, error_name
);
50 error_data
->SetString(kErrorDetail
, error_detail
);
51 error_data
->SetString(kDbusErrorName
, dbus_error_name
);
52 error_data
->SetString(kDbusErrorMessage
, dbus_error_message
);
54 error_data
->SetString(kPath
, path
);
58 void ShillErrorCallbackFunction(const std::string
& error_name
,
59 const std::string
& path
,
60 const ErrorCallback
& error_callback
,
61 const std::string
& dbus_error_name
,
62 const std::string
& dbus_error_message
) {
65 detail
+= path
+ ": ";
66 detail
+= dbus_error_name
;
67 if (!dbus_error_message
.empty())
68 detail
+= ": " + dbus_error_message
;
69 NET_LOG_ERROR(error_name
, detail
);
71 if (error_callback
.is_null())
73 scoped_ptr
<base::DictionaryValue
> error_data(
74 CreateDBusErrorData(path
, error_name
, detail
,
75 dbus_error_name
, dbus_error_message
));
76 error_callback
.Run(error_name
, error_data
.Pass());
79 void GetPropertiesCallback(const DictionaryResultCallback
& callback
,
80 const ErrorCallback
& error_callback
,
81 const std::string
& path
,
82 DBusMethodCallStatus call_status
,
83 const base::DictionaryValue
& value
) {
84 if (call_status
!= DBUS_METHOD_CALL_SUCCESS
) {
86 base::StringPrintf("GetProperties failed. Status: %d", call_status
),
89 error_callback
, path
, kDBusFailedError
, kDBusFailedErrorMessage
);
90 } else if (!callback
.is_null()) {
91 callback
.Run(path
, value
);
95 } // namespace network_handler
96 } // namespace chromeos