| OLD | NEW |
| 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 "dbus/values_util.h" | 5 #include "dbus/values_util.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 if (!value) | 60 if (!value) |
| 61 return false; | 61 return false; |
| 62 dictionary_value->SetWithoutPathExpansion(key_string, std::move(value)); | 62 dictionary_value->SetWithoutPathExpansion(key_string, std::move(value)); |
| 63 } | 63 } |
| 64 return true; | 64 return true; |
| 65 } | 65 } |
| 66 | 66 |
| 67 // Gets the D-Bus type signature for the value. | 67 // Gets the D-Bus type signature for the value. |
| 68 std::string GetTypeSignature(const base::Value& value) { | 68 std::string GetTypeSignature(const base::Value& value) { |
| 69 switch (value.GetType()) { | 69 switch (value.GetType()) { |
| 70 case base::Value::TYPE_BOOLEAN: | 70 case base::Value::Type::BOOLEAN: |
| 71 return "b"; | 71 return "b"; |
| 72 case base::Value::TYPE_INTEGER: | 72 case base::Value::Type::INTEGER: |
| 73 return "i"; | 73 return "i"; |
| 74 case base::Value::TYPE_DOUBLE: | 74 case base::Value::Type::DOUBLE: |
| 75 return "d"; | 75 return "d"; |
| 76 case base::Value::TYPE_STRING: | 76 case base::Value::Type::STRING: |
| 77 return "s"; | 77 return "s"; |
| 78 case base::Value::TYPE_BINARY: | 78 case base::Value::Type::BINARY: |
| 79 return "ay"; | 79 return "ay"; |
| 80 case base::Value::TYPE_DICTIONARY: | 80 case base::Value::Type::DICTIONARY: |
| 81 return "a{sv}"; | 81 return "a{sv}"; |
| 82 case base::Value::TYPE_LIST: | 82 case base::Value::Type::LIST: |
| 83 return "av"; | 83 return "av"; |
| 84 default: | 84 default: |
| 85 DLOG(ERROR) << "Unexpected type " << value.GetType(); | 85 DLOG(ERROR) << "Unexpected type " << value.GetType(); |
| 86 return std::string(); | 86 return std::string(); |
| 87 } | 87 } |
| 88 } | 88 } |
| 89 | 89 |
| 90 } // namespace | 90 } // namespace |
| 91 | 91 |
| 92 std::unique_ptr<base::Value> PopDataAsValue(MessageReader* reader) { | 92 std::unique_ptr<base::Value> PopDataAsValue(MessageReader* reader) { |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 if (reader->PopVariant(&sub_reader)) | 212 if (reader->PopVariant(&sub_reader)) |
| 213 result = PopDataAsValue(&sub_reader); | 213 result = PopDataAsValue(&sub_reader); |
| 214 break; | 214 break; |
| 215 } | 215 } |
| 216 } | 216 } |
| 217 return result; | 217 return result; |
| 218 } | 218 } |
| 219 | 219 |
| 220 void AppendBasicTypeValueData(MessageWriter* writer, const base::Value& value) { | 220 void AppendBasicTypeValueData(MessageWriter* writer, const base::Value& value) { |
| 221 switch (value.GetType()) { | 221 switch (value.GetType()) { |
| 222 case base::Value::TYPE_BOOLEAN: { | 222 case base::Value::Type::BOOLEAN: { |
| 223 bool bool_value = false; | 223 bool bool_value = false; |
| 224 bool success = value.GetAsBoolean(&bool_value); | 224 bool success = value.GetAsBoolean(&bool_value); |
| 225 DCHECK(success); | 225 DCHECK(success); |
| 226 writer->AppendBool(bool_value); | 226 writer->AppendBool(bool_value); |
| 227 break; | 227 break; |
| 228 } | 228 } |
| 229 case base::Value::TYPE_INTEGER: { | 229 case base::Value::Type::INTEGER: { |
| 230 int int_value = 0; | 230 int int_value = 0; |
| 231 bool success = value.GetAsInteger(&int_value); | 231 bool success = value.GetAsInteger(&int_value); |
| 232 DCHECK(success); | 232 DCHECK(success); |
| 233 writer->AppendInt32(int_value); | 233 writer->AppendInt32(int_value); |
| 234 break; | 234 break; |
| 235 } | 235 } |
| 236 case base::Value::TYPE_DOUBLE: { | 236 case base::Value::Type::DOUBLE: { |
| 237 double double_value = 0; | 237 double double_value = 0; |
| 238 bool success = value.GetAsDouble(&double_value); | 238 bool success = value.GetAsDouble(&double_value); |
| 239 DCHECK(success); | 239 DCHECK(success); |
| 240 writer->AppendDouble(double_value); | 240 writer->AppendDouble(double_value); |
| 241 break; | 241 break; |
| 242 } | 242 } |
| 243 case base::Value::TYPE_STRING: { | 243 case base::Value::Type::STRING: { |
| 244 std::string string_value; | 244 std::string string_value; |
| 245 bool success = value.GetAsString(&string_value); | 245 bool success = value.GetAsString(&string_value); |
| 246 DCHECK(success); | 246 DCHECK(success); |
| 247 writer->AppendString(string_value); | 247 writer->AppendString(string_value); |
| 248 break; | 248 break; |
| 249 } | 249 } |
| 250 default: | 250 default: |
| 251 DLOG(ERROR) << "Unexpected type " << value.GetType(); | 251 DLOG(ERROR) << "Unexpected type " << value.GetType(); |
| 252 break; | 252 break; |
| 253 } | 253 } |
| 254 } | 254 } |
| 255 | 255 |
| 256 void AppendBasicTypeValueDataAsVariant(MessageWriter* writer, | 256 void AppendBasicTypeValueDataAsVariant(MessageWriter* writer, |
| 257 const base::Value& value) { | 257 const base::Value& value) { |
| 258 MessageWriter sub_writer(NULL); | 258 MessageWriter sub_writer(NULL); |
| 259 writer->OpenVariant(GetTypeSignature(value), &sub_writer); | 259 writer->OpenVariant(GetTypeSignature(value), &sub_writer); |
| 260 AppendBasicTypeValueData(&sub_writer, value); | 260 AppendBasicTypeValueData(&sub_writer, value); |
| 261 writer->CloseContainer(&sub_writer); | 261 writer->CloseContainer(&sub_writer); |
| 262 } | 262 } |
| 263 | 263 |
| 264 void AppendValueData(MessageWriter* writer, const base::Value& value) { | 264 void AppendValueData(MessageWriter* writer, const base::Value& value) { |
| 265 switch (value.GetType()) { | 265 switch (value.GetType()) { |
| 266 case base::Value::TYPE_DICTIONARY: { | 266 case base::Value::Type::DICTIONARY: { |
| 267 const base::DictionaryValue* dictionary = NULL; | 267 const base::DictionaryValue* dictionary = NULL; |
| 268 value.GetAsDictionary(&dictionary); | 268 value.GetAsDictionary(&dictionary); |
| 269 dbus::MessageWriter array_writer(NULL); | 269 dbus::MessageWriter array_writer(NULL); |
| 270 writer->OpenArray("{sv}", &array_writer); | 270 writer->OpenArray("{sv}", &array_writer); |
| 271 for (base::DictionaryValue::Iterator iter(*dictionary); | 271 for (base::DictionaryValue::Iterator iter(*dictionary); |
| 272 !iter.IsAtEnd(); iter.Advance()) { | 272 !iter.IsAtEnd(); iter.Advance()) { |
| 273 dbus::MessageWriter dict_entry_writer(NULL); | 273 dbus::MessageWriter dict_entry_writer(NULL); |
| 274 array_writer.OpenDictEntry(&dict_entry_writer); | 274 array_writer.OpenDictEntry(&dict_entry_writer); |
| 275 dict_entry_writer.AppendString(iter.key()); | 275 dict_entry_writer.AppendString(iter.key()); |
| 276 AppendValueDataAsVariant(&dict_entry_writer, iter.value()); | 276 AppendValueDataAsVariant(&dict_entry_writer, iter.value()); |
| 277 array_writer.CloseContainer(&dict_entry_writer); | 277 array_writer.CloseContainer(&dict_entry_writer); |
| 278 } | 278 } |
| 279 writer->CloseContainer(&array_writer); | 279 writer->CloseContainer(&array_writer); |
| 280 break; | 280 break; |
| 281 } | 281 } |
| 282 case base::Value::TYPE_LIST: { | 282 case base::Value::Type::LIST: { |
| 283 const base::ListValue* list = NULL; | 283 const base::ListValue* list = NULL; |
| 284 value.GetAsList(&list); | 284 value.GetAsList(&list); |
| 285 dbus::MessageWriter array_writer(NULL); | 285 dbus::MessageWriter array_writer(NULL); |
| 286 writer->OpenArray("v", &array_writer); | 286 writer->OpenArray("v", &array_writer); |
| 287 for (const auto& value : *list) { | 287 for (const auto& value : *list) { |
| 288 AppendValueDataAsVariant(&array_writer, *value); | 288 AppendValueDataAsVariant(&array_writer, *value); |
| 289 } | 289 } |
| 290 writer->CloseContainer(&array_writer); | 290 writer->CloseContainer(&array_writer); |
| 291 break; | 291 break; |
| 292 } | 292 } |
| 293 case base::Value::TYPE_BOOLEAN: | 293 case base::Value::Type::BOOLEAN: |
| 294 case base::Value::TYPE_INTEGER: | 294 case base::Value::Type::INTEGER: |
| 295 case base::Value::TYPE_DOUBLE: | 295 case base::Value::Type::DOUBLE: |
| 296 case base::Value::TYPE_STRING: | 296 case base::Value::Type::STRING: |
| 297 AppendBasicTypeValueData(writer, value); | 297 AppendBasicTypeValueData(writer, value); |
| 298 break; | 298 break; |
| 299 default: | 299 default: |
| 300 DLOG(ERROR) << "Unexpected type: " << value.GetType(); | 300 DLOG(ERROR) << "Unexpected type: " << value.GetType(); |
| 301 } | 301 } |
| 302 } | 302 } |
| 303 | 303 |
| 304 void AppendValueDataAsVariant(MessageWriter* writer, const base::Value& value) { | 304 void AppendValueDataAsVariant(MessageWriter* writer, const base::Value& value) { |
| 305 MessageWriter variant_writer(NULL); | 305 MessageWriter variant_writer(NULL); |
| 306 writer->OpenVariant(GetTypeSignature(value), &variant_writer); | 306 writer->OpenVariant(GetTypeSignature(value), &variant_writer); |
| 307 AppendValueData(&variant_writer, value); | 307 AppendValueData(&variant_writer, value); |
| 308 writer->CloseContainer(&variant_writer); | 308 writer->CloseContainer(&variant_writer); |
| 309 } | 309 } |
| 310 | 310 |
| 311 } // namespace dbus | 311 } // namespace dbus |
| OLD | NEW |