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

Unified Diff: chromeos/dbus/nfc_client_helpers.cc

Issue 99903003: nfc: Various fixes to the NFC D-Bus client in chromeos/dbus. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed clang error. Created 7 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chromeos/dbus/nfc_client_helpers.h ('k') | chromeos/dbus/nfc_client_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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)
« no previous file with comments | « chromeos/dbus/nfc_client_helpers.h ('k') | chromeos/dbus/nfc_client_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698