// 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 org.chromium.base.VisibleForTesting; import org.chromium.content_public.browser.WebContents; import java.util.ArrayList; import java.util.List; /** * Builds instances of payment apps. */ public class PaymentAppFactory { /** * Can be used to build additional types of payment apps without Chrome knowing about their * types. */ private static PaymentAppFactoryAddition sAdditionalFactory; /** * The interface for additional payment app factories. */ public interface PaymentAppFactoryAddition { /** * Builds instances of payment apps. */ List<PaymentApp> create(WebContents webContents); } /** * Sets the additional factory that can build instances of payment apps. * * @param additionalFactory Can build instances of payment apps. */ @VisibleForTesting public static void setAdditionalFactory(PaymentAppFactoryAddition additionalFactory) { sAdditionalFactory = additionalFactory; } /** * Builds instances of payment apps. * * @param webContents The web contents where PaymentRequest was invoked. */ public static List<PaymentApp> create(WebContents webContents) { List<PaymentApp> result = new ArrayList<>(2); result.add(new AutofillPaymentApp(webContents)); if (sAdditionalFactory != null) result.addAll(sAdditionalFactory.create(webContents)); return result; } }