Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2412)

Unified Diff: chrome/browser/ui/webui/options/autofill_options_handler.cc

Issue 243013004: i18n address editing in chrome://settings/autofillEditAddress. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/options/autofill_options_handler.cc
diff --git a/chrome/browser/ui/webui/options/autofill_options_handler.cc b/chrome/browser/ui/webui/options/autofill_options_handler.cc
index 60b5aebbc5e0d2a72c1ea522f960b999b6a5f5af..0f84d86894ee65d28a349a7b1b0e9eb7f8a3d06b 100644
--- a/chrome/browser/ui/webui/options/autofill_options_handler.cc
+++ b/chrome/browser/ui/webui/options/autofill_options_handler.cc
@@ -12,6 +12,7 @@
#include "base/logging.h"
#include "base/strings/string16.h"
#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_split.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "chrome/browser/autofill/personal_data_manager_factory.h"
@@ -28,6 +29,9 @@
#include "content/public/browser/web_ui.h"
#include "grit/component_strings.h"
#include "grit/generated_resources.h"
+#include "grit/libaddressinput_strings.h"
+#include "third_party/libaddressinput/chromium/cpp/include/libaddressinput/address_ui.h"
+#include "third_party/libaddressinput/chromium/cpp/include/libaddressinput/address_ui_component.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/webui/web_ui_util.h"
@@ -52,8 +56,6 @@ void SetCountryData(const PersonalDataManager& manager,
// An ordered list of options to show in the <select>.
scoped_ptr<base::ListValue> country_list(new base::ListValue());
- // A dictionary of postal code and state info, keyed on country code.
- scoped_ptr<base::DictionaryValue> country_data(new base::DictionaryValue());
for (size_t i = 0; i < countries.size(); ++i) {
scoped_ptr<base::DictionaryValue> option_details(
new base::DictionaryValue());
@@ -62,18 +64,75 @@ void SetCountryData(const PersonalDataManager& manager,
"value",
countries[i] ? countries[i]->country_code() : "separator");
country_list->Append(option_details.release());
-
- if (!countries[i])
- continue;
-
- scoped_ptr<base::DictionaryValue> details(new base::DictionaryValue());
- details->SetString("postalCodeLabel", countries[i]->postal_code_label());
- details->SetString("stateLabel", countries[i]->state_label());
- country_data->Set(countries[i]->country_code(), details.release());
-
}
localized_strings->Set("autofillCountrySelectList", country_list.release());
- localized_strings->Set("autofillCountryData", country_data.release());
+}
+
+// Fills |components| with the address UI components that should be used to
+// input an address for |country_code| when UI BCP 47 language code is
+// |ui_language_code|. If |components_language_code| is not NULL, then sets it
+// the BCP 47 language code that should be used to format the address for
+// display.
+void GetAddressComponents(const std::string& country_code,
+ const std::string& ui_language_code,
+ base::ListValue* address_components,
+ std::string* components_language_code) {
+ DCHECK(address_components);
+ std::vector<i18n::addressinput::AddressUiComponent> components =
+ i18n::addressinput::BuildComponents(
+ country_code, ui_language_code, components_language_code);
+ if (components.empty()) {
+ static const char kDefaultCountryCode[] = "US";
+ components = i18n::addressinput::BuildComponents(
+ kDefaultCountryCode, ui_language_code, components_language_code);
+ }
+ DCHECK(!components.empty());
+ static const char kField[] = "field";
+ static const char kLengthHint[] = "length";
+ for (std::vector<i18n::addressinput::AddressUiComponent>::const_iterator it =
+ components.begin();
+ it != components.end(); ++it) {
+ scoped_ptr<base::DictionaryValue> component(new base::DictionaryValue);
+ switch (it->field) {
+ case i18n::addressinput::COUNTRY:
+ component->SetString(kField, "country");
+ break;
+ case i18n::addressinput::ADMIN_AREA:
+ component->SetString(kField, "admin-area");
+ break;
+ case i18n::addressinput::LOCALITY:
+ component->SetString(kField, "locality");
+ break;
+ case i18n::addressinput::DEPENDENT_LOCALITY:
+ component->SetString(kField, "dependent-locality");
+ break;
+ case i18n::addressinput::SORTING_CODE:
+ component->SetString(kField, "sorting-code");
+ break;
+ case i18n::addressinput::POSTAL_CODE:
+ component->SetString(kField, "postal-code");
+ break;
+ case i18n::addressinput::STREET_ADDRESS:
+ component->SetString(kField, "street-address");
+ break;
+ case i18n::addressinput::ORGANIZATION:
+ component->SetString(kField, "organization");
+ break;
+ case i18n::addressinput::RECIPIENT:
+ component->SetString(kField, "recipient");
+ break;
+ }
+ component->SetString("name", l10n_util::GetStringUTF16(it->name_id));
+ switch (it->length_hint) {
+ case i18n::addressinput::AddressUiComponent::HINT_SHORT:
+ component->SetString(kLengthHint, "short");
+ break;
+ case i18n::addressinput::AddressUiComponent::HINT_LONG:
+ component->SetString(kLengthHint, "long");
+ break;
+ }
+ address_components->Append(component.release());
+ }
}
Evan Stade 2014/04/22 00:51:58 vertical whitespace in this function
please use gerrit instead 2014/04/24 20:10:59 Done.
// Get the multi-valued element for |type| and return it in |ListValue| form.
@@ -306,6 +365,10 @@ void AutofillOptionsHandler::RegisterMessages() {
base::Bind(&AutofillOptionsHandler::LoadAddressEditor,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
+ "loadAddressEditorComponents",
+ base::Bind(&AutofillOptionsHandler::LoadAddressEditorComponents,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
"loadCreditCardEditor",
base::Bind(&AutofillOptionsHandler::LoadCreditCardEditor,
base::Unretained(this)));
@@ -338,16 +401,8 @@ void AutofillOptionsHandler::SetAddressOverlayStrings(
l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_MIDDLE_NAME));
localized_strings->SetString("autofillLastNameLabel",
l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_LAST_NAME));
- localized_strings->SetString("autofillCompanyNameLabel",
- l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_COMPANY_NAME));
- localized_strings->SetString("autofillAddrLine1Label",
- l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_ADDRESS_LINE_1));
- localized_strings->SetString("autofillAddrLine2Label",
- l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_ADDRESS_LINE_2));
- localized_strings->SetString("autofillCityLabel",
- l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_CITY));
localized_strings->SetString("autofillCountryLabel",
- l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_COUNTRY));
+ l10n_util::GetStringUTF16(IDS_LIBADDRESSINPUT_I18N_COUNTRY_LABEL));
localized_strings->SetString("autofillPhoneLabel",
l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_PHONE));
localized_strings->SetString("autofillEmailLabel",
@@ -362,6 +417,9 @@ void AutofillOptionsHandler::SetAddressOverlayStrings(
l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_ADD_PHONE));
localized_strings->SetString("autofillAddEmailPlaceholder",
l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_ADD_EMAIL));
+ localized_strings->SetString("addStreetAddressLinePlaceholder",
+ l10n_util::GetStringUTF16(
+ IDS_AUTOFILL_FIELD_LABEL_ADD_STREET_ADDRESS_LINE));
SetCountryData(*personal_data_, localized_strings);
}
@@ -452,14 +510,26 @@ void AutofillOptionsHandler::LoadAddressEditor(const base::ListValue* args) {
address.SetString("guid", profile->guid());
scoped_ptr<base::ListValue> list;
GetNameList(*profile, &list);
- address.Set("fullName", list.release());
- address.SetString("companyName", profile->GetRawInfo(autofill::COMPANY_NAME));
- address.SetString("addrLine1",
- profile->GetRawInfo(autofill::ADDRESS_HOME_LINE1));
- address.SetString("addrLine2",
- profile->GetRawInfo(autofill::ADDRESS_HOME_LINE2));
- address.SetString("city", profile->GetRawInfo(autofill::ADDRESS_HOME_CITY));
- address.SetString("state", profile->GetRawInfo(autofill::ADDRESS_HOME_STATE));
+ address.Set("recipient", list.release());
+ address.SetString(
+ "organization", profile->GetRawInfo(autofill::COMPANY_NAME));
+
+ std::vector<base::string16> street_address;
+ base::SplitString(profile->GetRawInfo(autofill::ADDRESS_HOME_STREET_ADDRESS),
+ '\n', &street_address);
+ scoped_ptr<base::ListValue> street_address_list(new base::ListValue);
+ street_address_list->AppendStrings(street_address);
+ address.Set("streetAddress", street_address_list.release());
+
+ address.SetString(
+ "locality", profile->GetRawInfo(autofill::ADDRESS_HOME_CITY));
+ address.SetString(
+ "adminArea", profile->GetRawInfo(autofill::ADDRESS_HOME_STATE));
+ address.SetString(
+ "dependentLocality",
+ profile->GetRawInfo(autofill::ADDRESS_HOME_DEPENDENT_LOCALITY));
+ address.SetString("sortingCode",
+ profile->GetRawInfo(autofill::ADDRESS_HOME_SORTING_CODE));
address.SetString("postalCode",
profile->GetRawInfo(autofill::ADDRESS_HOME_ZIP));
address.SetString("country",
@@ -468,10 +538,37 @@ void AutofillOptionsHandler::LoadAddressEditor(const base::ListValue* args) {
address.Set("phone", list.release());
GetValueList(*profile, autofill::EMAIL_ADDRESS, &list);
address.Set("email", list.release());
+ address.SetString("languageCode", profile->language_code());
+
+ scoped_ptr<base::ListValue> components(new base::ListValue);
+ GetAddressComponents(
+ UTF16ToUTF8(profile->GetRawInfo(autofill::ADDRESS_HOME_COUNTRY)),
+ profile->language_code(), components.get(), NULL);
+ address.Set("components", components.release());
web_ui()->CallJavascriptFunction("AutofillOptions.editAddress", address);
}
+void AutofillOptionsHandler::LoadAddressEditorComponents(
+ const base::ListValue* args) {
+ std::string country_code;
+ if (!args->GetString(0, &country_code)) {
+ NOTREACHED();
+ return;
+ }
+
+ base::DictionaryValue input;
+ scoped_ptr<base::ListValue> components(new base::ListValue);
+ std::string language_code;
+ GetAddressComponents(country_code, g_browser_process->GetApplicationLocale(),
+ components.get(), &language_code);
+ input.Set("components", components.release());
+ input.SetString("languageCode", language_code);
+
+ web_ui()->CallJavascriptFunction(
+ "AutofillEditAddressOverlay.loadAddressComponents", input);
+}
+
void AutofillOptionsHandler::LoadCreditCardEditor(const base::ListValue* args) {
DCHECK(IsPersonalDataLoaded());
@@ -523,6 +620,7 @@ void AutofillOptionsHandler::SetAddress(const base::ListValue* args) {
AutofillProfile profile(guid, kSettingsOrigin);
std::string country_code;
+ std::string language_code;
base::string16 value;
const base::ListValue* list_value;
if (args->GetList(1, &list_value))
@@ -531,11 +629,18 @@ void AutofillOptionsHandler::SetAddress(const base::ListValue* args) {
if (args->GetString(2, &value))
profile.SetRawInfo(autofill::COMPANY_NAME, value);
- if (args->GetString(3, &value))
- profile.SetRawInfo(autofill::ADDRESS_HOME_LINE1, value);
+ if (args->GetList(3, &list_value)) {
+ std::vector<base::string16> street_address;
+ for (size_t i = 0; i < list_value->GetSize(); ++i) {
+ if (list_value->GetString(i, &value))
+ street_address.push_back(value);
+ }
+ profile.SetRawInfo(autofill::ADDRESS_HOME_STREET_ADDRESS,
+ JoinString(street_address, '\n'));
+ }
if (args->GetString(4, &value))
- profile.SetRawInfo(autofill::ADDRESS_HOME_LINE2, value);
+ profile.SetRawInfo(autofill::ADDRESS_HOME_DEPENDENT_LOCALITY, value);
if (args->GetString(5, &value))
profile.SetRawInfo(autofill::ADDRESS_HOME_CITY, value);
@@ -546,16 +651,22 @@ void AutofillOptionsHandler::SetAddress(const base::ListValue* args) {
if (args->GetString(7, &value))
profile.SetRawInfo(autofill::ADDRESS_HOME_ZIP, value);
- if (args->GetString(8, &country_code))
+ if (args->GetString(8, &value))
+ profile.SetRawInfo(autofill::ADDRESS_HOME_SORTING_CODE, value);
+
+ if (args->GetString(9, &country_code))
profile.SetRawInfo(autofill::ADDRESS_HOME_COUNTRY,
base::ASCIIToUTF16(country_code));
- if (args->GetList(9, &list_value))
+ if (args->GetList(10, &list_value))
SetValueList(list_value, autofill::PHONE_HOME_WHOLE_NUMBER, &profile);
- if (args->GetList(10, &list_value))
+ if (args->GetList(11, &list_value))
SetValueList(list_value, autofill::EMAIL_ADDRESS, &profile);
+ if (args->GetString(12, &language_code))
+ profile.set_language_code(language_code);
+
if (!base::IsValidGUID(profile.guid())) {
profile.set_guid(base::GenerateGUID());
personal_data_->AddProfile(profile);

Powered by Google App Engine
This is Rietveld 408576698