| Index: components/autofill/content/browser/wallet/wallet_address.cc
|
| diff --git a/components/autofill/content/browser/wallet/wallet_address.cc b/components/autofill/content/browser/wallet/wallet_address.cc
|
| index 7a31d421f2618c53123c6743f814cd33e1f7bfe8..ad63c70843b59b655e2b1d9db5a5dbaed1ef8be4 100644
|
| --- a/components/autofill/content/browser/wallet/wallet_address.cc
|
| +++ b/components/autofill/content/browser/wallet/wallet_address.cc
|
| @@ -5,6 +5,7 @@
|
| #include "components/autofill/content/browser/wallet/wallet_address.h"
|
|
|
| #include "base/logging.h"
|
| +#include "base/strings/string_split.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "base/values.h"
|
| @@ -44,19 +45,26 @@ Address* CreateAddressInternal(const base::DictionaryValue& dictionary,
|
| DLOG(ERROR) << "Response from Google Wallet missing postal code number";
|
| return NULL;
|
| }
|
| + // TODO(estade): what about postal_code_number_extension?
|
| +
|
| + base::string16 sorting_code;
|
| + if (!dictionary.GetString("postal_address.sorting_code",
|
| + &sorting_code)) {
|
| + DVLOG(1) << "Response from Google Wallet missing sorting code";
|
| + }
|
|
|
| base::string16 phone_number;
|
| if (!dictionary.GetString("phone_number", &phone_number))
|
| DVLOG(1) << "Response from Google Wallet missing phone number";
|
|
|
| - base::string16 address_line_1;
|
| - base::string16 address_line_2;
|
| + std::vector<base::string16> street_address;
|
| const base::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";
|
| + for (size_t i = 0; i < address_line_list->GetSize(); ++i) {
|
| + base::string16 line;
|
| + address_line_list->GetString(i, &line);
|
| + street_address.push_back(line);
|
| + }
|
| } else {
|
| DVLOG(1) << "Response from Google Wallet missing address lines";
|
| }
|
| @@ -67,6 +75,12 @@ Address* CreateAddressInternal(const base::DictionaryValue& dictionary,
|
| DVLOG(1) << "Response from Google Wallet missing locality name";
|
| }
|
|
|
| + base::string16 dependent_locality_name;
|
| + if (!dictionary.GetString("postal_address.dependent_locality_name",
|
| + &dependent_locality_name)) {
|
| + DVLOG(1) << "Response from Google Wallet missing dependent locality name";
|
| + }
|
| +
|
| base::string16 administrative_area_name;
|
| if (!dictionary.GetString("postal_address.administrative_area_name",
|
| &administrative_area_name)) {
|
| @@ -75,11 +89,12 @@ Address* CreateAddressInternal(const base::DictionaryValue& dictionary,
|
|
|
| Address* address = new Address(country_name_code,
|
| recipient_name,
|
| - address_line_1,
|
| - address_line_2,
|
| + street_address,
|
| locality_name,
|
| + dependent_locality_name,
|
| administrative_area_name,
|
| postal_code_number,
|
| + sorting_code,
|
| phone_number,
|
| object_id);
|
|
|
| @@ -100,33 +115,39 @@ 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)),
|
| + dependent_locality_name_(
|
| + profile.GetRawInfo(ADDRESS_HOME_DEPENDENT_LOCALITY)),
|
| administrative_area_name_(profile.GetRawInfo(ADDRESS_HOME_STATE)),
|
| postal_code_number_(profile.GetRawInfo(ADDRESS_HOME_ZIP)),
|
| + sorting_code_(profile.GetRawInfo(ADDRESS_HOME_SORTING_CODE)),
|
| phone_number_(profile.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)),
|
| is_complete_address_(true) {
|
| + base::SplitString(
|
| + profile.GetRawInfo(ADDRESS_HOME_STREET_ADDRESS), '\n', &street_address_);
|
| +
|
| if (!country_name_code_.empty())
|
| phone_object_ = i18n::PhoneObject(phone_number_, country_name_code_);
|
| }
|
|
|
| Address::Address(const std::string& country_name_code,
|
| const base::string16& recipient_name,
|
| - const base::string16& address_line_1,
|
| - const base::string16& address_line_2,
|
| + const std::vector<base::string16>& street_address,
|
| const base::string16& locality_name,
|
| + const base::string16& dependent_locality_name,
|
| const base::string16& administrative_area_name,
|
| const base::string16& postal_code_number,
|
| + const base::string16& sorting_code,
|
| const base::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),
|
| + street_address_(street_address),
|
| locality_name_(locality_name),
|
| + dependent_locality_name_(dependent_locality_name),
|
| administrative_area_name_(administrative_area_name),
|
| postal_code_number_(postal_code_number),
|
| + sorting_code_(sorting_code),
|
| phone_number_(phone_number),
|
| phone_object_(phone_number, country_name_code),
|
| object_id_(object_id),
|
| @@ -174,18 +195,36 @@ scoped_ptr<Address> Address::CreateDisplayAddress(
|
| return scoped_ptr<Address>();
|
| }
|
|
|
| + base::string16 sorting_code;
|
| + if (!dictionary.GetString("sorting_code", &sorting_code)) {
|
| + DVLOG(1) << "Reponse from Google Wallet missing sorting code";
|
| + }
|
| +
|
| + std::vector<base::string16> street_address;
|
| base::string16 address1;
|
| - if (!dictionary.GetString("address1", &address1))
|
| + if (dictionary.GetString("address1", &address1))
|
| + street_address.push_back(address1);
|
| + else
|
| DVLOG(1) << "Reponse from Google Wallet missing address1";
|
|
|
| base::string16 address2;
|
| - if (!dictionary.GetString("address2", &address2))
|
| - DVLOG(1) << "Reponse from Google Wallet missing address2";
|
| + if (dictionary.GetString("address2", &address2) && !address2.empty()) {
|
| + street_address.resize(2);
|
| + street_address[1] = address2;
|
| + } else {
|
| + DVLOG(1) << "Reponse from Google Wallet missing or empty address2";
|
| + }
|
|
|
| base::string16 city;
|
| if (!dictionary.GetString("city", &city))
|
| DVLOG(1) << "Reponse from Google Wallet missing city";
|
|
|
| + base::string16 dependent_locality_name;
|
| + if (!dictionary.GetString("dependent_locality_name",
|
| + &dependent_locality_name)) {
|
| + DVLOG(1) << "Reponse from Google Wallet missing district";
|
| + }
|
| +
|
| base::string16 state;
|
| if (!dictionary.GetString("state", &state))
|
| DVLOG(1) << "Reponse from Google Wallet missing state";
|
| @@ -201,11 +240,12 @@ scoped_ptr<Address> Address::CreateDisplayAddress(
|
| scoped_ptr<Address> address(
|
| new Address(country_code,
|
| name,
|
| - address1,
|
| - address2,
|
| + street_address,
|
| city,
|
| + dependent_locality_name,
|
| state,
|
| postal_code,
|
| + sorting_code,
|
| phone_number,
|
| std::string()));
|
| address->set_is_complete_address(address_state == kFullAddress);
|
| @@ -228,17 +268,17 @@ scoped_ptr<base::DictionaryValue> Address::ToDictionaryWithoutID() const {
|
| scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
|
|
|
| scoped_ptr<base::ListValue> address_lines(new base::ListValue());
|
| - address_lines->AppendString(address_line_1_);
|
| - if (!address_line_2_.empty())
|
| - address_lines->AppendString(address_line_2_);
|
| + address_lines->AppendStrings(street_address_);
|
| dict->Set("address_line", address_lines.release());
|
|
|
| dict->SetString("country_name_code", country_name_code_);
|
| dict->SetString("recipient_name", recipient_name_);
|
| dict->SetString("locality_name", locality_name_);
|
| + dict->SetString("dependent_locality_name", dependent_locality_name_);
|
| dict->SetString("administrative_area_name",
|
| administrative_area_name_);
|
| dict->SetString("postal_code_number", postal_code_number_);
|
| + dict->SetString("sorting_code", sorting_code_);
|
|
|
| return dict.Pass();
|
| }
|
| @@ -249,14 +289,14 @@ base::string16 Address::DisplayName() const {
|
| return recipient_name();
|
| #else
|
| // TODO(estade): improve this stub implementation + l10n.
|
| - return recipient_name() + base::ASCIIToUTF16(", ") + address_line_1();
|
| + return recipient_name() + base::ASCIIToUTF16(", ") + GetStreetAddressLine(0);
|
| #endif
|
| }
|
|
|
| base::string16 Address::DisplayNameDetail() const {
|
| #if defined(OS_ANDROID)
|
| // TODO(aruslan): improve this stub implementation.
|
| - return address_line_1();
|
| + return GetStreetAddressLine(0);
|
| #else
|
| return base::string16();
|
| #endif
|
| @@ -282,18 +322,14 @@ base::string16 Address::GetInfo(const AutofillType& type,
|
| case NAME_FULL:
|
| return recipient_name();
|
|
|
| - case ADDRESS_HOME_STREET_ADDRESS: {
|
| - base::string16 address = address_line_1();
|
| - if (!address_line_2().empty())
|
| - address += base::ASCIIToUTF16("\n") + address_line_2();
|
| - return address;
|
| - }
|
| + case ADDRESS_HOME_STREET_ADDRESS:
|
| + return JoinString(street_address_, base::ASCIIToUTF16("\n"));
|
|
|
| case ADDRESS_HOME_LINE1:
|
| - return address_line_1();
|
| + return GetStreetAddressLine(0);
|
|
|
| case ADDRESS_HOME_LINE2:
|
| - return address_line_2();
|
| + return GetStreetAddressLine(1);
|
|
|
| case ADDRESS_HOME_CITY:
|
| return locality_name();
|
| @@ -315,13 +351,15 @@ base::string16 Address::GetInfo(const AutofillType& type,
|
| return phone_object_.GetWholeNumber();
|
|
|
| case ADDRESS_HOME_DEPENDENT_LOCALITY:
|
| + return dependent_locality_name_;
|
| +
|
| case ADDRESS_HOME_SORTING_CODE:
|
| + return sorting_code_;
|
| +
|
| case COMPANY_NAME:
|
| - // Fields that some countries request but Wallet doesn't support.
|
| - // TODO(dbeam): can these be supported by Wallet?
|
| + // A field that Wallet doesn't support. TODO(dbeam): can it be supported?
|
| return base::string16();
|
|
|
| - // TODO(estade): implement more.
|
| default:
|
| NOTREACHED();
|
| return base::string16();
|
| @@ -336,15 +374,21 @@ void Address::SetPhoneNumber(const base::string16& phone_number) {
|
| bool Address::EqualsIgnoreID(const Address& other) const {
|
| return country_name_code_ == other.country_name_code_ &&
|
| recipient_name_ == other.recipient_name_ &&
|
| - address_line_1_ == other.address_line_1_ &&
|
| - address_line_2_ == other.address_line_2_ &&
|
| + street_address_ == other.street_address_ &&
|
| locality_name_ == other.locality_name_ &&
|
| + dependent_locality_name_ == other.dependent_locality_name_ &&
|
| administrative_area_name_ == other.administrative_area_name_ &&
|
| postal_code_number_ == other.postal_code_number_ &&
|
| + sorting_code_ == other.sorting_code_ &&
|
| phone_number_ == other.phone_number_ &&
|
| is_complete_address_ == other.is_complete_address_;
|
| }
|
|
|
| +base::string16 Address::GetStreetAddressLine(size_t line) const {
|
| + return street_address_.size() > line ? street_address_[line] :
|
| + base::string16();
|
| +}
|
| +
|
| bool Address::operator==(const Address& other) const {
|
| return object_id_ == other.object_id_ && EqualsIgnoreID(other);
|
| }
|
|
|