| // Copyright 2016 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. |
| |
| package org.chromium.chrome.browser.payments; |
| |
| import android.os.Handler; |
| import android.text.TextUtils; |
| |
| import org.chromium.chrome.browser.autofill.PersonalDataManager; |
| import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile; |
| import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard; |
| import org.chromium.content_public.browser.WebContents; |
| |
| import org.json.JSONObject; |
| |
| import java.util.ArrayList; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Set; |
| |
| /** |
| * Provides access to locally stored user credit cards. |
| */ |
| public class AutofillPaymentApp implements PaymentApp { |
| private final WebContents mWebContents; |
| |
| /** |
| * Builds a payment app backed by autofill cards. |
| * |
| * @param webContents The web contents where PaymentRequest was invoked. |
| */ |
| public AutofillPaymentApp(WebContents webContents) { |
| mWebContents = webContents; |
| } |
| |
| @Override |
| public void getInstruments(JSONObject unusedDetails, final InstrumentsCallback callback) { |
| PersonalDataManager pdm = PersonalDataManager.getInstance(); |
| List<CreditCard> cards = pdm.getCreditCardsToSuggest(); |
| final List<PaymentInstrument> instruments = new ArrayList<>(cards.size()); |
| |
| for (int i = 0; i < cards.size(); i++) { |
| CreditCard card = cards.get(i); |
| AutofillProfile billingAddress = TextUtils.isEmpty(card.getBillingAddressId()) |
| ? null : pdm.getProfile(card.getBillingAddressId()); |
| instruments.add(new AutofillPaymentInstrument(mWebContents, card, billingAddress)); |
| } |
| |
| new Handler().post(new Runnable() { |
| @Override |
| public void run() { |
| callback.onInstrumentsReady(AutofillPaymentApp.this, instruments); |
| } |
| }); |
| } |
| |
| @Override |
| public Set<String> getSupportedMethodNames() { |
| // https://w3c.github.io/webpayments-methods-card/#method-id |
| // The spec also includes more detailed card types, e.g., "visa/credit" and "visa/debit". |
| // Autofill does not distinguish between these types of cards, so they are not in the list |
| // of supported method names. |
| Set<String> methods = new HashSet<>(); |
| |
| methods.add("visa"); |
| methods.add("mastercard"); |
| methods.add("amex"); |
| methods.add("discover"); |
| methods.add("diners"); |
| methods.add("jcb"); |
| methods.add("unionpay"); |
| |
| // The spec does not include "generic" card types. That's the type of card for which |
| // Chrome cannot determine the type. |
| methods.add("generic"); |
| |
| return methods; |
| } |
| |
| @Override |
| public String getIdentifier() { |
| return "Chrome_Autofill_Payment_App"; |
| } |
| } |