Index: components/autofill/core/browser/personal_data_manager.cc |
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc |
index 166fa5265e50c3f73a1e8a10b6d9830bb4169fce..f71abc2fde9b85b087ee4602b65c0594cafad046 100644 |
--- a/components/autofill/core/browser/personal_data_manager.cc |
+++ b/components/autofill/core/browser/personal_data_manager.cc |
@@ -548,27 +548,16 @@ void PersonalDataManager::Refresh() { |
LoadCreditCards(); |
} |
-void PersonalDataManager::GetProfileSuggestions( |
+std::vector<Suggestion> PersonalDataManager::GetProfileSuggestions( |
const AutofillType& type, |
const base::string16& field_contents, |
bool field_is_autofilled, |
const std::vector<ServerFieldType>& other_field_types, |
- const base::Callback<bool(const AutofillProfile&)>& filter, |
- std::vector<base::string16>* values, |
- std::vector<base::string16>* labels, |
- std::vector<base::string16>* icons, |
- std::vector<GUIDPair>* guid_pairs) { |
- values->clear(); |
- labels->clear(); |
- icons->clear(); |
- guid_pairs->clear(); |
- |
- const std::vector<AutofillProfile*>& profiles = GetProfiles(true); |
- std::vector<AutofillProfile*> matched_profiles; |
- for (std::vector<AutofillProfile*>::const_iterator iter = profiles.begin(); |
- iter != profiles.end(); ++iter) { |
- AutofillProfile* profile = *iter; |
+ const base::Callback<bool(const AutofillProfile&)>& filter) { |
+ std::vector<Suggestion> suggestions; |
+ std::vector<AutofillProfile*> matched_profiles; |
+ for (AutofillProfile* profile : GetProfiles(true)) { |
// The value of the stored data for this field type in the |profile|. |
std::vector<base::string16> multi_values; |
AddressField address_field; |
@@ -594,8 +583,9 @@ void PersonalDataManager::GetProfileSuggestions( |
StartsWith(multi_values[i], field_contents, false) && |
(filter.is_null() || filter.Run(*profile))) { |
matched_profiles.push_back(profile); |
- values->push_back(multi_values[i]); |
- guid_pairs->push_back(GUIDPair(profile->guid(), i)); |
+ suggestions.push_back(Suggestion(multi_values[i])); |
+ suggestions.back().backend_id.guid = profile->guid(); |
+ suggestions.back().backend_id.variant = i; |
} |
} else { |
if (multi_values[i].empty()) |
@@ -620,8 +610,9 @@ void PersonalDataManager::GetProfileSuggestions( |
profile_value_lower_case == field_value_lower_case) { |
for (size_t j = 0; j < multi_values.size(); ++j) { |
if (!multi_values[j].empty()) { |
- values->push_back(multi_values[j]); |
- guid_pairs->push_back(GUIDPair(profile->guid(), j)); |
+ suggestions.push_back(Suggestion(multi_values[j])); |
+ suggestions.back().backend_id.guid = profile->guid(); |
+ suggestions.back().backend_id.variant = j; |
} |
} |
@@ -634,35 +625,24 @@ void PersonalDataManager::GetProfileSuggestions( |
} |
if (!field_is_autofilled) { |
+ // Generate labels for the profiles we discovered above. |
+ std::vector<base::string16> labels; |
AutofillProfile::CreateInferredLabels( |
matched_profiles, &other_field_types, |
- type.GetStorableType(), 1, app_locale_, labels); |
- } else { |
- // No sub-labels for previously filled fields. |
- labels->resize(values->size()); |
+ type.GetStorableType(), 1, app_locale_, &labels); |
+ DCHECK_EQ(suggestions.size(), labels.size()); |
+ for (size_t i = 0; i < labels.size(); i++) |
+ suggestions[i].label = labels[i]; |
} |
- // No icons for profile suggestions. |
- icons->resize(values->size()); |
+ return suggestions; |
} |
-void PersonalDataManager::GetCreditCardSuggestions( |
+std::vector<Suggestion> PersonalDataManager::GetCreditCardSuggestions( |
const AutofillType& type, |
- const base::string16& field_contents, |
- std::vector<base::string16>* values, |
- std::vector<base::string16>* labels, |
- std::vector<base::string16>* icons, |
- std::vector<GUIDPair>* guid_pairs) { |
- values->clear(); |
- labels->clear(); |
- icons->clear(); |
- guid_pairs->clear(); |
- |
- const std::vector<CreditCard*>& credit_cards = GetCreditCards(); |
- for (std::vector<CreditCard*>::const_iterator iter = credit_cards.begin(); |
- iter != credit_cards.end(); ++iter) { |
- CreditCard* credit_card = *iter; |
- |
+ const base::string16& field_contents) { |
+ std::vector<Suggestion> suggestions; |
+ for (const CreditCard* credit_card : GetCreditCards()) { |
// The value of the stored data for this field type in the |credit_card|. |
base::string16 creditcard_field_value = |
credit_card->GetInfo(type, app_locale_); |
@@ -671,30 +651,33 @@ void PersonalDataManager::GetCreditCardSuggestions( |
(type.GetStorableType() == CREDIT_CARD_NUMBER && |
base::string16::npos != |
creditcard_field_value.find(field_contents)))) { |
+ // Make a new suggestion. |
+ suggestions.push_back(Suggestion()); |
+ Suggestion* suggestion = &suggestions.back(); |
+ |
// If the value is the card number, the label is the expiration date. |
// Otherwise the label is the card number, or if that is empty the |
// cardholder name. The label should never repeat the value. |
- base::string16 label; |
if (type.GetStorableType() == CREDIT_CARD_NUMBER) { |
creditcard_field_value = credit_card->ObfuscatedNumber(); |
- label = credit_card->GetInfo( |
+ suggestion->label = credit_card->GetInfo( |
AutofillType(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR), app_locale_); |
} else if (credit_card->number().empty()) { |
if (type.GetStorableType() != CREDIT_CARD_NAME) { |
- label = |
+ suggestion->label = |
credit_card->GetInfo(AutofillType(CREDIT_CARD_NAME), app_locale_); |
} |
} else { |
- label = kCreditCardPrefix; |
- label.append(credit_card->LastFourDigits()); |
+ suggestion->label = kCreditCardPrefix; |
+ suggestion->label.append(credit_card->LastFourDigits()); |
} |
- values->push_back(creditcard_field_value); |
- labels->push_back(label); |
- icons->push_back(base::UTF8ToUTF16(credit_card->type())); |
- guid_pairs->push_back(GUIDPair(credit_card->guid(), 0)); |
+ suggestion->value = creditcard_field_value; |
+ suggestion->icon = base::UTF8ToUTF16(credit_card->type()); |
+ suggestion->backend_id.guid = credit_card->guid(); |
} |
} |
+ return suggestions; |
} |
bool PersonalDataManager::IsAutofillEnabled() const { |