| Index: chrome/browser/autofill/autofill_manager.cc
|
| diff --git a/chrome/browser/autofill/autofill_manager.cc b/chrome/browser/autofill/autofill_manager.cc
|
| index d3f6c61e90e253260e3bf15251c852934e1cbe20..9c40aa9ef26b547f9206dba0b2a4149851a4e352 100644
|
| --- a/chrome/browser/autofill/autofill_manager.cc
|
| +++ b/chrome/browser/autofill/autofill_manager.cc
|
| @@ -39,9 +39,16 @@ const int kAutoFillPhoneNumberPrefixCount = 3;
|
| const int kAutoFillPhoneNumberSuffixOffset = 3;
|
| const int kAutoFillPhoneNumberSuffixCount = 4;
|
|
|
| +
|
| const string16::value_type kCreditCardLabelPrefix[] = {'*', 0};
|
| const string16::value_type kLabelSeparator[] = {';',' ', '*', 0};
|
|
|
| +// 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
|
| +// handling in RendererWebKitClientImpl.
|
| +const char kGenericCC[] = "genericCC";
|
| +
|
| // Removes duplicate elements whilst preserving original order of |elements| and
|
| // |unique_ids|.
|
| void RemoveDuplicateElements(
|
| @@ -199,6 +206,7 @@ bool AutoFillManager::GetAutoFillSuggestions(int query_id,
|
|
|
| std::vector<string16> values;
|
| std::vector<string16> labels;
|
| + std::vector<string16> icons;
|
| std::vector<int> unique_ids;
|
| AutoFillType type(autofill_field->type());
|
|
|
| @@ -207,15 +215,17 @@ bool AutoFillManager::GetAutoFillSuggestions(int query_id,
|
| bool handle_billing = FormIsHTTPS(form);
|
|
|
| if (type.group() == AutoFillType::CREDIT_CARD)
|
| - GetCreditCardSuggestions(form, field, type, &values, &labels, &unique_ids);
|
| + GetCreditCardSuggestions(
|
| + form, field, type, &values, &labels, &icons, &unique_ids);
|
| else if (type.group() == AutoFillType::ADDRESS_BILLING)
|
| GetBillingProfileSuggestions(
|
| - form, field, type, &values, &labels, &unique_ids);
|
| + form, field, type, &values, &labels, &icons, &unique_ids);
|
| else
|
| - GetProfileSuggestions(
|
| - form, field, type, handle_billing, &values, &labels, &unique_ids);
|
| + GetProfileSuggestions(form, field, type, handle_billing,
|
| + &values, &labels, &icons, &unique_ids);
|
|
|
| DCHECK_EQ(values.size(), labels.size());
|
| + DCHECK_EQ(values.size(), icons.size());
|
| DCHECK_EQ(values.size(), unique_ids.size());
|
|
|
| // No suggestions.
|
| @@ -229,12 +239,16 @@ bool AutoFillManager::GetAutoFillSuggestions(int query_id,
|
| if (form_autofilled) {
|
| RemoveDuplicateElements(&values, &unique_ids);
|
| labels.resize(values.size());
|
| + icons.resize(values.size());
|
|
|
| - for (size_t i = 0; i < labels.size(); ++i)
|
| + for (size_t i = 0; i < labels.size(); ++i) {
|
| labels[i] = string16();
|
| + icons[i] = string16();
|
| + }
|
| }
|
|
|
| - host->AutoFillSuggestionsReturned(query_id, values, labels, unique_ids);
|
| + host->AutoFillSuggestionsReturned(
|
| + query_id, values, labels, icons, unique_ids);
|
| return true;
|
| }
|
|
|
| @@ -461,6 +475,7 @@ void AutoFillManager::GetProfileSuggestions(FormStructure* form,
|
| bool include_cc_labels,
|
| std::vector<string16>* values,
|
| std::vector<string16>* labels,
|
| + std::vector<string16>* icons,
|
| std::vector<int>* unique_ids) {
|
| const std::vector<AutoFillProfile*>& profiles = personal_data_->profiles();
|
| std::vector<AutoFillProfile*> matched_profiles;
|
| @@ -479,6 +494,9 @@ void AutoFillManager::GetProfileSuggestions(FormStructure* form,
|
| }
|
| }
|
|
|
| + // No CC, so no icons.
|
| + icons->resize(values->size());
|
| +
|
| AutoFillProfile::CreateInferredLabels(&matched_profiles, labels, 0,
|
| type.field_type());
|
|
|
| @@ -513,6 +531,7 @@ void AutoFillManager::GetBillingProfileSuggestions(
|
| AutoFillType type,
|
| std::vector<string16>* values,
|
| std::vector<string16>* labels,
|
| + std::vector<string16>* icons,
|
| std::vector<int>* unique_ids) {
|
| std::vector<CreditCard*> matching_creditcards;
|
| std::vector<AutoFillProfile*> matching_profiles;
|
| @@ -523,7 +542,8 @@ void AutoFillManager::GetBillingProfileSuggestions(
|
| // user the option of filling the billing address fields with regular address
|
| // data.
|
| if (!FormIsHTTPS(form)) {
|
| - GetProfileSuggestions(form, field, type, false, values, labels, unique_ids);
|
| + GetProfileSuggestions(
|
| + form, field, type, false, values, icons, labels, unique_ids);
|
| return;
|
| }
|
|
|
| @@ -561,6 +581,7 @@ void AutoFillManager::GetBillingProfileSuggestions(
|
| 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()));
|
| }
|
| @@ -572,6 +593,7 @@ void AutoFillManager::GetCreditCardSuggestions(FormStructure* form,
|
| AutoFillType type,
|
| std::vector<string16>* values,
|
| std::vector<string16>* labels,
|
| + std::vector<string16>* icons,
|
| std::vector<int>* unique_ids) {
|
| // Don't return CC suggestions for non-HTTPS pages.
|
| if (!FormIsHTTPS(form))
|
| @@ -603,6 +625,7 @@ void AutoFillManager::GetCreditCardSuggestions(FormStructure* form,
|
| string16 label = (*iter)->Label() + kLabelSeparator +
|
| credit_card->LastFourDigits();
|
| labels->push_back(label);
|
| + icons->push_back(ASCIIToUTF16(kGenericCC));
|
| unique_ids->push_back(
|
| PackIDs(credit_card->unique_id(), (*iter)->unique_id()));
|
| }
|
|
|