blob: 94230da40ed37e5e0dbdcc8c2a2652ce19c54eb3 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_PAYMENTS_CORE_AUTOFILL_CARD_VALIDATION_H_
#define COMPONENTS_PAYMENTS_CORE_AUTOFILL_CARD_VALIDATION_H_
#include <string>
#include <vector>
#include "base/strings/string16.h"
namespace autofill {
class CreditCard;
class AutofillProfile;
} // namespace autofill
namespace payments {
// Used to express the completion status of a credit card. Bit field values are
// identical to CompletionStatus fields in AutofillPaymentInstrument.java.
// Please modify AutofillPaymentInstrument.java after changing these bits since
// missing fields on both Android and Desktop are recorded in the same UMA
// metric: PaymentRequest.MissingPaymentFields.
typedef uint32_t CreditCardCompletionStatus;
static const CreditCardCompletionStatus CREDIT_CARD_COMPLETE = 0;
static const CreditCardCompletionStatus CREDIT_CARD_EXPIRED = 1 << 0;
static const CreditCardCompletionStatus CREDIT_CARD_NO_CARDHOLDER = 1 << 1;
static const CreditCardCompletionStatus CREDIT_CARD_NO_NUMBER = 1 << 2;
static const CreditCardCompletionStatus CREDIT_CARD_NO_BILLING_ADDRESS = 1 << 3;
static const CreditCardCompletionStatus CREDIT_CARD_TYPE_MISMATCH = 1 << 4;
// Returns the credit card's completion status. If equal to
// CREDIT_CARD_COMPLETE, then the card is ready to be used for Payment Request.
CreditCardCompletionStatus GetCompletionStatusForCard(
const autofill::CreditCard& credit_card,
const std::string& app_locale,
const std::vector<autofill::AutofillProfile*> billing_addresses);
// Returns the credit card's completeness score. The score is used for sorting
// available cards before showing them to the user in payment sheet. Different
// fields are weighted according to the effort needed to complete them. The
// weights are set so that the number of missing fields matters most (i.e. cards
// with any three missing fields are scored lower than cards with any two
// missing fields which are in turn scored lower than cards with only one
// missing field). When number of missing fields are equal the order of
// importance is 1-missing card number 2-missing address 3-missing card holder's
// name 4-invalid expiry date. A complete card gets the highest score which is
// 37 and each score represents a unique set of missing/invalid fields (i.e. Two
// cards will tie if and only if they both have identical missing/invalid
// fields).
uint32_t GetCompletenessScore(
const autofill::CreditCard& credit_card,
const std::string& app_locale,
const std::vector<autofill::AutofillProfile*> billing_addresses);
// Return the message to be displayed to the user, indicating what's missing
// to make the credit card complete for payment. If more than one thing is
// missing, the message will be a generic "more information required".
base::string16 GetCompletionMessageForCard(CreditCardCompletionStatus status);
// Returns the title string for a card edit dialog. The title string will
// mention what needs to be added/fixed to make the card valid if it is not
// valid. Otherwise, it will be "Edit card".
base::string16 GetEditDialogTitleForCard(CreditCardCompletionStatus status);
} // namespace payments
#endif // COMPONENTS_PAYMENTS_CORE_AUTOFILL_CARD_VALIDATION_H_