| Index: chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
|
| diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
|
| index 127706e00e66ec3e4b4e5dff3601c6df10de40d0..27a529db7183b32b28b515d3c0c53fff9213b965 100644
|
| --- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
|
| +++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
|
| @@ -29,6 +29,7 @@
|
| #include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/ui/autofill/autofill_dialog_common.h"
|
| +#include "chrome/browser/ui/autofill/autofill_dialog_i18n_input.h"
|
| #include "chrome/browser/ui/autofill/autofill_dialog_view.h"
|
| #include "chrome/browser/ui/autofill/data_model_wrapper.h"
|
| #if !defined(OS_ANDROID)
|
| @@ -603,14 +604,10 @@ void AutofillDialogControllerImpl::Show() {
|
| return;
|
| }
|
|
|
| - common::BuildInputsForSection(SECTION_CC,
|
| - &requested_cc_fields_);
|
| - common::BuildInputsForSection(SECTION_BILLING,
|
| - &requested_billing_fields_);
|
| - common::BuildInputsForSection(SECTION_CC_BILLING,
|
| - &requested_cc_billing_fields_);
|
| - common::BuildInputsForSection(SECTION_SHIPPING,
|
| - &requested_shipping_fields_);
|
| + std::string guess = i18ninput::GuessCountry();
|
| + for (size_t section = SECTION_MIN; section <= SECTION_MAX; ++section) {
|
| + SetCountryCodeForSection(static_cast<DialogSection>(section), guess);
|
| + }
|
|
|
| // Test whether we need to show the shipping section. If filling that section
|
| // would be a no-op, don't show it.
|
| @@ -1093,8 +1090,9 @@ void AutofillDialogControllerImpl::ResetSectionInput(DialogSection section) {
|
| SetEditingExistingData(section, false);
|
|
|
| DetailInputs* inputs = MutableRequestedFieldsForSection(section);
|
| + std::string country_code = GetCountryCodeForSection(section);
|
| for (DetailInputs::iterator it = inputs->begin(); it != inputs->end(); ++it) {
|
| - it->initial_value = common::GetHardcodedValueForType(it->type);
|
| + it->initial_value = common::GetInitialValueForType(it->type, country_code);
|
| }
|
| }
|
|
|
| @@ -1115,7 +1113,7 @@ void AutofillDialogControllerImpl::ShowEditUiIfBadSuggestion(
|
|
|
| DetailInputs* inputs = MutableRequestedFieldsForSection(section);
|
| if (wrapper && IsEditingExistingData(section))
|
| - wrapper->FillInputs(inputs);
|
| + wrapper->FillInputs(inputs, GetCountryCodeForSection(section));
|
| }
|
|
|
| bool AutofillDialogControllerImpl::InputWasEdited(ServerFieldType type,
|
| @@ -1169,7 +1167,7 @@ void AutofillDialogControllerImpl::RestoreUserInputFromSnapshot(
|
| continue;
|
|
|
| DetailInputs* inputs = MutableRequestedFieldsForSection(section);
|
| - wrapper.FillInputs(inputs);
|
| + wrapper.FillInputs(inputs, GetCountryCodeForSection(section));
|
|
|
| for (size_t i = 0; i < inputs->size(); ++i) {
|
| if (InputWasEdited((*inputs)[i].type, (*inputs)[i].initial_value)) {
|
| @@ -1691,6 +1689,7 @@ string16 AutofillDialogControllerImpl::InputValidityMessage(
|
| return base::string16(); // Line 2 is optional - always valid.
|
|
|
| case ADDRESS_HOME_CITY:
|
| + case ADDRESS_HOME_DEPENDENT_LOCALITY:
|
| case ADDRESS_HOME_COUNTRY:
|
| break;
|
|
|
| @@ -1708,6 +1707,9 @@ string16 AutofillDialogControllerImpl::InputValidityMessage(
|
| }
|
| break;
|
|
|
| + case ADDRESS_HOME_SORTING_CODE:
|
| + break;
|
| +
|
| case NAME_FULL:
|
| // Wallet requires a first and last billing name.
|
| if (section == SECTION_CC_BILLING && !value.empty() &&
|
| @@ -1718,6 +1720,9 @@ string16 AutofillDialogControllerImpl::InputValidityMessage(
|
| }
|
| break;
|
|
|
| + case COMPANY_NAME:
|
| + break;
|
| +
|
| case PHONE_HOME_WHOLE_NUMBER: // Used in shipping section.
|
| break;
|
|
|
| @@ -1923,6 +1928,30 @@ void AutofillDialogControllerImpl::UserEditedOrActivatedInput(
|
| popup_ids);
|
| }
|
|
|
| +void AutofillDialogControllerImpl::ComboboxItemSelected(
|
| + ui::ComboboxModel* model,
|
| + DialogSection section,
|
| + int index) {
|
| + if (model != &country_combobox_model_ ||
|
| + country_combobox_model_.IsItemSeparatorAt(index)) {
|
| + return;
|
| + }
|
| +
|
| + std::string country_code =
|
| + country_combobox_model_.countries()[index]->country_code();
|
| + if (country_code == GetCountryCodeForSection(section))
|
| + return;
|
| +
|
| + ScopedViewUpdates updates(view_.get());
|
| + const FieldValueMap snapshot = TakeUserInputSnapshot();
|
| +
|
| + SetCountryCodeForSection(section, country_code);
|
| +
|
| + ResetSectionInput(section);
|
| + RestoreUserInputFromSnapshot(snapshot);
|
| + UpdateSection(section);
|
| +}
|
| +
|
| void AutofillDialogControllerImpl::FocusMoved() {
|
| HidePopup();
|
| }
|
| @@ -2164,7 +2193,8 @@ void AutofillDialogControllerImpl::DidAcceptSuggestion(const string16& value,
|
|
|
| for (size_t i = SECTION_MIN; i <= SECTION_MAX; ++i) {
|
| DialogSection section = static_cast<DialogSection>(i);
|
| - wrapper->FillInputs(MutableRequestedFieldsForSection(section));
|
| + wrapper->FillInputs(MutableRequestedFieldsForSection(section),
|
| + GetCountryCodeForSection(section));
|
| view_->FillSection(section, *input_showing_popup_);
|
| }
|
|
|
| @@ -2763,7 +2793,6 @@ void AutofillDialogControllerImpl::SuggestionsUpdated() {
|
| std::vector<base::string16> labels;
|
| AutofillProfile::CreateDifferentiatingLabels(profiles, &labels);
|
| DCHECK_EQ(labels.size(), profiles.size());
|
| - const std::string app_locale = g_browser_process->GetApplicationLocale();
|
| for (size_t i = 0; i < profiles.size(); ++i) {
|
| const AutofillProfile& profile = *profiles[i];
|
| if (!HasCompleteAndVerifiedData(profile, requested_shipping_fields_) ||
|
| @@ -2849,11 +2878,10 @@ void AutofillDialogControllerImpl::SuggestionsUpdated() {
|
| void AutofillDialogControllerImpl::FillOutputForSectionWithComparator(
|
| DialogSection section,
|
| const InputFieldComparator& compare) {
|
| - const DetailInputs& inputs = RequestedFieldsForSection(section);
|
| -
|
| if (!SectionIsActive(section))
|
| return;
|
|
|
| + const DetailInputs& inputs = RequestedFieldsForSection(section);
|
| scoped_ptr<DataModelWrapper> wrapper = CreateWrapper(section);
|
| if (wrapper) {
|
| // Only fill in data that is associated with this section.
|
| @@ -3000,6 +3028,36 @@ DetailInputs* AutofillDialogControllerImpl::MutableRequestedFieldsForSection(
|
| return const_cast<DetailInputs*>(&RequestedFieldsForSection(section));
|
| }
|
|
|
| +std::string AutofillDialogControllerImpl::GetCountryCodeForSection(
|
| + DialogSection section) const {
|
| + if (section == SECTION_BILLING || section == SECTION_CC_BILLING)
|
| + return billing_country_code_;
|
| + if (section == SECTION_SHIPPING)
|
| + return shipping_country_code_;
|
| + return "US";
|
| +}
|
| +
|
| +void AutofillDialogControllerImpl::SetCountryCodeForSection(
|
| + DialogSection section,
|
| + const std::string& country_code) {
|
| + if (section == SECTION_BILLING || section == SECTION_CC_BILLING)
|
| + billing_country_code_ = country_code;
|
| + else if (section == SECTION_SHIPPING)
|
| + shipping_country_code_ = country_code;
|
| +
|
| + DetailInputs* inputs = MutableRequestedFieldsForSection(section);
|
| + inputs->clear();
|
| +
|
| + common::BuildInputsForSection(section, inputs, country_code);
|
| +
|
| + const std::string& ui_locale = g_browser_process->GetApplicationLocale();
|
| + base::string16 country_name = AutofillCountry(country_code, ui_locale).name();
|
| + for (DetailInputs::iterator it = inputs->begin(); it != inputs->end(); ++it) {
|
| + if (AutofillType(it->type).GetStorableType() == ADDRESS_HOME_COUNTRY)
|
| + it->initial_value = country_name;
|
| + }
|
| +}
|
| +
|
| void AutofillDialogControllerImpl::HidePopup() {
|
| if (popup_controller_.get())
|
| popup_controller_->Hide();
|
|
|