blob: cdc90c0eba89e7eef0d12d6cc8517cd59f2639d9 [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.
#include "components/payments/content/payment_app_service.h"
#include "base/feature_list.h"
#include "components/payments/content/android_app_communication.h"
#include "components/payments/content/android_payment_app_factory.h"
#include "components/payments/content/autofill_payment_app_factory.h"
#include "components/payments/content/payment_app.h"
#include "components/payments/content/secure_payment_confirmation_app_factory.h"
#include "components/payments/content/service_worker_payment_app_factory.h"
#include "components/payments/core/features.h"
#include "components/payments/core/payments_experimental_features.h"
#include "content/public/common/content_features.h"
namespace payments {
PaymentAppService::PaymentAppService(content::BrowserContext* context) {
if (base::FeatureList::IsEnabled(::features::kPaymentRequestBasicCard)) {
factories_.emplace_back(std::make_unique<AutofillPaymentAppFactory>());
}
if (base::FeatureList::IsEnabled(::features::kServiceWorkerPaymentApps)) {
factories_.push_back(std::make_unique<ServiceWorkerPaymentAppFactory>());
}
// TODO(https://crbug.com/1022512): Review the feature flag name when
// AndroidPaymentAppFactory works on Android OS with generic 3rd party payment
// apps. (Currently it works only on Chrome OS with app store billing payment
// methods.)
if (PaymentsExperimentalFeatures::IsEnabled(features::kAppStoreBilling)) {
factories_.push_back(std::make_unique<AndroidPaymentAppFactory>(
AndroidAppCommunication::GetForBrowserContext(context)));
}
// SecurePaymentConfirmation is enabled if both the feature flag and the Blink
// runtime feature "SecurePaymentConfirmation" are enabled.
if (base::FeatureList::IsEnabled(::features::kSecurePaymentConfirmation)) {
factories_.push_back(
std::make_unique<SecurePaymentConfirmationAppFactory>());
}
}
PaymentAppService::~PaymentAppService() = default;
size_t PaymentAppService::GetNumberOfFactories() const {
return factories_.size();
}
void PaymentAppService::Create(
base::WeakPtr<PaymentAppFactory::Delegate> delegate) {
for (const auto& factory : factories_) {
factory->Create(delegate);
}
}
void PaymentAppService::Shutdown() {
factories_.clear();
}
} // namespace payments