| Index: components/payments/core/autofill_payment_instrument.cc
|
| diff --git a/components/payments/core/autofill_payment_instrument.cc b/components/payments/core/autofill_payment_instrument.cc
|
| index 6c307bcfa5360c7daae462ab5f3f6716b3689845..398edb70f90faf1fc894814e61755c95390ae106 100644
|
| --- a/components/payments/core/autofill_payment_instrument.cc
|
| +++ b/components/payments/core/autofill_payment_instrument.cc
|
| @@ -8,6 +8,8 @@
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "base/values.h"
|
| #include "components/autofill/core/browser/autofill_data_util.h"
|
| +#include "components/autofill/core/browser/autofill_type.h"
|
| +#include "components/autofill/core/browser/field_types.h"
|
| #include "components/autofill/core/common/autofill_clock.h"
|
| #include "components/payments/core/basic_card_response.h"
|
| #include "components/payments/core/payment_request_data_util.h"
|
| @@ -15,6 +17,20 @@
|
|
|
| namespace payments {
|
|
|
| +namespace {
|
| +
|
| +// Returns whether |card| has a non-empty number and cardholder name. Server
|
| +// cards will have a non-empty number.
|
| +bool CreditCardHasNumberAndName(const autofill::CreditCard& card,
|
| + const std::string& app_locale) {
|
| + return !card.number().empty() &&
|
| + !card.GetInfo(autofill::AutofillType(autofill::CREDIT_CARD_NAME_FULL),
|
| + app_locale)
|
| + .empty();
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| AutofillPaymentInstrument::AutofillPaymentInstrument(
|
| const std::string& method_name,
|
| const autofill::CreditCard& card,
|
| @@ -28,7 +44,8 @@ AutofillPaymentInstrument::AutofillPaymentInstrument(
|
| card.GetInfo(autofill::AutofillType(autofill::CREDIT_CARD_NAME_FULL),
|
| app_locale),
|
| autofill::data_util::GetPaymentRequestData(card.type())
|
| - .icon_resource_id),
|
| + .icon_resource_id,
|
| + PaymentInstrument::Type::AUTOFILL),
|
| credit_card_(card),
|
| billing_profiles_(billing_profiles),
|
| app_locale_(app_locale),
|
| @@ -50,8 +67,17 @@ void AutofillPaymentInstrument::InvokePaymentApp(
|
| weak_ptr_factory_.GetWeakPtr());
|
| }
|
|
|
| -bool AutofillPaymentInstrument::IsValid() {
|
| - return !credit_card_.IsExpired(autofill::AutofillClock::Now());
|
| +bool AutofillPaymentInstrument::IsCompleteForPayment() {
|
| + // A card is complete for payment if it's not expired, its number is not
|
| + // empty (a server card fills this condition) and there is a cardholder name.
|
| + // TODO(crbug.com/709776): Check for billing address association.
|
| + return !credit_card_.IsExpired(autofill::AutofillClock::Now()) &&
|
| + CreditCardHasNumberAndName(credit_card_, app_locale_);
|
| +}
|
| +
|
| +bool AutofillPaymentInstrument::IsValidForCanMakePayment() {
|
| + // An expired card is still valid for the purposes of canMakePayment.
|
| + return CreditCardHasNumberAndName(credit_card_, app_locale_);
|
| }
|
|
|
| void AutofillPaymentInstrument::OnFullCardRequestSucceeded(
|
|
|