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

Unified Diff: chrome/browser/autofill/autofill_manager.cc

Issue 3067016: AutoFill suggestions for billing and credit card fields should show derived labels. (Closed)
Patch Set: Merge from trunk. Created 10 years, 5 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
« no previous file with comments | « no previous file | chrome/browser/autofill/autofill_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/autofill/autofill_manager.cc
diff --git a/chrome/browser/autofill/autofill_manager.cc b/chrome/browser/autofill/autofill_manager.cc
index 9c40aa9ef26b547f9206dba0b2a4149851a4e352..ba1a46326dca8d7e56b708843bff6a3d7fd496b7 100644
--- a/chrome/browser/autofill/autofill_manager.cc
+++ b/chrome/browser/autofill/autofill_manager.cc
@@ -39,10 +39,21 @@ const int kAutoFillPhoneNumberPrefixCount = 3;
const int kAutoFillPhoneNumberSuffixOffset = 3;
const int kAutoFillPhoneNumberSuffixCount = 4;
-
-const string16::value_type kCreditCardLabelPrefix[] = {'*', 0};
+const string16::value_type kCreditCardPrefix[] = {'*', 0};
const string16::value_type kLabelSeparator[] = {';',' ', '*', 0};
+// Combines the |label| string with the last four digits of the credit card
+// |cc|. If one, the other, or both are empty strings we omit the separator.
+string16 CombineLabelAndCreditCard(const string16& label,
+ const CreditCard* cc) {
+ if (label.empty())
+ return kCreditCardPrefix + cc->LastFourDigits();
+ else if (cc->LastFourDigits().empty())
+ return label;
+ else
+ return label + kLabelSeparator + cc->LastFourDigits();
+}
+
// The name of the generic credit card icon, which maps to the image resource ID
// in webkit/glue:WebKitClientImpl.
// TODO(jhawkins): Move the images to chrome/common and implement the resource
@@ -515,14 +526,17 @@ void AutoFillManager::GetProfileSuggestions(FormStructure* form,
personal_data_->credit_cards().begin();
cc != personal_data_->credit_cards().end(); ++cc) {
expanded_values.push_back((*values)[i]);
- string16 label = (*labels)[i] + kLabelSeparator + (*cc)->LastFourDigits();
+ string16 label = CombineLabelAndCreditCard((*labels)[i], *cc);
expanded_labels.push_back(label);
expanded_ids.push_back(PackIDs((*cc)->unique_id(), profile->unique_id()));
}
}
expanded_labels.swap(*labels);
expanded_values.swap(*values);
+ // No CC, so no icons.
+ icons->resize(values->size());
expanded_ids.swap(*unique_ids);
+ DCHECK_EQ(values->size(), icons->size());
}
void AutoFillManager::GetBillingProfileSuggestions(
@@ -533,10 +547,6 @@ void AutoFillManager::GetBillingProfileSuggestions(
std::vector<string16>* labels,
std::vector<string16>* icons,
std::vector<int>* unique_ids) {
- std::vector<CreditCard*> matching_creditcards;
- std::vector<AutoFillProfile*> matching_profiles;
- std::vector<string16> cc_values;
- std::vector<string16> cc_labels;
// If the form is non-HTTPS, no CC suggestions are provided; however, give the
// user the option of filling the billing address fields with regular address
@@ -547,6 +557,11 @@ void AutoFillManager::GetBillingProfileSuggestions(
return;
}
+ std::vector<CreditCard*> matching_creditcards;
+ std::vector<AutoFillProfile*> matching_profiles;
+
+ // Collect matching pairs of credit cards and related profiles, where profile
+ // field value matches form field value.
for (std::vector<CreditCard*>::const_iterator cc =
personal_data_->credit_cards().begin();
cc != personal_data_->credit_cards().end(); ++cc) {
@@ -573,18 +588,27 @@ void AutoFillManager::GetBillingProfileSuggestions(
if (!billing_profile)
continue;
- for (std::vector<AutoFillProfile*>::const_iterator iter =
- personal_data_->profiles().begin();
- iter != personal_data_->profiles().end(); ++iter) {
- values->push_back(billing_profile->GetFieldText(type));
-
- string16 label = (*iter)->Label() + kLabelSeparator +
- (*cc)->LastFourDigits();
- labels->push_back(label);
- icons->push_back(ASCIIToUTF16(kGenericCC));
- unique_ids->push_back(
- PackIDs((*cc)->unique_id(), (*iter)->unique_id()));
- }
+ matching_creditcards.push_back(*cc);
+ matching_profiles.push_back(billing_profile);
+ }
+
+ std::vector<string16> inferred_labels;
+ AutoFillProfile::CreateInferredLabels(&matching_profiles, &inferred_labels, 0,
+ type.field_type());
+
+ DCHECK_EQ(matching_profiles.size(), matching_creditcards.size());
+ DCHECK_EQ(matching_profiles.size(), inferred_labels.size());
+
+ // Process the matching pairs into suggested |values|, |labels|, and
+ // |unique_ids|.
+ for (size_t i = 0; i < matching_profiles.size(); ++i) {
+ values->push_back(matching_profiles[i]->GetFieldText(type));
+ string16 label = CombineLabelAndCreditCard(inferred_labels[i],
+ matching_creditcards[i]);
+ labels->push_back(label);
+ icons->push_back(ASCIIToUTF16(kGenericCC));
+ unique_ids->push_back(PackIDs(matching_creditcards[i]->unique_id(),
+ matching_profiles[i]->unique_id()));
}
}
@@ -613,21 +637,28 @@ void AutoFillManager::GetCreditCardSuggestions(FormStructure* form,
if (!form->HasNonBillingFields()) {
values->push_back(creditcard_field_value);
- labels->push_back(
- kCreditCardLabelPrefix + credit_card->LastFourDigits());
+ labels->push_back(CombineLabelAndCreditCard(string16(), credit_card));
+ icons->push_back(ASCIIToUTF16(kGenericCC));
unique_ids->push_back(PackIDs(credit_card->unique_id(), 0));
} else {
- for (std::vector<AutoFillProfile*>::const_iterator iter =
- personal_data_->profiles().begin();
- iter != personal_data_->profiles().end(); ++iter) {
+ const std::vector<AutoFillProfile*>& profiles
+ = personal_data_->profiles();
+ std::vector<string16> inferred_labels;
+ AutoFillProfile::CreateInferredLabels(&profiles,
+ &inferred_labels,
+ 0,
+ type.field_type());
+ DCHECK_EQ(profiles.size(), inferred_labels.size());
+
+ for (size_t i = 0; i < profiles.size(); ++i) {
values->push_back(creditcard_field_value);
- string16 label = (*iter)->Label() + kLabelSeparator +
- credit_card->LastFourDigits();
+ string16 label = CombineLabelAndCreditCard(inferred_labels[i],
+ credit_card);
labels->push_back(label);
icons->push_back(ASCIIToUTF16(kGenericCC));
unique_ids->push_back(
- PackIDs(credit_card->unique_id(), (*iter)->unique_id()));
+ PackIDs(credit_card->unique_id(), profiles[i]->unique_id()));
}
}
}
« no previous file with comments | « no previous file | chrome/browser/autofill/autofill_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698