blob: 01636afa37eaf78705a2e17709d74b254b32120d [file] [log] [blame]
Avi Drissman4e1b7bc32022-09-15 14:03:501// Copyright 2017 The Chromium Authors
jinho.bangac34b3a32017-01-05 12:51:212// 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_PROVIDER_IMPL_H_
6#define CONTENT_BROWSER_PAYMENTS_PAYMENT_APP_PROVIDER_IMPL_H_
7
Keishi Hattori0e45c022021-11-27 09:25:528#include "base/memory/raw_ptr.h"
DongJun Kim3a9b5a1a2020-09-23 16:42:519#include "content/browser/payments/payment_app_context_impl.h"
Matt Falkenhagendde7e5252021-09-10 02:41:1810#include "content/browser/payments/payment_event_dispatcher.h"
jinho.bangac34b3a32017-01-05 12:51:2111#include "content/common/content_export.h"
12#include "content/public/browser/payment_app_provider.h"
gogerald1875cc12018-03-20 00:05:4913#include "content/public/browser/web_contents_observer.h"
DongJun Kim3a9b5a1a2020-09-23 16:42:5114#include "content/public/browser/web_contents_user_data.h"
jinho.bangac34b3a32017-01-05 12:51:2115
16namespace content {
17
Matt Falkenhagendde7e5252021-09-10 02:41:1818// Lives on the UI thread.
DongJun Kim3a9b5a1a2020-09-23 16:42:5119class CONTENT_EXPORT PaymentAppProviderImpl
20 : public PaymentAppProvider,
21 public WebContentsUserData<PaymentAppProviderImpl> {
jinho.bangac34b3a32017-01-05 12:51:2122 public:
DongJun Kim3a9b5a1a2020-09-23 16:42:5123 ~PaymentAppProviderImpl() override;
jinho.bangac34b3a32017-01-05 12:51:2124
Rouslan Solomakhin42437ff72020-03-10 16:50:0925 // Disallow copy and assign.
26 PaymentAppProviderImpl(const PaymentAppProviderImpl& other) = delete;
27 PaymentAppProviderImpl& operator=(const PaymentAppProviderImpl& other) =
28 delete;
29
jinho.bangac34b3a32017-01-05 12:51:2130 // PaymentAppProvider implementation:
DongJun Kim3a9b5a1a2020-09-23 16:42:5131 void InvokePaymentApp(int64_t registration_id,
Rouslan Solomakhin2580c842019-07-03 18:35:2432 const url::Origin& sw_origin,
jinho.bang745f3df2017-06-06 17:23:4133 payments::mojom::PaymentRequestEventDataPtr event_data,
Jinho Bangdc51f002017-07-24 15:29:0834 InvokePaymentAppCallback callback) override;
gogerald84ae6262018-02-06 06:21:4635 void InstallAndInvokePaymentApp(
gogerald84ae6262018-02-06 06:21:4636 payments::mojom::PaymentRequestEventDataPtr event_data,
37 const std::string& app_name,
gogeralde21a1972018-03-06 00:11:3038 const SkBitmap& app_icon,
Hwanseung Lee314acd52020-04-20 08:08:3739 const GURL& sw_js_url,
40 const GURL& sw_scope,
gogerald84ae6262018-02-06 06:21:4641 bool sw_use_cache,
Jinho Bang91dc1b52018-04-06 12:34:3842 const std::string& method,
Sahel Sharify9edd7402019-10-11 20:57:0543 const SupportedDelegations& supported_delegations,
Rouslan Solomakhin1f95f092019-08-09 12:28:5144 RegistrationIdCallback registration_id_callback,
gogerald84ae6262018-02-06 06:21:4645 InvokePaymentAppCallback callback) override;
Stephen McGruera7950b142024-11-21 16:45:5446 void UpdatePaymentAppMetadata(
47 int64_t registration_id,
48 const std::string& instrument_key,
49 const std::string& name,
50 const std::string& string_encoded_icon,
51 const std::string& method_name,
52 const SupportedDelegations& supported_delegations,
53 UpdatePaymentAppMetadataCallback callback) override;
DongJun Kim3a9b5a1a2020-09-23 16:42:5154 void CanMakePayment(int64_t registration_id,
Rouslan Solomakhin2580c842019-07-03 18:35:2455 const url::Origin& sw_origin,
56 const std::string& payment_request_id,
Jinho Bang90614002017-08-02 00:17:0757 payments::mojom::CanMakePaymentEventDataPtr event_data,
Rouslan Solomakhinba014902020-03-11 21:49:5858 CanMakePaymentCallback callback) override;
DongJun Kim3a9b5a1a2020-09-23 16:42:5159 void AbortPayment(int64_t registration_id,
Rouslan Solomakhin2580c842019-07-03 18:35:2460 const url::Origin& sw_origin,
61 const std::string& payment_request_id,
Rouslan Solomakhinba014902020-03-11 21:49:5862 AbortCallback callback) override;
Liquan (Max) Gucd94cfd2020-09-29 04:21:2763 void SetOpenedWindow(WebContents* payment_handler_web_contents) override;
Nick Burris5012d3e2020-06-17 16:03:5264 void CloseOpenedWindow() override;
Rouslan Solomakhin42b4d5a2019-07-02 15:28:3065 void OnClosingOpenedWindow(
Rouslan Solomakhin42b4d5a2019-07-02 15:28:3066 payments::mojom::PaymentEventResponseType reason) override;
jinho.bangac34b3a32017-01-05 12:51:2167
Scott Haseley997e04822023-09-21 14:52:0468 DevToolsBackgroundServicesContextImpl* GetDevTools(
69 const url::Origin& sw_origin);
70
Rouslan Solomakhin4cba5152022-11-28 15:43:4371 void InstallPaymentAppForTesting(
72 const SkBitmap& app_icon,
73 const GURL& sw_js_url,
74 const GURL& sw_scope,
75 const std::string& method,
76 base::OnceCallback<void(bool success)> callback) override;
77
jinho.bangac34b3a32017-01-05 12:51:2178 private:
Liquan (Max) Gucd94cfd2020-09-29 04:21:2779 explicit PaymentAppProviderImpl(WebContents* payment_request_web_contents);
DongJun Kim3a9b5a1a2020-09-23 16:42:5180 friend class WebContentsUserData<PaymentAppProviderImpl>;
81 WEB_CONTENTS_USER_DATA_KEY_DECL();
jinho.bangac34b3a32017-01-05 12:51:2182
DongJun Kimcdd6f592020-09-23 20:13:2283 void StartServiceWorkerForDispatch(
84 int64_t registration_id,
Matt Falkenhagendde7e5252021-09-10 02:41:1885 PaymentEventDispatcher::ServiceWorkerStartCallback callback);
DongJun Kimcdd6f592020-09-23 20:13:2286 void OnInstallPaymentApp(
87 const url::Origin& sw_origin,
88 payments::mojom::PaymentRequestEventDataPtr event_data,
89 RegistrationIdCallback registration_id_callback,
90 InvokePaymentAppCallback callback,
91 int64_t registration_id);
jinho.bangac34b3a32017-01-05 12:51:2192
Dave Tapuska8c6587b2021-09-07 14:44:5093 // The opened window's web contents.
94 base::WeakPtr<WebContents> payment_handler_window_;
DongJun Kim3a9b5a1a2020-09-23 16:42:5195
96 // Owns this object.
Keishi Hattori0e45c022021-11-27 09:25:5297 raw_ptr<WebContents> payment_request_web_contents_;
DongJun Kim3a9b5a1a2020-09-23 16:42:5198
Matt Falkenhagendde7e5252021-09-10 02:41:1899 std::unique_ptr<PaymentEventDispatcher> event_dispatcher_;
DongJun Kimcdd6f592020-09-23 20:13:22100
DongJun Kim3a9b5a1a2020-09-23 16:42:51101 base::WeakPtrFactory<PaymentAppProviderImpl> weak_ptr_factory_{this};
jinho.bangac34b3a32017-01-05 12:51:21102};
103
104} // namespace content
105
106#endif // CONTENT_BROWSER_PAYMENTS_PAYMENT_APP_PROVIDER_IMPL_H_