// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "components/autofill/browser/wallet/wallet_address.h" #include "base/logging.h" #include "base/string_util.h" #include "base/utf_string_conversions.h" #include "base/values.h" #include "components/autofill/browser/autofill_country.h" #include "components/autofill/browser/autofill_profile.h" namespace autofill { namespace wallet { namespace { Address* CreateAddressInternal(const base::DictionaryValue& dictionary, const std::string& object_id) { std::string country_name_code; if (!dictionary.GetString("postal_address.country_name_code", &country_name_code)) { DLOG(ERROR) << "Response from Google Wallet missing country name"; return NULL; } string16 recipient_name; if (!dictionary.GetString("postal_address.recipient_name", &recipient_name)) { DLOG(ERROR) << "Response from Google Wallet recipient name"; return NULL; } string16 postal_code_number; if (!dictionary.GetString("postal_address.postal_code_number", &postal_code_number)) { DLOG(ERROR) << "Response from Google Wallet missing postal code number"; return NULL; } string16 phone_number; if (!dictionary.GetString("phone_number", &phone_number)) DVLOG(1) << "Response from Google Wallet missing phone number"; string16 address_line_1; string16 address_line_2; const ListValue* address_line_list; if (dictionary.GetList("postal_address.address_line", &address_line_list)) { if (!address_line_list->GetString(0, &address_line_1)) DVLOG(1) << "Response from Google Wallet missing address line 1"; if (!address_line_list->GetString(1, &address_line_2)) DVLOG(1) << "Response from Google Wallet missing address line 2"; } else { DVLOG(1) << "Response from Google Wallet missing address lines"; } string16 locality_name; if (!dictionary.GetString("postal_address.locality_name", &locality_name)) { DVLOG(1) << "Response from Google Wallet missing locality name"; } string16 administrative_area_name; if (!dictionary.GetString("postal_address.administrative_area_name", &administrative_area_name)) { DVLOG(1) << "Response from Google Wallet missing administrative area name"; } return new Address(country_name_code, recipient_name , address_line_1, address_line_2, locality_name, administrative_area_name, postal_code_number, phone_number, object_id); } } // namespace Address::Address() {} Address::Address(const AutofillProfile& profile) : country_name_code_( UTF16ToASCII(profile.GetRawInfo(ADDRESS_HOME_COUNTRY))), recipient_name_(profile.GetRawInfo(NAME_FULL)), address_line_1_(profile.GetRawInfo(ADDRESS_HOME_LINE1)), address_line_2_(profile.GetRawInfo(ADDRESS_HOME_LINE2)), locality_name_(profile.GetRawInfo(ADDRESS_HOME_CITY)), administrative_area_name_(profile.GetRawInfo(ADDRESS_HOME_STATE)), postal_code_number_(profile.GetRawInfo(ADDRESS_HOME_ZIP)), phone_number_(profile.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)) {} Address::Address(const std::string& country_name_code, const string16& recipient_name, const string16& address_line_1, const string16& address_line_2, const string16& locality_name, const string16& administrative_area_name, const string16& postal_code_number, const string16& phone_number, const std::string& object_id) : country_name_code_(country_name_code), recipient_name_(recipient_name), address_line_1_(address_line_1), address_line_2_(address_line_2), locality_name_(locality_name), administrative_area_name_(administrative_area_name), postal_code_number_(postal_code_number), phone_number_(phone_number), object_id_(object_id) {} Address::~Address() {} // static scoped_ptr
Address::CreateAddressWithID( const base::DictionaryValue& dictionary) { std::string object_id; if (!dictionary.GetString("id", &object_id)) { DLOG(ERROR) << "Response from Google Wallet missing object id"; return scoped_ptr(); } return scoped_ptr(CreateAddressInternal(dictionary, object_id)); } // static scoped_ptr Address::CreateAddress( const base::DictionaryValue& dictionary) { std::string object_id; dictionary.GetString("id", &object_id); return scoped_ptr(CreateAddressInternal(dictionary, object_id)); } // static scoped_ptr Address::CreateDisplayAddress( const base::DictionaryValue& dictionary) { std::string country_code; if (!dictionary.GetString("country_code", &country_code)) { DLOG(ERROR) << "Reponse from Google Wallet missing country code"; return scoped_ptr(); } string16 name; if (!dictionary.GetString("name", &name)) { DLOG(ERROR) << "Reponse from Google Wallet missing name"; return scoped_ptr(); } string16 postal_code; if (!dictionary.GetString("postal_code", &postal_code)) { DLOG(ERROR) << "Reponse from Google Wallet missing postal code"; return scoped_ptr(); } string16 address1; if (!dictionary.GetString("address1", &address1)) DVLOG(1) << "Reponse from Google Wallet missing address1"; string16 address2; if (!dictionary.GetString("address2", &address2)) DVLOG(1) << "Reponse from Google Wallet missing address2"; string16 city; if (!dictionary.GetString("city", &city)) DVLOG(1) << "Reponse from Google Wallet missing city"; string16 state; if (!dictionary.GetString("state", &state)) DVLOG(1) << "Reponse from Google Wallet missing state"; string16 phone_number; if (!dictionary.GetString("phone_number", &phone_number)) DVLOG(1) << "Reponse from Google Wallet missing phone number"; return scoped_ptr(new Address(country_code, name, address1, address2, city, state, postal_code, phone_number, std::string())); } scoped_ptr