blob: d176f5671bb2e4320301c1c2f617be6d8d59560b [file] [log] [blame]
Avi Drissman4e1b7bc32022-09-15 14:03:501// Copyright 2016 The Chromium Authors
jinho.bangab430572016-12-16 14:33:582// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_BROWSER_PAYMENTS_PAYMENT_APP_DATABASE_H_
6#define CONTENT_BROWSER_PAYMENTS_PAYMENT_APP_DATABASE_H_
7
jinho.bang5f5a9b492017-05-13 07:55:138#include <memory>
jinho.bangab430572016-12-16 14:33:589#include <string>
10#include <vector>
11
jinho.bangab430572016-12-16 14:33:5812#include "base/memory/weak_ptr.h"
gogerald70b9dcb2017-07-05 05:28:4913#include "content/browser/payments/payment_app_info_fetcher.h"
gogeraldd8c5af342017-06-14 02:22:3614#include "content/browser/payments/payment_instrument_icon_fetcher.h"
jinho.bangab430572016-12-16 14:33:5815#include "content/browser/service_worker/service_worker_context_wrapper.h"
16#include "content/browser/service_worker/service_worker_registration.h"
gogerald70b9dcb2017-07-05 05:28:4917#include "content/public/browser/stored_payment_app.h"
Han Leon90aedd862018-06-27 02:13:0618#include "third_party/blink/public/common/service_worker/service_worker_status_code.h"
Han Leonabbe7c902018-08-30 02:08:1019#include "third_party/blink/public/mojom/payments/payment_app.mojom.h"
jinho.bangab430572016-12-16 14:33:5820
21namespace content {
22
23class ServiceWorkerRegistration;
24
Lei Zhanged9be3a2021-11-17 22:01:1825class PaymentAppDatabase {
jinho.bangab430572016-12-16 14:33:5826 public:
gogerald29b88092017-08-03 15:22:1927 using PaymentApps = std::map<int64_t, std::unique_ptr<StoredPaymentApp>>;
jinho.bang5f5a9b492017-05-13 07:55:1328 using ReadAllPaymentAppsCallback = base::OnceCallback<void(PaymentApps)>;
29
jinho.bangbd27d5f2017-04-26 12:09:3430 using DeletePaymentInstrumentCallback =
31 base::OnceCallback<void(payments::mojom::PaymentHandlerStatus)>;
jinho.bang0e7bbf12017-04-17 17:03:0332 using ReadPaymentInstrumentCallback =
33 base::OnceCallback<void(payments::mojom::PaymentInstrumentPtr,
34 payments::mojom::PaymentHandlerStatus)>;
jinho.bangf7742a22017-05-04 01:31:5935 using KeysOfPaymentInstrumentsCallback =
36 base::OnceCallback<void(const std::vector<std::string>&,
37 payments::mojom::PaymentHandlerStatus)>;
jinho.bang8f5656542017-04-27 16:15:2038 using HasPaymentInstrumentCallback =
39 base::OnceCallback<void(payments::mojom::PaymentHandlerStatus)>;
jinho.bang0e7bbf12017-04-17 17:03:0340 using WritePaymentInstrumentCallback =
41 base::OnceCallback<void(payments::mojom::PaymentHandlerStatus)>;
gogerald3ce93992018-04-02 21:28:5342 using FetchAndUpdatePaymentAppInfoCallback =
gogerald70b9dcb2017-07-05 05:28:4943 base::OnceCallback<void(payments::mojom::PaymentHandlerStatus)>;
jinho.bangaf28f772017-05-05 12:22:1144 using ClearPaymentInstrumentsCallback =
45 base::OnceCallback<void(payments::mojom::PaymentHandlerStatus)>;
gogerald84ae6262018-02-06 06:21:4646 using SetPaymentAppInfoCallback =
47 base::OnceCallback<void(payments::mojom::PaymentHandlerStatus)>;
Sahel Sharify1a149fbd2019-09-11 01:25:4448 using EnableDelegationsCallback =
49 base::OnceCallback<void(payments::mojom::PaymentHandlerStatus)>;
jinho.bangab430572016-12-16 14:33:5850
51 explicit PaymentAppDatabase(
52 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context);
Peter Boström828b9022021-09-21 02:28:4353
54 PaymentAppDatabase(const PaymentAppDatabase&) = delete;
55 PaymentAppDatabase& operator=(const PaymentAppDatabase&) = delete;
56
jinho.bangab430572016-12-16 14:33:5857 ~PaymentAppDatabase();
58
jinho.bang5f5a9b492017-05-13 07:55:1359 void ReadAllPaymentApps(ReadAllPaymentAppsCallback callback);
60
jinho.bangbd27d5f2017-04-26 12:09:3461 void DeletePaymentInstrument(const GURL& scope,
62 const std::string& instrument_key,
63 DeletePaymentInstrumentCallback callback);
jinho.bang0e7bbf12017-04-17 17:03:0364 void ReadPaymentInstrument(const GURL& scope,
jinho.bangbd27d5f2017-04-26 12:09:3465 const std::string& instrument_key,
jinho.bang0e7bbf12017-04-17 17:03:0366 ReadPaymentInstrumentCallback callback);
jinho.bangf7742a22017-05-04 01:31:5967 void KeysOfPaymentInstruments(const GURL& scope,
68 KeysOfPaymentInstrumentsCallback callback);
jinho.bang8f5656542017-04-27 16:15:2069 void HasPaymentInstrument(const GURL& scope,
70 const std::string& instrument_key,
71 HasPaymentInstrumentCallback callback);
jinho.bang0e7bbf12017-04-17 17:03:0372 void WritePaymentInstrument(const GURL& scope,
jinho.bangbd27d5f2017-04-26 12:09:3473 const std::string& instrument_key,
jinho.bang0e7bbf12017-04-17 17:03:0374 payments::mojom::PaymentInstrumentPtr instrument,
75 WritePaymentInstrumentCallback callback);
gogerald3ce93992018-04-02 21:28:5376 void FetchAndUpdatePaymentAppInfo(
gogerald70b9dcb2017-07-05 05:28:4977 const GURL& context,
78 const GURL& scope,
gogerald3ce93992018-04-02 21:28:5379 FetchAndUpdatePaymentAppInfoCallback callback);
jinho.bangaf28f772017-05-05 12:22:1180 void ClearPaymentInstruments(const GURL& scope,
81 ClearPaymentInstrumentsCallback callback);
gogeraldbc03a52bf2017-09-05 02:31:4282 void SetPaymentAppUserHint(const GURL& scope, const std::string& user_hint);
Sahel Sharify1a149fbd2019-09-11 01:25:4483 void EnablePaymentAppDelegations(
84 const GURL& scope,
85 const std::vector<payments::mojom::PaymentDelegation>& delegations,
86 EnableDelegationsCallback callback);
gogerald84ae6262018-02-06 06:21:4687 void SetPaymentAppInfoForRegisteredServiceWorker(
88 int64_t registration_id,
89 const std::string& instrument_key,
90 const std::string& name,
gogeralde21a1972018-03-06 00:11:3091 const std::string& icon,
Jinho Bang91dc1b52018-04-06 12:34:3892 const std::string& method,
Sahel Sharify9edd7402019-10-11 20:57:0593 const SupportedDelegations& supported_delegations,
gogerald84ae6262018-02-06 06:21:4694 SetPaymentAppInfoCallback callback);
jinho.bangab430572016-12-16 14:33:5895
96 private:
jinho.bang5f5a9b492017-05-13 07:55:1397 // ReadAllPaymentApps callbacks
98 void DidReadAllPaymentApps(
99 ReadAllPaymentAppsCallback callback,
100 const std::vector<std::pair<int64_t, std::string>>& raw_data,
Han Leon90aedd862018-06-27 02:13:06101 blink::ServiceWorkerStatusCode status);
gogerald70b9dcb2017-07-05 05:28:49102 void DidReadAllPaymentInstruments(
103 PaymentApps apps,
104 ReadAllPaymentAppsCallback callback,
105 const std::vector<std::pair<int64_t, std::string>>& raw_data,
Han Leon90aedd862018-06-27 02:13:06106 blink::ServiceWorkerStatusCode status);
jinho.bang5f5a9b492017-05-13 07:55:13107
jinho.bangbd27d5f2017-04-26 12:09:34108 // DeletePaymentInstrument callbacks
109 void DidFindRegistrationToDeletePaymentInstrument(
110 const std::string& instrument_key,
111 DeletePaymentInstrumentCallback callback,
Han Leon90aedd862018-06-27 02:13:06112 blink::ServiceWorkerStatusCode status,
jinho.bangbd27d5f2017-04-26 12:09:34113 scoped_refptr<ServiceWorkerRegistration> registration);
114 void DidFindPaymentInstrument(int64_t registration_id,
115 const std::string& instrument_key,
116 DeletePaymentInstrumentCallback callback,
117 const std::vector<std::string>& data,
Han Leon90aedd862018-06-27 02:13:06118 blink::ServiceWorkerStatusCode status);
jinho.bangbd27d5f2017-04-26 12:09:34119 void DidDeletePaymentInstrument(DeletePaymentInstrumentCallback callback,
Han Leon90aedd862018-06-27 02:13:06120 blink::ServiceWorkerStatusCode status);
jinho.bangbd27d5f2017-04-26 12:09:34121
jinho.bang0e7bbf12017-04-17 17:03:03122 // ReadPaymentInstrument callbacks
123 void DidFindRegistrationToReadPaymentInstrument(
jinho.bangbd27d5f2017-04-26 12:09:34124 const std::string& instrument_key,
jinho.bang0e7bbf12017-04-17 17:03:03125 ReadPaymentInstrumentCallback callback,
Han Leon90aedd862018-06-27 02:13:06126 blink::ServiceWorkerStatusCode status,
jinho.bang0e7bbf12017-04-17 17:03:03127 scoped_refptr<ServiceWorkerRegistration> registration);
128 void DidReadPaymentInstrument(ReadPaymentInstrumentCallback callback,
129 const std::vector<std::string>& data,
Han Leon90aedd862018-06-27 02:13:06130 blink::ServiceWorkerStatusCode status);
jinho.bang0e7bbf12017-04-17 17:03:03131
jinho.bangf7742a22017-05-04 01:31:59132 // KeysOfPaymentInstruments callbacks
133 void DidFindRegistrationToGetKeys(
134 KeysOfPaymentInstrumentsCallback callback,
Han Leon90aedd862018-06-27 02:13:06135 blink::ServiceWorkerStatusCode status,
jinho.bangf7742a22017-05-04 01:31:59136 scoped_refptr<ServiceWorkerRegistration> registration);
137 void DidGetKeysOfPaymentInstruments(KeysOfPaymentInstrumentsCallback callback,
138 const std::vector<std::string>& data,
Han Leon90aedd862018-06-27 02:13:06139 blink::ServiceWorkerStatusCode status);
jinho.bangf7742a22017-05-04 01:31:59140
jinho.bang8f5656542017-04-27 16:15:20141 // HasPaymentInstrument callbacks
142 void DidFindRegistrationToHasPaymentInstrument(
143 const std::string& instrument_key,
144 HasPaymentInstrumentCallback callback,
Han Leon90aedd862018-06-27 02:13:06145 blink::ServiceWorkerStatusCode status,
jinho.bang8f5656542017-04-27 16:15:20146 scoped_refptr<ServiceWorkerRegistration> registration);
jinho.bang99e341b2017-05-23 11:58:35147 void DidHasPaymentInstrument(DeletePaymentInstrumentCallback callback,
jinho.bang8f5656542017-04-27 16:15:20148 const std::vector<std::string>& data,
Han Leon90aedd862018-06-27 02:13:06149 blink::ServiceWorkerStatusCode status);
jinho.bang8f5656542017-04-27 16:15:20150
jinho.bang0e7bbf12017-04-17 17:03:03151 // WritePaymentInstrument callbacks
152 void DidFindRegistrationToWritePaymentInstrument(
jinho.bangbd27d5f2017-04-26 12:09:34153 const std::string& instrument_key,
jinho.bang0e7bbf12017-04-17 17:03:03154 payments::mojom::PaymentInstrumentPtr instrument,
gogeraldd8c5af342017-06-14 02:22:36155 const std::string& decoded_instrument_icon,
jinho.bang0e7bbf12017-04-17 17:03:03156 WritePaymentInstrumentCallback callback,
Han Leon90aedd862018-06-27 02:13:06157 blink::ServiceWorkerStatusCode status,
jinho.bang0e7bbf12017-04-17 17:03:03158 scoped_refptr<ServiceWorkerRegistration> registration);
159 void DidWritePaymentInstrument(WritePaymentInstrumentCallback callback,
Han Leon90aedd862018-06-27 02:13:06160 blink::ServiceWorkerStatusCode status);
jinho.bang0e7bbf12017-04-17 17:03:03161
gogerald3ce93992018-04-02 21:28:53162 // FetchAndUpdatePaymentAppInfo callbacks.
gogeraldc85db412017-08-07 23:46:42163 void FetchPaymentAppInfoCallback(
164 const GURL& scope,
gogerald3ce93992018-04-02 21:28:53165 FetchAndUpdatePaymentAppInfoCallback callback,
gogeraldc85db412017-08-07 23:46:42166 std::unique_ptr<PaymentAppInfoFetcher::PaymentAppInfo> app_info);
gogerald3ce93992018-04-02 21:28:53167 void DidFindRegistrationToUpdatePaymentAppInfo(
168 FetchAndUpdatePaymentAppInfoCallback callback,
gogeraldc85db412017-08-07 23:46:42169 std::unique_ptr<PaymentAppInfoFetcher::PaymentAppInfo> app_info,
Han Leon90aedd862018-06-27 02:13:06170 blink::ServiceWorkerStatusCode status,
gogerald70b9dcb2017-07-05 05:28:49171 scoped_refptr<ServiceWorkerRegistration> registration);
gogerald3ce93992018-04-02 21:28:53172 void DidGetPaymentAppInfoToUpdatePaymentAppInfo(
173 FetchAndUpdatePaymentAppInfoCallback callback,
174 std::unique_ptr<PaymentAppInfoFetcher::PaymentAppInfo> app_info,
175 scoped_refptr<ServiceWorkerRegistration> registration,
176 const std::vector<std::string>& data,
Han Leon90aedd862018-06-27 02:13:06177 blink::ServiceWorkerStatusCode status);
gogerald3ce93992018-04-02 21:28:53178 void DidUpdatePaymentApp(FetchAndUpdatePaymentAppInfoCallback callback,
179 bool fetch_app_info_failed,
Han Leon90aedd862018-06-27 02:13:06180 blink::ServiceWorkerStatusCode status);
gogerald70b9dcb2017-07-05 05:28:49181
gogeraldd8c5af342017-06-14 02:22:36182 // PaymentInstrumentIconFetcherCallback.
183 void DidFetchedPaymentInstrumentIcon(
184 const GURL& scope,
185 const std::string& instrument_key,
186 payments::mojom::PaymentInstrumentPtr instrument,
187 WritePaymentInstrumentCallback callback,
188 const std::string& icon);
189
jinho.bangaf28f772017-05-05 12:22:11190 // ClearPaymentInstruments callbacks
191 void DidFindRegistrationToClearPaymentInstruments(
192 const GURL& scope,
193 ClearPaymentInstrumentsCallback callback,
Han Leon90aedd862018-06-27 02:13:06194 blink::ServiceWorkerStatusCode status,
jinho.bangaf28f772017-05-05 12:22:11195 scoped_refptr<ServiceWorkerRegistration> registration);
196 void DidGetKeysToClearPaymentInstruments(
gogerald70b9dcb2017-07-05 05:28:49197 scoped_refptr<ServiceWorkerRegistration> registration,
jinho.bangaf28f772017-05-05 12:22:11198 ClearPaymentInstrumentsCallback callback,
199 const std::vector<std::string>& keys,
200 payments::mojom::PaymentHandlerStatus status);
201 void DidClearPaymentInstruments(ClearPaymentInstrumentsCallback callback,
Han Leon90aedd862018-06-27 02:13:06202 blink::ServiceWorkerStatusCode status);
jinho.bangaf28f772017-05-05 12:22:11203
gogeraldbc03a52bf2017-09-05 02:31:42204 // SetPaymentAppUserHint callbacks.
205 void DidFindRegistrationToSetPaymentAppUserHint(
206 const std::string& user_hint,
Han Leon90aedd862018-06-27 02:13:06207 blink::ServiceWorkerStatusCode status,
gogeraldbc03a52bf2017-09-05 02:31:42208 scoped_refptr<ServiceWorkerRegistration> registration);
Steven Bingler0ae23d52021-05-25 15:17:59209 void DidGetPaymentAppInfoToSetUserHint(
210 const std::string& user_hint,
211 scoped_refptr<ServiceWorkerRegistration> registration,
212 const std::vector<std::string>& data,
213 blink::ServiceWorkerStatusCode status);
Han Leon90aedd862018-06-27 02:13:06214 void DidSetPaymentAppUserHint(blink::ServiceWorkerStatusCode status);
gogeraldbc03a52bf2017-09-05 02:31:42215
Sahel Sharify1a149fbd2019-09-11 01:25:44216 // EnablePaymentAppDelegations callbacks.
217 void DidFindRegistrationToEnablePaymentAppDelegations(
218 const std::vector<payments::mojom::PaymentDelegation>& delegations,
219 EnableDelegationsCallback callback,
220 blink::ServiceWorkerStatusCode status,
221 scoped_refptr<ServiceWorkerRegistration> registration);
222 void DidGetPaymentAppInfoToEnableDelegations(
223 const std::vector<payments::mojom::PaymentDelegation>& delegations,
224 EnableDelegationsCallback callback,
Steven Bingler0ae23d52021-05-25 15:17:59225 scoped_refptr<ServiceWorkerRegistration> registration,
Sahel Sharify1a149fbd2019-09-11 01:25:44226 const std::vector<std::string>& data,
227 blink::ServiceWorkerStatusCode status);
228 void DidEnablePaymentAppDelegations(EnableDelegationsCallback callback,
229 blink::ServiceWorkerStatusCode status);
230
gogerald84ae6262018-02-06 06:21:46231 // SetPaymentAppInfoForRegisteredServiceWorker callbacks.
232 void DidFindRegistrationToSetPaymentApp(
233 const std::string& instrument_key,
234 const std::string& name,
gogeralde21a1972018-03-06 00:11:30235 const std::string& icon,
Jinho Bang91dc1b52018-04-06 12:34:38236 const std::string& method,
Sahel Sharify9edd7402019-10-11 20:57:05237 const SupportedDelegations& supported_delegations,
gogerald84ae6262018-02-06 06:21:46238 SetPaymentAppInfoCallback callback,
Han Leon90aedd862018-06-27 02:13:06239 blink::ServiceWorkerStatusCode status,
gogerald84ae6262018-02-06 06:21:46240 scoped_refptr<ServiceWorkerRegistration> registration);
241 void DidWritePaymentAppForSetPaymentApp(
242 const std::string& instrument_key,
Jinho Bang91dc1b52018-04-06 12:34:38243 const std::string& method,
gogerald84ae6262018-02-06 06:21:46244 SetPaymentAppInfoCallback callback,
245 scoped_refptr<ServiceWorkerRegistration> registration,
Han Leon90aedd862018-06-27 02:13:06246 blink::ServiceWorkerStatusCode status);
gogerald84ae6262018-02-06 06:21:46247 void DidWritePaymentInstrumentForSetPaymentApp(
248 SetPaymentAppInfoCallback callback,
Han Leon90aedd862018-06-27 02:13:06249 blink::ServiceWorkerStatusCode status);
gogerald84ae6262018-02-06 06:21:46250
jinho.bangab430572016-12-16 14:33:58251 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
Jeremy Roman3bca4bf2019-07-11 03:41:25252 base::WeakPtrFactory<PaymentAppDatabase> weak_ptr_factory_{this};
jinho.bangab430572016-12-16 14:33:58253};
254
255} // namespace content
256
257#endif // CONTENT_BROWSER_PAYMENTS_PAYMENT_APP_DATABASE_H_