1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "components/login/base_screen_handler_utils.h"
7 #include "components/account_id/account_id.h"
13 template <typename StringListType>
14 bool ParseStringList(const base::Value* value, StringListType* out_value) {
15 const base::ListValue* list = nullptr;
16 if (!value->GetAsList(&list))
18 out_value->resize(list->GetSize());
19 for (size_t i = 0; i < list->GetSize(); ++i) {
20 if (!list->GetString(i, &((*out_value)[i])))
28 bool ParseValue(const base::Value* value, bool* out_value) {
29 return value->GetAsBoolean(out_value);
32 bool ParseValue(const base::Value* value, int* out_value) {
33 return value->GetAsInteger(out_value);
36 bool ParseValue(const base::Value* value, double* out_value) {
37 return value->GetAsDouble(out_value);
40 bool ParseValue(const base::Value* value, std::string* out_value) {
41 return value->GetAsString(out_value);
44 bool ParseValue(const base::Value* value, base::string16* out_value) {
45 return value->GetAsString(out_value);
48 bool ParseValue(const base::Value* value,
49 const base::DictionaryValue** out_value) {
50 return value->GetAsDictionary(out_value);
53 bool ParseValue(const base::Value* value, StringList* out_value) {
54 return ParseStringList(value, out_value);
57 bool ParseValue(const base::Value* value, String16List* out_value) {
58 return ParseStringList(value, out_value);
61 bool ParseValue(const base::Value* value, AccountId* out_value) {
62 std::string serialized;
63 const bool has_string = value->GetAsString(&serialized);
67 if (AccountId::Deserialize(serialized, out_value))
70 *out_value = AccountId::FromUserEmail(serialized);
71 LOG(ERROR) << "Failed to deserialize, parse as email, valid="
72 << out_value->is_valid();
76 base::Value MakeValue(bool v) {
77 return base::Value(v);
80 base::Value MakeValue(int v) {
81 return base::Value(v);
84 base::Value MakeValue(double v) {
85 return base::Value(v);
88 base::Value MakeValue(const std::string& v) {
89 return base::Value(v);
92 base::Value MakeValue(const base::string16& v) {
93 return base::Value(v);
96 base::Value MakeValue(const AccountId& v) {
97 return base::Value(v.Serialize());
100 ParsedValueContainer<AccountId>::ParsedValueContainer() {