| Index: dbus/values_util.cc
|
| diff --git a/dbus/values_util.cc b/dbus/values_util.cc
|
| index 7574f39a643d466b94fee5b437fdaf81cdd7d589..c27c2723b84cb9f42820d22ffe6cb8fc96ff1cd6 100644
|
| --- a/dbus/values_util.cc
|
| +++ b/dbus/values_util.cc
|
| @@ -77,6 +77,8 @@ std::string GetTypeSignature(const base::Value& value) {
|
| return "ay";
|
| case base::Value::TYPE_DICTIONARY:
|
| return "a{sv}";
|
| + case base::Value::TYPE_LIST:
|
| + return "av";
|
| default:
|
| DLOG(ERROR) << "Unexpected type " << value.GetType();
|
| return std::string();
|
| @@ -253,4 +255,53 @@ void AppendBasicTypeValueDataAsVariant(MessageWriter* writer,
|
| writer->CloseContainer(&sub_writer);
|
| }
|
|
|
| +void AppendValueData(MessageWriter* writer, const base::Value& value) {
|
| + switch (value.GetType()) {
|
| + case base::Value::TYPE_DICTIONARY: {
|
| + const base::DictionaryValue* dictionary = NULL;
|
| + value.GetAsDictionary(&dictionary);
|
| + dbus::MessageWriter array_writer(NULL);
|
| + writer->OpenArray("{sv}", &array_writer);
|
| + for (base::DictionaryValue::Iterator iter(*dictionary);
|
| + !iter.IsAtEnd(); iter.Advance()) {
|
| + dbus::MessageWriter dict_entry_writer(NULL);
|
| + array_writer.OpenDictEntry(&dict_entry_writer);
|
| + dict_entry_writer.AppendString(iter.key());
|
| + AppendValueDataAsVariant(&dict_entry_writer, iter.value());
|
| + array_writer.CloseContainer(&dict_entry_writer);
|
| + }
|
| + writer->CloseContainer(&array_writer);
|
| + break;
|
| + }
|
| + case base::Value::TYPE_LIST: {
|
| + const base::ListValue* list = NULL;
|
| + value.GetAsList(&list);
|
| + dbus::MessageWriter array_writer(NULL);
|
| + 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);
|
| + }
|
| + writer->CloseContainer(&array_writer);
|
| + break;
|
| + }
|
| + case base::Value::TYPE_BOOLEAN:
|
| + case base::Value::TYPE_INTEGER:
|
| + case base::Value::TYPE_DOUBLE:
|
| + case base::Value::TYPE_STRING:
|
| + AppendBasicTypeValueData(writer, value);
|
| + break;
|
| + default:
|
| + DLOG(ERROR) << "Unexpected type: " << value.GetType();
|
| + }
|
| +}
|
| +
|
| +void AppendValueDataAsVariant(MessageWriter* writer, const base::Value& value) {
|
| + MessageWriter variant_writer(NULL);
|
| + writer->OpenVariant(GetTypeSignature(value), &variant_writer);
|
| + AppendValueData(&variant_writer, value);
|
| + writer->CloseContainer(&variant_writer);
|
| +}
|
| +
|
| } // namespace dbus
|
|
|