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

Unified Diff: chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc

Issue 85863003: Change DetailOutputMap to FieldValueMap (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix tests Created 7 years, 1 month 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/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 e45108deaa66304a38b39a4957aefc5f708c3664..a77fd6e62291f7f0bd520e44f328ab5c5e3583c6 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
@@ -156,11 +156,11 @@ bool DetailInputMatchesShippingField(const DetailInput& input,
}
// Initializes |form_group| from user-entered data.
-void FillFormGroupFromOutputs(const DetailOutputMap& detail_outputs,
+void FillFormGroupFromOutputs(const FieldValueMap& detail_outputs,
FormGroup* form_group) {
- for (DetailOutputMap::const_iterator iter = detail_outputs.begin();
+ for (FieldValueMap::const_iterator iter = detail_outputs.begin();
iter != detail_outputs.end(); ++iter) {
- ServerFieldType type = iter->first->type;
+ ServerFieldType type = iter->first;
if (!iter->second.empty()) {
if (type == ADDRESS_HOME_COUNTRY || type == ADDRESS_BILLING_COUNTRY) {
form_group->SetInfo(AutofillType(type),
@@ -177,38 +177,38 @@ void FillFormGroupFromOutputs(const DetailOutputMap& detail_outputs,
// Get billing info from |output| and put it into |card|, |cvc|, and |profile|.
// These outparams are required because |card|/|profile| accept different types
// of raw info, and CreditCard doesn't save CVCs.
-void GetBillingInfoFromOutputs(const DetailOutputMap& output,
+void GetBillingInfoFromOutputs(const FieldValueMap& output,
CreditCard* card,
- string16* cvc,
+ base::string16* cvc,
AutofillProfile* profile) {
- for (DetailOutputMap::const_iterator it = output.begin();
+ for (FieldValueMap::const_iterator it = output.begin();
it != output.end(); ++it) {
- string16 trimmed;
+ const ServerFieldType type = it->first;
+ base::string16 trimmed;
TrimWhitespace(it->second, TRIM_ALL, &trimmed);
// Special case CVC as CreditCard just swallows it.
- if (it->first->type == CREDIT_CARD_VERIFICATION_CODE) {
+ if (type == CREDIT_CARD_VERIFICATION_CODE) {
if (cvc)
cvc->assign(trimmed);
- } else if (it->first->type == ADDRESS_HOME_COUNTRY ||
- it->first->type == ADDRESS_BILLING_COUNTRY) {
+ } else if (type == ADDRESS_HOME_COUNTRY ||
+ type == ADDRESS_BILLING_COUNTRY) {
if (profile) {
- profile->SetInfo(AutofillType(it->first->type),
+ profile->SetInfo(AutofillType(type),
trimmed,
g_browser_process->GetApplicationLocale());
}
} else {
// Copy the credit card name to |profile| in addition to |card| as
// wallet::Instrument requires a recipient name for its billing address.
- if (card && it->first->type == NAME_FULL)
+ if (card && type == NAME_FULL)
card->SetRawInfo(CREDIT_CARD_NAME, trimmed);
- if (common::IsCreditCardType(it->first->type)) {
+ if (common::IsCreditCardType(type)) {
if (card)
- card->SetRawInfo(it->first->type, trimmed);
+ card->SetRawInfo(type, trimmed);
} else if (profile) {
- profile->SetRawInfo(
- AutofillType(it->first->type).GetStorableType(), trimmed);
+ profile->SetRawInfo(AutofillType(type).GetStorableType(), trimmed);
}
}
}
@@ -231,18 +231,6 @@ ui::BaseWindow* GetBaseWindowForWebContents(
return shell_window->GetBaseWindow();
}
-// Extracts the string value of a field with |type| from |output|. This is
-// useful when you only need the value of 1 input from a section of view inputs.
-string16 GetValueForType(const DetailOutputMap& output,
- ServerFieldType type) {
- for (DetailOutputMap::const_iterator it = output.begin();
- it != output.end(); ++it) {
- if (it->first->type == type)
- return it->second;
- }
- return string16();
-}
-
// Returns a string descriptor for a DialogSection, for use with prefs (do not
// change these values).
std::string SectionToPrefString(DialogSection section) {
@@ -1140,8 +1128,8 @@ bool AutofillDialogControllerImpl::InputWasEdited(ServerFieldType type,
return true;
}
-DetailOutputMap AutofillDialogControllerImpl::TakeUserInputSnapshot() {
- DetailOutputMap snapshot;
+FieldValueMap AutofillDialogControllerImpl::TakeUserInputSnapshot() {
+ FieldValueMap snapshot;
if (!view_)
return snapshot;
@@ -1151,13 +1139,13 @@ DetailOutputMap AutofillDialogControllerImpl::TakeUserInputSnapshot() {
if (model->GetItemKeyForCheckedItem() != kAddNewItemKey)
continue;
- DetailOutputMap outputs;
+ FieldValueMap outputs;
view_->GetUserInput(section, &outputs);
// Remove fields that are empty, at their default values, or invalid.
- for (DetailOutputMap::iterator it = outputs.begin(); it != outputs.end();
+ for (FieldValueMap::iterator it = outputs.begin(); it != outputs.end();
++it) {
- if (InputWasEdited(it->first->type, it->second) &&
- InputValidityMessage(section, it->first->type, it->second).empty()) {
+ if (InputWasEdited(it->first, it->second) &&
+ InputValidityMessage(section, it->first, it->second).empty()) {
snapshot.insert(std::make_pair(it->first, it->second));
}
}
@@ -1167,11 +1155,11 @@ DetailOutputMap AutofillDialogControllerImpl::TakeUserInputSnapshot() {
}
void AutofillDialogControllerImpl::RestoreUserInputFromSnapshot(
- const DetailOutputMap& snapshot) {
+ const FieldValueMap& snapshot) {
if (snapshot.empty())
return;
- DetailOutputWrapper wrapper(snapshot);
+ FieldMapWrapper wrapper(snapshot);
for (size_t i = SECTION_MIN; i <= SECTION_MAX; ++i) {
DialogSection section = static_cast<DialogSection>(i);
if (!SectionIsActive(section))
@@ -1432,7 +1420,7 @@ string16 AutofillDialogControllerImpl::RequiredActionTextForSection(
if (current_instrument)
return current_instrument->TypeAndLastFourDigits();
- DetailOutputMap output;
+ FieldValueMap output;
view_->GetUserInput(section, &output);
CreditCard card;
GetBillingInfoFromOutputs(output, &card, NULL, NULL);
@@ -1615,16 +1603,16 @@ bool AutofillDialogControllerImpl::InputIsEditable(
// aspect of the card.
if (input.type == CREDIT_CARD_VERIFICATION_CODE &&
IsEditingExistingData(section)) {
- DetailOutputMap output;
+ FieldValueMap output;
view_->GetUserInput(section, &output);
WalletInstrumentWrapper wrapper(ActiveInstrument());
- for (DetailOutputMap::iterator iter = output.begin(); iter != output.end();
+ for (FieldValueMap::iterator iter = output.begin(); iter != output.end();
++iter) {
- if (iter->first->type == input.type)
+ if (iter->first == input.type)
continue;
- AutofillType type(iter->first->type);
+ AutofillType type(iter->first);
if (type.group() == CREDIT_CARD &&
iter->second != wrapper.GetInfo(type)) {
return true;
@@ -1746,12 +1734,12 @@ string16 AutofillDialogControllerImpl::InputValidityMessage(
// TODO(groby): Also add tests.
ValidityMessages AutofillDialogControllerImpl::InputsAreValid(
DialogSection section,
- const DetailOutputMap& inputs) {
+ const FieldValueMap& inputs) {
ValidityMessages messages;
std::map<ServerFieldType, string16> field_values;
- for (DetailOutputMap::const_iterator iter = inputs.begin();
+ for (FieldValueMap::const_iterator iter = inputs.begin();
iter != inputs.end(); ++iter) {
- const ServerFieldType type = iter->first->type;
+ const ServerFieldType type = iter->first;
base::string16 text = InputValidityMessage(section, type, iter->second);
@@ -1849,7 +1837,7 @@ ValidityMessages AutofillDialogControllerImpl::InputsAreValid(
void AutofillDialogControllerImpl::UserEditedOrActivatedInput(
DialogSection section,
- const DetailInput* input,
+ ServerFieldType type,
gfx::NativeView parent_view,
const gfx::Rect& content_bounds,
const string16& field_contents,
@@ -1868,8 +1856,8 @@ void AutofillDialogControllerImpl::UserEditedOrActivatedInput(
}
std::vector<string16> popup_values, popup_labels, popup_icons;
- if (common::IsCreditCardType(input->type)) {
- GetManager()->GetCreditCardSuggestions(AutofillType(input->type),
+ if (common::IsCreditCardType(type)) {
+ GetManager()->GetCreditCardSuggestions(AutofillType(type),
field_contents,
&popup_values,
&popup_labels,
@@ -1882,7 +1870,7 @@ void AutofillDialogControllerImpl::UserEditedOrActivatedInput(
iter != inputs.end(); ++iter) {
field_types.push_back(iter->type);
}
- GetManager()->GetProfileSuggestions(AutofillType(input->type),
+ GetManager()->GetProfileSuggestions(AutofillType(type),
field_contents,
false,
field_types,
@@ -1897,6 +1885,19 @@ void AutofillDialogControllerImpl::UserEditedOrActivatedInput(
return;
}
+ // |input_showing_popup_| must be set before calling |Show()|.
+ const DetailInputs& inputs = RequestedFieldsForSection(section);
+ for (DetailInputs::const_iterator iter = inputs.begin();
+ iter != inputs.end(); ++iter) {
+ if (iter->type == type) {
+ input_showing_popup_ = &(*iter);
+ break;
+ }
+ }
+
+ if (!input_showing_popup_)
+ return;
+
// TODO(estade): do we need separators and control rows like 'Clear
// Form'?
std::vector<int> popup_ids;
@@ -1913,10 +1914,6 @@ void AutofillDialogControllerImpl::UserEditedOrActivatedInput(
base::i18n::IsRTL() ?
base::i18n::RIGHT_TO_LEFT : base::i18n::LEFT_TO_RIGHT);
popup_controller_->set_hide_on_outside_click(true);
-
- // |input_showing_popup_| must be set before calling |Show()|.
- input_showing_popup_ = input;
-
popup_controller_->Show(popup_values,
popup_labels,
popup_icons,
@@ -2087,7 +2084,7 @@ bool AutofillDialogControllerImpl::OnAccept() {
if (ActiveInstrument()) {
backing_card_last_four_ = ActiveInstrument()->TypeAndLastFourDigits();
} else {
- DetailOutputMap output;
+ FieldValueMap output;
view_->GetUserInput(SECTION_CC_BILLING, &output);
CreditCard card;
GetBillingInfoFromOutputs(output, &card, NULL, NULL);
@@ -2644,7 +2641,7 @@ void AutofillDialogControllerImpl::DisableWallet(
void AutofillDialogControllerImpl::SuggestionsUpdated() {
ScopedViewUpdates updates(view_.get());
- const DetailOutputMap snapshot = TakeUserInputSnapshot();
+ const FieldValueMap snapshot = TakeUserInputSnapshot();
suggested_cc_.Reset();
suggested_billing_.Reset();
@@ -2860,7 +2857,7 @@ void AutofillDialogControllerImpl::FillOutputForSectionWithComparator(
} else {
// The user manually input data. If using Autofill, save the info as new or
// edited data. Always fill local data into |form_structure_|.
- DetailOutputMap output;
+ FieldValueMap output;
view_->GetUserInput(section, &output);
if (section == SECTION_CC) {
@@ -2885,7 +2882,7 @@ void AutofillDialogControllerImpl::FillOutputForSectionWithComparator(
// Again, CVC needs special-casing. Fill it in directly from |output|.
SetOutputForFieldsOfType(
CREDIT_CARD_VERIFICATION_CODE,
- GetValueForType(output, CREDIT_CARD_VERIFICATION_CODE));
+ output[CREDIT_CARD_VERIFICATION_CODE]);
} else {
AutofillProfile profile;
profile.set_origin(kAutofillDialogOrigin);
@@ -2936,9 +2933,9 @@ string16 AutofillDialogControllerImpl::GetValueFromSection(
if (wrapper)
return wrapper->GetInfo(AutofillType(type));
- DetailOutputMap output;
+ FieldValueMap output;
view_->GetUserInput(section, &output);
- return GetValueForType(output, type);
+ return output[type];
}
SuggestionsMenuModel* AutofillDialogControllerImpl::
@@ -3042,7 +3039,7 @@ bool AutofillDialogControllerImpl::SectionIsValid(
if (!IsManuallyEditingSection(section))
return true;
- DetailOutputMap detail_outputs;
+ FieldValueMap detail_outputs;
view_->GetUserInput(section, &detail_outputs);
return !InputsAreValid(section, detail_outputs).HasSureErrors();
}
@@ -3197,7 +3194,7 @@ scoped_ptr<wallet::Instrument> AutofillDialogControllerImpl::
if (!active_instrument_id_.empty())
return scoped_ptr<wallet::Instrument>();
- DetailOutputMap output;
+ FieldValueMap output;
view_->GetUserInput(SECTION_CC_BILLING, &output);
CreditCard card;
@@ -3212,7 +3209,7 @@ scoped_ptr<wallet::Instrument> AutofillDialogControllerImpl::
scoped_ptr<wallet::Address>AutofillDialogControllerImpl::
CreateTransientAddress() {
// If not using billing for shipping, just scrape the view.
- DetailOutputMap output;
+ FieldValueMap output;
view_->GetUserInput(SECTION_SHIPPING, &output);
AutofillProfile profile;
@@ -3490,7 +3487,7 @@ void AutofillDialogControllerImpl::MaybeShowCreditCardBubble() {
scoped_ptr<AutofillProfile> billing_profile;
if (IsManuallyEditingSection(SECTION_BILLING)) {
// Scrape the view as the user's entering or updating information.
- DetailOutputMap outputs;
+ FieldValueMap outputs;
view_->GetUserInput(SECTION_BILLING, &outputs);
billing_profile.reset(new AutofillProfile);
FillFormGroupFromOutputs(outputs, billing_profile.get());

Powered by Google App Engine
This is Rietveld 408576698