| Index: components/autofill/core/browser/autofill_manager.cc
|
| diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc
|
| index 0ccf7d90feb92c60ca7d0ad4e271d7536f116b81..677dfde4b9344280d2787f04a402d989486a43cd 100644
|
| --- a/components/autofill/core/browser/autofill_manager.cc
|
| +++ b/components/autofill/core/browser/autofill_manager.cc
|
| @@ -551,6 +551,33 @@ void AutofillManager::OnQueryFormFieldAutofill(int query_id,
|
| }
|
| }
|
|
|
| +bool AutofillManager::WillFillCreditCardNumber(const FormData& form,
|
| + const FormFieldData& field) {
|
| + FormStructure* form_structure = NULL;
|
| + AutofillField* autofill_field = NULL;
|
| + if (!GetCachedFormAndField(form, field, &form_structure, &autofill_field))
|
| + return false;
|
| +
|
| + if (autofill_field->Type().GetStorableType() == CREDIT_CARD_NUMBER)
|
| + return true;
|
| +
|
| + // If the relevant section is autofilled, we'll only fill |autofill_field|.
|
| + if (SectionIsAutofilled(*form_structure, form, autofill_field->section()))
|
| + return false;
|
| +
|
| + DCHECK_EQ(form_structure->field_count(), form.fields.size());
|
| + for (size_t i = 0; i < form_structure->field_count(); ++i) {
|
| + if (form_structure->field(i)->section() == autofill_field->section() &&
|
| + form_structure->field(i)->Type().GetStorableType() ==
|
| + CREDIT_CARD_NUMBER &&
|
| + form.fields[i].value.empty()) {
|
| + return true;
|
| + }
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| void AutofillManager::FillOrPreviewCreditCardForm(
|
| AutofillDriver::RendererFormDataAction action,
|
| int query_id,
|
| @@ -559,7 +586,8 @@ void AutofillManager::FillOrPreviewCreditCardForm(
|
| const CreditCard& credit_card,
|
| size_t variant) {
|
| if (action == AutofillDriver::FORM_DATA_ACTION_FILL) {
|
| - if (credit_card.record_type() == CreditCard::MASKED_SERVER_CARD) {
|
| + if (credit_card.record_type() == CreditCard::MASKED_SERVER_CARD &&
|
| + WillFillCreditCardNumber(form, field)) {
|
| unmasking_card_ = credit_card;
|
| unmasking_query_id_ = query_id;
|
| unmasking_form_ = form;
|
|
|