| Index: chromeos/dbus/nfc_client_helpers.cc
|
| diff --git a/chromeos/dbus/nfc_client_helpers.cc b/chromeos/dbus/nfc_client_helpers.cc
|
| index d849ca4d9268627e66b5eb625308fbb8bd6a721d..c442bc09023ab2b11da3895fd55b57c7e6061036 100644
|
| --- a/chromeos/dbus/nfc_client_helpers.cc
|
| +++ b/chromeos/dbus/nfc_client_helpers.cc
|
| @@ -5,6 +5,7 @@
|
| #include "chromeos/dbus/nfc_client_helpers.h"
|
|
|
| #include "base/stl_util.h"
|
| +#include "dbus/values_util.h"
|
|
|
| namespace chromeos {
|
| namespace nfc_client_helpers {
|
| @@ -33,6 +34,55 @@ void OnError(const ErrorCallback& error_callback,
|
| error_callback.Run(error_name, error_message);
|
| }
|
|
|
| +void AppendValueDataAsVariant(dbus::MessageWriter* writer,
|
| + const base::Value& value) {
|
| + switch (value.GetType()) {
|
| + case base::Value::TYPE_DICTIONARY: {
|
| + const base::DictionaryValue* dictionary = NULL;
|
| + value.GetAsDictionary(&dictionary);
|
| + dbus::MessageWriter variant_writer(NULL);
|
| + dbus::MessageWriter array_writer(NULL);
|
| + writer->OpenVariant("a{sv}", &variant_writer);
|
| + variant_writer.OpenArray("{sv}", &array_writer);
|
| + for (base::DictionaryValue::Iterator iter(*dictionary);
|
| + !iter.IsAtEnd(); iter.Advance()) {
|
| + dbus::MessageWriter entry_writer(NULL);
|
| + array_writer.OpenDictEntry(&entry_writer);
|
| + entry_writer.AppendString(iter.key());
|
| + AppendValueDataAsVariant(&entry_writer, iter.value());
|
| + array_writer.CloseContainer(&entry_writer);
|
| + }
|
| + variant_writer.CloseContainer(&array_writer);
|
| + writer->CloseContainer(&variant_writer);
|
| + break;
|
| + }
|
| + case base::Value::TYPE_LIST: {
|
| + const base::ListValue* list = NULL;
|
| + value.GetAsList(&list);
|
| + dbus::MessageWriter variant_writer(NULL);
|
| + dbus::MessageWriter array_writer(NULL);
|
| + writer->OpenVariant("av", &variant_writer);
|
| + variant_writer.OpenArray("v", &array_writer);
|
| + for (base::ListValue::const_iterator iter = list->begin();
|
| + iter != list->end(); ++iter) {
|
| + const base::Value* value = *iter;
|
| + AppendValueDataAsVariant(&array_writer, *value);
|
| + }
|
| + variant_writer.CloseContainer(&array_writer);
|
| + writer->CloseContainer(&variant_writer);
|
| + break;
|
| + }
|
| + case base::Value::TYPE_BOOLEAN:
|
| + case base::Value::TYPE_INTEGER:
|
| + case base::Value::TYPE_DOUBLE:
|
| + case base::Value::TYPE_STRING:
|
| + dbus::AppendBasicTypeValueDataAsVariant(writer, value);
|
| + break;
|
| + default:
|
| + DLOG(ERROR) << "Unexpected type: " << value.GetType();
|
| + }
|
| +}
|
| +
|
| DBusObjectMap::DBusObjectMap(const std::string& service_name,
|
| Delegate* delegate,
|
| dbus::Bus* bus)
|
|
|