wallet_items.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_items.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <limits> 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/autofill/content/browser/wallet/gaia_account.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_type.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/credit_card.h" 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "grit/component_strings.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/webkit_resources.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/image/image.h" 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace autofill { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace wallet { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kLegalDocumentUrl[] = 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "https://wallet.google.com/legaldocument?docId="; 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kPrivacyNoticeUrl[] = "https://wallet.google.com/files/privacy.html"; 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(estade): move to base/. 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template<class T> 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool VectorsAreEqual(const std::vector<T*>& a, const std::vector<T*>& b) { 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (a.size() != b.size()) 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return false; 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < a.size(); ++i) { 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (*a[i] != *b[i]) 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return false; 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WalletItems::MaskedInstrument::Type 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TypeFromString(const std::string& type_string) { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type_string == "VISA") 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::VISA; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type_string == "MASTER_CARD") 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::MASTER_CARD; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type_string == "AMEX") 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::AMEX; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type_string == "DISCOVER") 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::DISCOVER; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type_string == "SOLO") 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::SOLO; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type_string == "MAESTRO") 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::MAESTRO; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type_string == "SWITCH") 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::SWITCH; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::UNKNOWN; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WalletItems::MaskedInstrument::Status 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StatusFromString(const std::string& status_string) { 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (status_string == "AMEX_NOT_SUPPORTED") 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::AMEX_NOT_SUPPORTED; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (status_string == "PENDING") 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::PENDING; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (status_string == "VALID") 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::VALID; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (status_string == "DECLINED") 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::DECLINED; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (status_string == "DISABLED_FOR_THIS_MERCHANT") 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::DISABLED_FOR_THIS_MERCHANT; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (status_string == "UNSUPPORTED_COUNTRY") 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::UNSUPPORTED_COUNTRY; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (status_string == "EXPIRED") 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::EXPIRED; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (status_string == "BILLING_INCOMPLETE") 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::BILLING_INCOMPLETE; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WalletItems::MaskedInstrument::INAPPLICABLE; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)base::string16 DisplayStringFromType(WalletItems::MaskedInstrument::Type type) { 87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) switch (type) { 88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case WalletItems::MaskedInstrument::AMEX: 89d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return CreditCard::TypeForDisplay(kAmericanExpressCard); 90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case WalletItems::MaskedInstrument::DISCOVER: 91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return CreditCard::TypeForDisplay(kDiscoverCard); 92d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case WalletItems::MaskedInstrument::MASTER_CARD: 93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return CreditCard::TypeForDisplay(kMasterCard); 94d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case WalletItems::MaskedInstrument::VISA: 95d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return CreditCard::TypeForDisplay(kVisaCard); 96d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) default: 97d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return CreditCard::TypeForDisplay(kGenericCard); 98d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 99d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 100d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // anonymous namespace 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WalletItems::MaskedInstrument::MaskedInstrument( 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& descriptive_name, 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WalletItems::MaskedInstrument::Type& type, 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<base::string16>& supported_currencies, 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& last_four_digits, 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expiration_month, 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expiration_year, 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address, 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WalletItems::MaskedInstrument::Status& status, 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& object_id) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : descriptive_name_(descriptive_name), 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type_(type), 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) supported_currencies_(supported_currencies), 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_four_digits_(last_four_digits), 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expiration_month_(expiration_month), 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expiration_year_(expiration_year), 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) address_(address.Pass()), 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_(status), 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) object_id_(object_id) { 122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DCHECK(address_); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WalletItems::MaskedInstrument::~MaskedInstrument() {} 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<WalletItems::MaskedInstrument> 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletItems::MaskedInstrument::CreateMaskedInstrument( 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue& dictionary) { 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string type_string; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Type type; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (dictionary.GetString("type", &type_string)) { 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type = TypeFromString(type_string); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DLOG(ERROR) << "Response from Google Wallet missing card type"; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<MaskedInstrument>(); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 last_four_digits; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!dictionary.GetString("last_four_digits", &last_four_digits)) { 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DLOG(ERROR) << "Response from Google Wallet missing last four digits"; 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<MaskedInstrument>(); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string status_string; 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Status status; 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (dictionary.GetString("status", &status_string)) { 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status = StatusFromString(status_string); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DLOG(ERROR) << "Response from Google Wallet missing status"; 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<MaskedInstrument>(); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string object_id; 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!dictionary.GetString("object_id", &object_id)) { 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DLOG(ERROR) << "Response from Google Wallet missing object id"; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<MaskedInstrument>(); 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* address_dict; 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!dictionary.GetDictionary("billing_address", &address_dict)) { 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DLOG(ERROR) << "Response from Google wallet missing address"; 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<MaskedInstrument>(); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address = Address::CreateDisplayAddress(*address_dict); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 167a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!address) { 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DLOG(ERROR) << "Response from Google wallet contained malformed address"; 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<MaskedInstrument>(); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> supported_currencies; 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::ListValue* supported_currency_list; 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (dictionary.GetList("supported_currency", &supported_currency_list)) { 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < supported_currency_list->GetSize(); ++i) { 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 currency; 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (supported_currency_list->GetString(i, ¤cy)) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) supported_currencies.push_back(currency); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << "Response from Google Wallet missing supported currency"; 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expiration_month; 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!dictionary.GetInteger("expiration_month", &expiration_month)) 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << "Response from Google Wallet missing expiration month"; 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expiration_year; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!dictionary.GetInteger("expiration_year", &expiration_year)) 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << "Response from Google Wallet missing expiration year"; 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 descriptive_name; 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!dictionary.GetString("descriptive_name", &descriptive_name)) 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << "Response from Google Wallet missing descriptive name"; 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<MaskedInstrument>(new MaskedInstrument(descriptive_name, 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type, 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) supported_currencies, 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_four_digits, 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expiration_month, 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expiration_year, 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) address.Pass(), 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status, 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) object_id)); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WalletItems::MaskedInstrument::operator==( 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WalletItems::MaskedInstrument& other) const { 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (descriptive_name_ != other.descriptive_name_) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type_ != other.type_) 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (supported_currencies_ != other.supported_currencies_) 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (last_four_digits_ != other.last_four_digits_) 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (expiration_month_ != other.expiration_month_) 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (expiration_year_ != other.expiration_year_) 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (address_) { 222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (other.address_) { 223a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (*address_ != *other.address_) 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 228a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } else if (other.address_) { 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (status_ != other.status_) 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (object_id_ != other.object_id_) 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WalletItems::MaskedInstrument::operator!=( 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WalletItems::MaskedInstrument& other) const { 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return !(*this == other); 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const WalletItems::MaskedInstrument* WalletItems::GetInstrumentById( 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& object_id) const { 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (object_id.empty()) 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return NULL; 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < instruments_.size(); ++i) { 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (instruments_[i]->object_id() == object_id) 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return instruments_[i]; 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return NULL; 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool WalletItems::HasRequiredAction(RequiredAction action) const { 25790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(ActionAppliesToWalletItems(action)); 25890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return std::find(required_actions_.begin(), 25990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) required_actions_.end(), 26090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) action) != required_actions_.end(); 26190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 26290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool WalletItems::SupportsCard(const base::string16& card_number, 2641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::string16* message) const { 2651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string card_type = CreditCard::GetCreditCardType(card_number); 2661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (card_type == kVisaCard || 2681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) card_type == kMasterCard || 2691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) card_type == kDiscoverCard) { 2701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return true; 2711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 2721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (card_type == kAmericanExpressCard) { 2741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (amex_permission_ == AMEX_ALLOWED) 2751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return true; 2761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) *message = l10n_util::GetStringUTF16( 2781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IDS_AUTOFILL_CREDIT_CARD_NOT_SUPPORTED_BY_WALLET_FOR_MERCHANT); 2791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return false; 2801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 2811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) *message = l10n_util::GetStringUTF16( 2831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IDS_AUTOFILL_CREDIT_CARD_NOT_SUPPORTED_BY_WALLET); 2841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return false; 2851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 287a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)std::string WalletItems::ObfuscatedGaiaId() const { 288a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (active_account_index_ >= gaia_accounts_.size()) 289a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return std::string(); 290a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 291a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return gaia_accounts_[active_account_index_]->obfuscated_id(); 292a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 293a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::string16 WalletItems::MaskedInstrument::DisplayName() const { 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(aruslan): improve this stub implementation. 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return descriptive_name(); 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return descriptive_name(); 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::string16 WalletItems::MaskedInstrument::DisplayNameDetail() const { 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(aruslan): improve this stub implementation. 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return address().DisplayName(); 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return base::string16(); 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::string16 WalletItems::MaskedInstrument::TypeAndLastFourDigits() const { 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(dbeam): i18n. 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return DisplayStringFromType(type_) + base::ASCIIToUTF16(" - ") + 315d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) last_four_digits(); 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const gfx::Image& WalletItems::MaskedInstrument::CardIcon() const { 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int idr = 0; 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (type_) { 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case AMEX: 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) idr = IDR_AUTOFILL_CC_AMEX; 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case DISCOVER: 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) idr = IDR_AUTOFILL_CC_DISCOVER; 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case MASTER_CARD: 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) idr = IDR_AUTOFILL_CC_MASTERCARD; 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case VISA: 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) idr = IDR_AUTOFILL_CC_VISA; 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 337eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case SOLO: 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case MAESTRO: 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case SWITCH: 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case UNKNOWN: 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) idr = IDR_AUTOFILL_CC_GENERIC; 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ResourceBundle::GetSharedInstance().GetImageNamed(idr); 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::string16 WalletItems::MaskedInstrument::GetInfo( 3493240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch const AutofillType& type, 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& app_locale) const { 3513240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (type.group() != CREDIT_CARD) 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return address().GetInfo(type, app_locale); 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 354bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch switch (type.GetStorableType()) { 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case CREDIT_CARD_NAME: 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return address().recipient_name(); 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case CREDIT_CARD_NUMBER: 35990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return DisplayName(); 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case CREDIT_CARD_EXP_4_DIGIT_YEAR: 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::IntToString16(expiration_year()); 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case CREDIT_CARD_VERIFICATION_CODE: 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 367d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case CREDIT_CARD_TYPE: 368d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return DisplayStringFromType(type_); 369d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return base::string16(); 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WalletItems::LegalDocument::~LegalDocument() {} 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<WalletItems::LegalDocument> 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletItems::LegalDocument::CreateLegalDocument( 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue& dictionary) { 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string id; 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!dictionary.GetString("legal_document_id", &id)) { 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DLOG(ERROR) << "Response from Google Wallet missing legal document id"; 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<LegalDocument>(); 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 display_name; 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!dictionary.GetString("display_name", &display_name)) { 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DLOG(ERROR) << "Response from Google Wallet missing display name"; 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<LegalDocument>(); 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return scoped_ptr<LegalDocument>(new LegalDocument(id, display_name)); 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)scoped_ptr<WalletItems::LegalDocument> 398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WalletItems::LegalDocument::CreatePrivacyPolicyDocument() { 399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return scoped_ptr<LegalDocument>(new LegalDocument( 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL(kPrivacyNoticeUrl), 401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_PRIVACY_POLICY_LINK))); 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WalletItems::LegalDocument::operator==(const LegalDocument& other) const { 405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return id_ == other.id_ && 406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_ == other.url_ && 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) display_name_ == other.display_name_; 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WalletItems::LegalDocument::operator!=(const LegalDocument& other) const { 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return !(*this == other); 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WalletItems::LegalDocument::LegalDocument(const std::string& id, 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& display_name) 416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : id_(id), 417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_(kLegalDocumentUrl + id), 418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_name_(display_name) {} 419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WalletItems::LegalDocument::LegalDocument(const GURL& url, 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& display_name) 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : url_(url), 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_name_(display_name) {} 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WalletItems::WalletItems(const std::vector<RequiredAction>& required_actions, 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& google_transaction_id, 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& default_instrument_id, 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& default_address_id, 429a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AmexPermission amex_permission) 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : required_actions_(required_actions), 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) google_transaction_id_(google_transaction_id), 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_instrument_id_(default_instrument_id), 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_address_id_(default_address_id), 434a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) active_account_index_(std::numeric_limits<size_t>::max()), 435a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) amex_permission_(amex_permission) {} 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WalletItems::~WalletItems() {} 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<WalletItems> 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletItems::CreateWalletItems(const base::DictionaryValue& dictionary) { 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<RequiredAction> required_action; 4425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::ListValue* required_action_list; 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (dictionary.GetList("required_action", &required_action_list)) { 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < required_action_list->GetSize(); ++i) { 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string action_string; 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (required_action_list->GetString(i, &action_string)) { 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RequiredAction action = ParseRequiredActionFromString(action_string); 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ActionAppliesToWalletItems(action)) { 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DLOG(ERROR) << "Response from Google wallet with bad required action:" 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"" << action_string << "\""; 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<WalletItems>(); 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_action.push_back(action); 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << "Response from Google wallet missing required actions"; 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string google_transaction_id; 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!dictionary.GetString("google_transaction_id", &google_transaction_id) && 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_action.empty()) { 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DLOG(ERROR) << "Response from Google wallet missing google transaction id"; 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<WalletItems>(); 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string default_instrument_id; 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!dictionary.GetString("default_instrument_id", &default_instrument_id)) 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << "Response from Google wallet missing default instrument id"; 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string default_address_id; 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!dictionary.GetString("default_address_id", &default_address_id)) 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << "Response from Google wallet missing default_address_id"; 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 475a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // obfuscated_gaia_id is deprecated. 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 47768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool amex_disallowed = true; 47868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!dictionary.GetBoolean("amex_disallowed", &amex_disallowed)) 47968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DVLOG(1) << "Response from Google wallet missing the amex_disallowed field"; 48068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AmexPermission amex_permission = 48168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) amex_disallowed ? AMEX_DISALLOWED : AMEX_ALLOWED; 48268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 483a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<WalletItems> wallet_items(new WalletItems(required_action, 484a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) google_transaction_id, 485a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) default_instrument_id, 486a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) default_address_id, 487a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) amex_permission)); 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::vector<std::string> gaia_accounts; 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::ListValue* gaia_profiles; 490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (dictionary.GetList("gaia_profile", &gaia_profiles)) { 491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t i = 0; i < gaia_profiles->GetSize(); ++i) { 492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::DictionaryValue* account_dict; 493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string email; 494a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!gaia_profiles->GetDictionary(i, &account_dict)) 495a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) continue; 496a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 497a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<GaiaAccount> gaia_account( 498a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GaiaAccount::Create(*account_dict)); 499a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (gaia_account) 500a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) wallet_items->AddAccount(gaia_account.Pass()); 501f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 502f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 503a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DVLOG(1) << "Response from Google wallet missing GAIA accounts"; 504f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 505f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::ListValue* legal_docs; 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (dictionary.GetList("required_legal_document", &legal_docs)) { 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < legal_docs->GetSize(); ++i) { 5095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* legal_doc_dict; 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (legal_docs->GetDictionary(i, &legal_doc_dict)) { 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<LegalDocument> legal_doc( 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LegalDocument::CreateLegalDocument(*legal_doc_dict)); 513a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (legal_doc) 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_items->AddLegalDocument(legal_doc.Pass()); 515a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) else 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<WalletItems>(); 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!legal_docs->empty()) { 521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Always append the privacy policy link as well. 522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wallet_items->AddLegalDocument( 523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LegalDocument::CreatePrivacyPolicyDocument()); 524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << "Response from Google wallet missing legal docs"; 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::ListValue* instruments; 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (dictionary.GetList("instrument", &instruments)) { 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < instruments->GetSize(); ++i) { 5325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* instrument_dict; 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (instruments->GetDictionary(i, &instrument_dict)) { 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<MaskedInstrument> instrument( 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MaskedInstrument::CreateMaskedInstrument(*instrument_dict)); 536a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (instrument) 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_items->AddInstrument(instrument.Pass()); 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << "Response from Google wallet missing instruments"; 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::ListValue* addresses; 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (dictionary.GetList("address", &addresses)) { 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < addresses->GetSize(); ++i) { 5475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* address_dict; 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (addresses->GetDictionary(i, &address_dict)) { 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address( 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Address::CreateAddressWithID(*address_dict)); 551a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (address) 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wallet_items->AddAddress(address.Pass()); 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << "Response from Google wallet missing addresses"; 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return wallet_items.Pass(); 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void WalletItems::AddAccount(scoped_ptr<GaiaAccount> account) { 563a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (account->index() != gaia_accounts_.size()) { 564a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DVLOG(1) << "Tried to add account out of order"; 565a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return; 566a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 567a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 568a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (account->is_active()) 569a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) active_account_index_ = account->index(); 570a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 571a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gaia_accounts_.push_back(account.release()); 572a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 573a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WalletItems::operator==(const WalletItems& other) const { 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return google_transaction_id_ == other.google_transaction_id_ && 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_instrument_id_ == other.default_instrument_id_ && 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_address_id_ == other.default_address_id_ && 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) required_actions_ == other.required_actions_ && 579a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // This check is technically redundant, but is useful for tests. 580a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ObfuscatedGaiaId() == other.ObfuscatedGaiaId() && 581f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) active_account_index() == other.active_account_index() && 582a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VectorsAreEqual<GaiaAccount>(gaia_accounts(), 583a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) other.gaia_accounts()) && 584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VectorsAreEqual<MaskedInstrument>(instruments(), 585f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) other.instruments()) && 586c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VectorsAreEqual<Address>(addresses(), other.addresses()) && 587c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VectorsAreEqual<LegalDocument>(legal_documents(), 588a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) other.legal_documents()); 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WalletItems::operator!=(const WalletItems& other) const { 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return !(*this == other); 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace wallet 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace autofill 597