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 |