1// Copyright 2013 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.
4
5#include "components/autofill/content/browser/wallet/gaia_account.h"
6
7#include "base/logging.h"
8#include "base/values.h"
9
10namespace autofill {
11
12namespace wallet {
13
14GaiaAccount::~GaiaAccount() {}
15
16// static
17scoped_ptr<GaiaAccount> GaiaAccount::Create(
18    const base::DictionaryValue& dictionary) {
19  std::string email_address;
20  if (!dictionary.GetString("buyer_email", &email_address)) {
21    DLOG(ERROR) << "GAIA account: missing email address";
22    return scoped_ptr<GaiaAccount>();
23  }
24
25  std::string obfuscated_id;
26  if (!dictionary.GetString("gaia_id", &obfuscated_id)) {
27    DLOG(ERROR) << "GAIA account: missing GAIA id";
28    return scoped_ptr<GaiaAccount>();
29  }
30
31  int index = 0;
32  if (!dictionary.GetInteger("gaia_index", &index) ||
33      index < 0) {
34    DLOG(ERROR) << "GAIA account: missing or bad GAIA index";
35    return scoped_ptr<GaiaAccount>();
36  }
37
38  bool is_active = false;
39  if (!dictionary.GetBoolean("is_active", &is_active)) {
40    DLOG(ERROR) << "GAIA account: missing is_active";
41    return scoped_ptr<GaiaAccount>();
42  }
43
44  return scoped_ptr<GaiaAccount>(new GaiaAccount(email_address,
45                                                 obfuscated_id,
46                                                 index,
47                                                 is_active));
48}
49
50// static
51scoped_ptr<GaiaAccount> GaiaAccount::CreateForTesting(
52    const std::string& email_address,
53    const std::string& obfuscated_id,
54    size_t index,
55    bool is_active) {
56  scoped_ptr<GaiaAccount> account(new GaiaAccount(email_address,
57                                                  obfuscated_id,
58                                                  index,
59                                                  is_active));
60  return account.Pass();
61}
62
63bool GaiaAccount::operator==(const GaiaAccount& other) const {
64  return email_address_ == other.email_address_ &&
65      obfuscated_id_ == other.obfuscated_id_ &&
66      index_ == other.index_ &&
67      is_active_ == other.is_active_;
68}
69
70bool GaiaAccount::operator!=(const GaiaAccount& other) const {
71  return !(*this == other);
72}
73
74GaiaAccount::GaiaAccount(const std::string& email_address,
75                         const std::string& obfuscated_id,
76                         size_t index,
77                         bool is_active)
78    : email_address_(email_address),
79      obfuscated_id_(obfuscated_id),
80      index_(index),
81      is_active_(is_active) {}
82
83}  // namespace wallet
84
85}  // namespace autofill
86