| Index: chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java
|
| index 7a73a7eaecabb2c57a5438ba39b7c63c1b1670e7..21f3f6c193709f00b6a668d31c12c65b8ebe3e34 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java
|
| @@ -4,18 +4,23 @@
|
|
|
| package org.chromium.chrome.browser.payments;
|
|
|
| +import android.graphics.drawable.Drawable;
|
| import android.os.Handler;
|
|
|
| import org.chromium.content_public.browser.WebContents;
|
| +import org.chromium.payments.mojom.PaymentDetailsModifier;
|
| import org.chromium.payments.mojom.PaymentItem;
|
| import org.chromium.payments.mojom.PaymentMethodData;
|
|
|
| +import java.util.ArrayList;
|
| import java.util.Collections;
|
| import java.util.HashSet;
|
| import java.util.List;
|
| import java.util.Map;
|
| import java.util.Set;
|
|
|
| +import javax.annotation.Nullable;
|
| +
|
| /**
|
| * This app class represents a service worker based payment app.
|
| *
|
| @@ -24,9 +29,10 @@ import java.util.Set;
|
| *
|
| * @see https://w3c.github.io/webpayments-payment-handler/
|
| */
|
| -public class ServiceWorkerPaymentApp implements PaymentApp {
|
| +public class ServiceWorkerPaymentApp extends PaymentInstrument implements PaymentApp {
|
| private final WebContents mWebContents;
|
| - private final List<PaymentInstrument> mInstruments;
|
| + private final long mRegistrationId;
|
| + private final Drawable mIcon;
|
| private final Set<String> mMethodNames;
|
|
|
| /**
|
| @@ -34,16 +40,22 @@ public class ServiceWorkerPaymentApp implements PaymentApp {
|
| *
|
| * @see https://w3c.github.io/webpayments-payment-handler/#structure-of-a-web-payment-app
|
| *
|
| - * @param webContents The web contents where PaymentRequest was invoked.
|
| - * @param instruments A list of payment instruments supported by the payment app.
|
| + * @param webContents The web contents where PaymentRequest was invoked.
|
| + * @param registrationId The registration id of the corresponding service worker payment app.
|
| + * @param label The label of the payment app.
|
| + * @param icon The drawable icon of the payment app.
|
| + * @param methodNames A set of payment method names supported by the payment app.
|
| */
|
| - public ServiceWorkerPaymentApp(WebContents webContents, List<PaymentInstrument> instruments) {
|
| + public ServiceWorkerPaymentApp(WebContents webContents, long registrationId, String label,
|
| + @Nullable Drawable icon, String[] methodNames) {
|
| + super(Long.toString(registrationId), label, null /* sublabel */, icon);
|
| mWebContents = webContents;
|
| - mInstruments = instruments;
|
| + mRegistrationId = registrationId;
|
| + mIcon = icon;
|
|
|
| mMethodNames = new HashSet<>();
|
| - for (PaymentInstrument instrument : instruments) {
|
| - mMethodNames.addAll(instrument.getInstrumentMethodNames());
|
| + for (int i = 0; i < methodNames.length; i++) {
|
| + mMethodNames.add(methodNames[i]);
|
| }
|
| }
|
|
|
| @@ -54,8 +66,9 @@ public class ServiceWorkerPaymentApp implements PaymentApp {
|
| new Handler().post(new Runnable() {
|
| @Override
|
| public void run() {
|
| - callback.onInstrumentsReady(
|
| - ServiceWorkerPaymentApp.this, Collections.unmodifiableList(mInstruments));
|
| + List<PaymentInstrument> instruments = new ArrayList();
|
| + instruments.add(ServiceWorkerPaymentApp.this);
|
| + callback.onInstrumentsReady(ServiceWorkerPaymentApp.this, instruments);
|
| }
|
| });
|
| }
|
| @@ -67,8 +80,9 @@ public class ServiceWorkerPaymentApp implements PaymentApp {
|
|
|
| @Override
|
| public boolean supportsMethodsAndData(Map<String, PaymentMethodData> methodsAndData) {
|
| - // TODO(tommyt): crbug.com/669876. Implement this for Service Worker Payment Apps.
|
| - return true;
|
| + Set<String> methodNames = new HashSet<>(methodsAndData.keySet());
|
| + methodNames.retainAll(mMethodNames);
|
| + return !methodNames.isEmpty();
|
| }
|
|
|
| @Override
|
| @@ -80,4 +94,22 @@ public class ServiceWorkerPaymentApp implements PaymentApp {
|
| public int getAdditionalAppTextResourceId() {
|
| return 0;
|
| }
|
| +
|
| + @Override
|
| + public Set<String> getInstrumentMethodNames() {
|
| + return getAppMethodNames();
|
| + }
|
| +
|
| + @Override
|
| + public void invokePaymentApp(String id, String merchantName, String origin, String iframeOrigin,
|
| + byte[][] unusedCertificateChain, Map<String, PaymentMethodData> methodData,
|
| + PaymentItem total, List<PaymentItem> displayItems,
|
| + Map<String, PaymentDetailsModifier> modifiers, InstrumentDetailsCallback callback) {
|
| + ServiceWorkerPaymentAppBridge.invokePaymentApp(mWebContents, mRegistrationId, origin,
|
| + iframeOrigin, id, new HashSet<>(methodData.values()), total,
|
| + new HashSet<>(modifiers.values()), callback);
|
| + }
|
| +
|
| + @Override
|
| + public void dismissInstrument() {}
|
| }
|
|
|