#include "content/browser/payments/payment_app_database.h"
#include <map>
#include <utility>
#include "base/base64.h"
#include "base/containers/contains.h"
#include "base/functional/bind.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "content/browser/payments/payment_app.pb.h"
#include "content/browser/payments/payment_app_context_impl.h"
#include "content/browser/service_worker/service_worker_context_wrapper.h"
#include "content/browser/service_worker/service_worker_registration.h"
#include "content/public/browser/browser_thread.h"
#include "third_party/blink/public/common/manifest/manifest.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/gfx/codec/png_codec.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace content {
namespace {
PaymentDelegation;
PaymentHandlerStatus;
PaymentInstrument;
PaymentInstrumentPtr;
const char kPaymentAppPrefix[] = …;
const char kPaymentInstrumentPrefix[] = …;
const char kPaymentInstrumentKeyInfoPrefix[] = …;
std::string CreatePaymentAppKey(const std::string& pattern) { … }
std::string CreatePaymentInstrumentKey(const std::string& instrument_key) { … }
std::string CreatePaymentInstrumentKeyInfoKey(
const std::string& instrument_key) { … }
std::map<uint64_t, std::string> ToStoredPaymentInstrumentKeyInfos(
const std::vector<std::string>& inputs) { … }
PaymentInstrumentPtr ToPaymentInstrumentForMojo(const std::string& input) { … }
SupportedDelegations ToSupportedDelegations(
const content::SupportedDelegationsProto& supported_delegations_proto) { … }
std::unique_ptr<StoredPaymentApp> ToStoredPaymentApp(const std::string& input) { … }
}
PaymentAppDatabase::PaymentAppDatabase(
scoped_refptr<ServiceWorkerContextWrapper> service_worker_context)
: … { … }
PaymentAppDatabase::~PaymentAppDatabase() { … }
void PaymentAppDatabase::ReadAllPaymentApps(
ReadAllPaymentAppsCallback callback) { … }
void PaymentAppDatabase::DeletePaymentInstrument(
const GURL& scope,
const std::string& instrument_key,
DeletePaymentInstrumentCallback callback) { … }
void PaymentAppDatabase::ReadPaymentInstrument(
const GURL& scope,
const std::string& instrument_key,
ReadPaymentInstrumentCallback callback) { … }
void PaymentAppDatabase::KeysOfPaymentInstruments(
const GURL& scope,
KeysOfPaymentInstrumentsCallback callback) { … }
void PaymentAppDatabase::HasPaymentInstrument(
const GURL& scope,
const std::string& instrument_key,
HasPaymentInstrumentCallback callback) { … }
void PaymentAppDatabase::WritePaymentInstrument(
const GURL& scope,
const std::string& instrument_key,
PaymentInstrumentPtr instrument,
WritePaymentInstrumentCallback callback) { … }
void PaymentAppDatabase::DidFetchedPaymentInstrumentIcon(
const GURL& scope,
const std::string& instrument_key,
payments::mojom::PaymentInstrumentPtr instrument,
WritePaymentInstrumentCallback callback,
const std::string& icon) { … }
void PaymentAppDatabase::FetchAndUpdatePaymentAppInfo(
const GURL& context,
const GURL& scope,
FetchAndUpdatePaymentAppInfoCallback callback) { … }
void PaymentAppDatabase::FetchPaymentAppInfoCallback(
const GURL& scope,
FetchAndUpdatePaymentAppInfoCallback callback,
std::unique_ptr<PaymentAppInfoFetcher::PaymentAppInfo> app_info) { … }
void PaymentAppDatabase::DidFindRegistrationToUpdatePaymentAppInfo(
FetchAndUpdatePaymentAppInfoCallback callback,
std::unique_ptr<PaymentAppInfoFetcher::PaymentAppInfo> app_info,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration) { … }
void PaymentAppDatabase::DidGetPaymentAppInfoToUpdatePaymentAppInfo(
FetchAndUpdatePaymentAppInfoCallback callback,
std::unique_ptr<PaymentAppInfoFetcher::PaymentAppInfo> app_info,
scoped_refptr<ServiceWorkerRegistration> registration,
const std::vector<std::string>& data,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidUpdatePaymentApp(
FetchAndUpdatePaymentAppInfoCallback callback,
bool fetch_app_info_failed,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::ClearPaymentInstruments(
const GURL& scope,
ClearPaymentInstrumentsCallback callback) { … }
void PaymentAppDatabase::SetPaymentAppUserHint(const GURL& scope,
const std::string& user_hint) { … }
void PaymentAppDatabase::EnablePaymentAppDelegations(
const GURL& scope,
const std::vector<PaymentDelegation>& delegations,
EnableDelegationsCallback callback) { … }
void PaymentAppDatabase::DidFindRegistrationToEnablePaymentAppDelegations(
const std::vector<PaymentDelegation>& delegations,
EnableDelegationsCallback callback,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration) { … }
void PaymentAppDatabase::DidGetPaymentAppInfoToEnableDelegations(
const std::vector<PaymentDelegation>& delegations,
EnableDelegationsCallback callback,
scoped_refptr<ServiceWorkerRegistration> registration,
const std::vector<std::string>& data,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidEnablePaymentAppDelegations(
EnableDelegationsCallback callback,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidFindRegistrationToSetPaymentAppUserHint(
const std::string& user_hint,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration) { … }
void PaymentAppDatabase::DidGetPaymentAppInfoToSetUserHint(
const std::string& user_hint,
scoped_refptr<ServiceWorkerRegistration> registration,
const std::vector<std::string>& data,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidSetPaymentAppUserHint(
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::SetPaymentAppInfoForRegisteredServiceWorker(
int64_t registration_id,
const std::string& instrument_key,
const std::string& name,
const std::string& icon,
const std::string& method,
const SupportedDelegations& supported_delegations,
SetPaymentAppInfoCallback callback) { … }
void PaymentAppDatabase::DidFindRegistrationToSetPaymentApp(
const std::string& instrument_key,
const std::string& name,
const std::string& icon,
const std::string& method,
const SupportedDelegations& supported_delegations,
SetPaymentAppInfoCallback callback,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration) { … }
void PaymentAppDatabase::DidWritePaymentAppForSetPaymentApp(
const std::string& instrument_key,
const std::string& method,
SetPaymentAppInfoCallback callback,
scoped_refptr<ServiceWorkerRegistration> registration,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidWritePaymentInstrumentForSetPaymentApp(
SetPaymentAppInfoCallback callback,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidReadAllPaymentApps(
ReadAllPaymentAppsCallback callback,
const std::vector<std::pair<int64_t, std::string>>& raw_data,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidReadAllPaymentInstruments(
PaymentApps apps,
ReadAllPaymentAppsCallback callback,
const std::vector<std::pair<int64_t, std::string>>& raw_data,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidFindRegistrationToDeletePaymentInstrument(
const std::string& instrument_key,
DeletePaymentInstrumentCallback callback,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration) { … }
void PaymentAppDatabase::DidFindPaymentInstrument(
int64_t registration_id,
const std::string& instrument_key,
DeletePaymentInstrumentCallback callback,
const std::vector<std::string>& data,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidDeletePaymentInstrument(
DeletePaymentInstrumentCallback callback,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidFindRegistrationToReadPaymentInstrument(
const std::string& instrument_key,
ReadPaymentInstrumentCallback callback,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration) { … }
void PaymentAppDatabase::DidReadPaymentInstrument(
ReadPaymentInstrumentCallback callback,
const std::vector<std::string>& data,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidFindRegistrationToGetKeys(
KeysOfPaymentInstrumentsCallback callback,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration) { … }
void PaymentAppDatabase::DidGetKeysOfPaymentInstruments(
KeysOfPaymentInstrumentsCallback callback,
const std::vector<std::string>& data,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidFindRegistrationToHasPaymentInstrument(
const std::string& instrument_key,
HasPaymentInstrumentCallback callback,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration) { … }
void PaymentAppDatabase::DidHasPaymentInstrument(
DeletePaymentInstrumentCallback callback,
const std::vector<std::string>& data,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidFindRegistrationToWritePaymentInstrument(
const std::string& instrument_key,
PaymentInstrumentPtr instrument,
const std::string& decoded_instrument_icon,
WritePaymentInstrumentCallback callback,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration) { … }
void PaymentAppDatabase::DidWritePaymentInstrument(
WritePaymentInstrumentCallback callback,
blink::ServiceWorkerStatusCode status) { … }
void PaymentAppDatabase::DidFindRegistrationToClearPaymentInstruments(
const GURL& scope,
ClearPaymentInstrumentsCallback callback,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration) { … }
void PaymentAppDatabase::DidGetKeysToClearPaymentInstruments(
scoped_refptr<ServiceWorkerRegistration> registration,
ClearPaymentInstrumentsCallback callback,
const std::vector<std::string>& keys,
PaymentHandlerStatus status) { … }
void PaymentAppDatabase::DidClearPaymentInstruments(
ClearPaymentInstrumentsCallback callback,
blink::ServiceWorkerStatusCode status) { … }
}