Avi Drissman | 4e1b7bc3 | 2022-09-15 14:03:50 | [diff] [blame] | 1 | // Copyright 2017 The Chromium Authors |
jinho.bang | ac34b3a3 | 2017-01-05 12:51:21 | [diff] [blame] | 2 | // 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 Hattori | 0e45c02 | 2021-11-27 09:25:52 | [diff] [blame] | 8 | #include "base/memory/raw_ptr.h" |
DongJun Kim | 3a9b5a1a | 2020-09-23 16:42:51 | [diff] [blame] | 9 | #include "content/browser/payments/payment_app_context_impl.h" |
Matt Falkenhagen | dde7e525 | 2021-09-10 02:41:18 | [diff] [blame] | 10 | #include "content/browser/payments/payment_event_dispatcher.h" |
jinho.bang | ac34b3a3 | 2017-01-05 12:51:21 | [diff] [blame] | 11 | #include "content/common/content_export.h" |
| 12 | #include "content/public/browser/payment_app_provider.h" |
gogerald | 1875cc1 | 2018-03-20 00:05:49 | [diff] [blame] | 13 | #include "content/public/browser/web_contents_observer.h" |
DongJun Kim | 3a9b5a1a | 2020-09-23 16:42:51 | [diff] [blame] | 14 | #include "content/public/browser/web_contents_user_data.h" |
jinho.bang | ac34b3a3 | 2017-01-05 12:51:21 | [diff] [blame] | 15 | |
| 16 | namespace content { |
| 17 | |
Matt Falkenhagen | dde7e525 | 2021-09-10 02:41:18 | [diff] [blame] | 18 | // Lives on the UI thread. |
DongJun Kim | 3a9b5a1a | 2020-09-23 16:42:51 | [diff] [blame] | 19 | class CONTENT_EXPORT PaymentAppProviderImpl |
| 20 | : public PaymentAppProvider, |
| 21 | public WebContentsUserData<PaymentAppProviderImpl> { |
jinho.bang | ac34b3a3 | 2017-01-05 12:51:21 | [diff] [blame] | 22 | public: |
DongJun Kim | 3a9b5a1a | 2020-09-23 16:42:51 | [diff] [blame] | 23 | ~PaymentAppProviderImpl() override; |
jinho.bang | ac34b3a3 | 2017-01-05 12:51:21 | [diff] [blame] | 24 | |
Rouslan Solomakhin | 42437ff7 | 2020-03-10 16:50:09 | [diff] [blame] | 25 | // Disallow copy and assign. |
| 26 | PaymentAppProviderImpl(const PaymentAppProviderImpl& other) = delete; |
| 27 | PaymentAppProviderImpl& operator=(const PaymentAppProviderImpl& other) = |
| 28 | delete; |
| 29 | |
jinho.bang | ac34b3a3 | 2017-01-05 12:51:21 | [diff] [blame] | 30 | // PaymentAppProvider implementation: |
DongJun Kim | 3a9b5a1a | 2020-09-23 16:42:51 | [diff] [blame] | 31 | void InvokePaymentApp(int64_t registration_id, |
Rouslan Solomakhin | 2580c84 | 2019-07-03 18:35:24 | [diff] [blame] | 32 | const url::Origin& sw_origin, |
jinho.bang | 745f3df | 2017-06-06 17:23:41 | [diff] [blame] | 33 | payments::mojom::PaymentRequestEventDataPtr event_data, |
Jinho Bang | dc51f00 | 2017-07-24 15:29:08 | [diff] [blame] | 34 | InvokePaymentAppCallback callback) override; |
gogerald | 84ae626 | 2018-02-06 06:21:46 | [diff] [blame] | 35 | void InstallAndInvokePaymentApp( |
gogerald | 84ae626 | 2018-02-06 06:21:46 | [diff] [blame] | 36 | payments::mojom::PaymentRequestEventDataPtr event_data, |
| 37 | const std::string& app_name, |
gogerald | e21a197 | 2018-03-06 00:11:30 | [diff] [blame] | 38 | const SkBitmap& app_icon, |
Hwanseung Lee | 314acd5 | 2020-04-20 08:08:37 | [diff] [blame] | 39 | const GURL& sw_js_url, |
| 40 | const GURL& sw_scope, |
gogerald | 84ae626 | 2018-02-06 06:21:46 | [diff] [blame] | 41 | bool sw_use_cache, |
Jinho Bang | 91dc1b5 | 2018-04-06 12:34:38 | [diff] [blame] | 42 | const std::string& method, |
Sahel Sharify | 9edd740 | 2019-10-11 20:57:05 | [diff] [blame] | 43 | const SupportedDelegations& supported_delegations, |
Rouslan Solomakhin | 1f95f09 | 2019-08-09 12:28:51 | [diff] [blame] | 44 | RegistrationIdCallback registration_id_callback, |
gogerald | 84ae626 | 2018-02-06 06:21:46 | [diff] [blame] | 45 | InvokePaymentAppCallback callback) override; |
Stephen McGruer | a7950b14 | 2024-11-21 16:45:54 | [diff] [blame] | 46 | 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 Kim | 3a9b5a1a | 2020-09-23 16:42:51 | [diff] [blame] | 54 | void CanMakePayment(int64_t registration_id, |
Rouslan Solomakhin | 2580c84 | 2019-07-03 18:35:24 | [diff] [blame] | 55 | const url::Origin& sw_origin, |
| 56 | const std::string& payment_request_id, |
Jinho Bang | 9061400 | 2017-08-02 00:17:07 | [diff] [blame] | 57 | payments::mojom::CanMakePaymentEventDataPtr event_data, |
Rouslan Solomakhin | ba01490 | 2020-03-11 21:49:58 | [diff] [blame] | 58 | CanMakePaymentCallback callback) override; |
DongJun Kim | 3a9b5a1a | 2020-09-23 16:42:51 | [diff] [blame] | 59 | void AbortPayment(int64_t registration_id, |
Rouslan Solomakhin | 2580c84 | 2019-07-03 18:35:24 | [diff] [blame] | 60 | const url::Origin& sw_origin, |
| 61 | const std::string& payment_request_id, |
Rouslan Solomakhin | ba01490 | 2020-03-11 21:49:58 | [diff] [blame] | 62 | AbortCallback callback) override; |
Liquan (Max) Gu | cd94cfd | 2020-09-29 04:21:27 | [diff] [blame] | 63 | void SetOpenedWindow(WebContents* payment_handler_web_contents) override; |
Nick Burris | 5012d3e | 2020-06-17 16:03:52 | [diff] [blame] | 64 | void CloseOpenedWindow() override; |
Rouslan Solomakhin | 42b4d5a | 2019-07-02 15:28:30 | [diff] [blame] | 65 | void OnClosingOpenedWindow( |
Rouslan Solomakhin | 42b4d5a | 2019-07-02 15:28:30 | [diff] [blame] | 66 | payments::mojom::PaymentEventResponseType reason) override; |
jinho.bang | ac34b3a3 | 2017-01-05 12:51:21 | [diff] [blame] | 67 | |
Scott Haseley | 997e0482 | 2023-09-21 14:52:04 | [diff] [blame] | 68 | DevToolsBackgroundServicesContextImpl* GetDevTools( |
| 69 | const url::Origin& sw_origin); |
| 70 | |
Rouslan Solomakhin | 4cba515 | 2022-11-28 15:43:43 | [diff] [blame] | 71 | 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.bang | ac34b3a3 | 2017-01-05 12:51:21 | [diff] [blame] | 78 | private: |
Liquan (Max) Gu | cd94cfd | 2020-09-29 04:21:27 | [diff] [blame] | 79 | explicit PaymentAppProviderImpl(WebContents* payment_request_web_contents); |
DongJun Kim | 3a9b5a1a | 2020-09-23 16:42:51 | [diff] [blame] | 80 | friend class WebContentsUserData<PaymentAppProviderImpl>; |
| 81 | WEB_CONTENTS_USER_DATA_KEY_DECL(); |
jinho.bang | ac34b3a3 | 2017-01-05 12:51:21 | [diff] [blame] | 82 | |
DongJun Kim | cdd6f59 | 2020-09-23 20:13:22 | [diff] [blame] | 83 | void StartServiceWorkerForDispatch( |
| 84 | int64_t registration_id, |
Matt Falkenhagen | dde7e525 | 2021-09-10 02:41:18 | [diff] [blame] | 85 | PaymentEventDispatcher::ServiceWorkerStartCallback callback); |
DongJun Kim | cdd6f59 | 2020-09-23 20:13:22 | [diff] [blame] | 86 | 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.bang | ac34b3a3 | 2017-01-05 12:51:21 | [diff] [blame] | 92 | |
Dave Tapuska | 8c6587b | 2021-09-07 14:44:50 | [diff] [blame] | 93 | // The opened window's web contents. |
| 94 | base::WeakPtr<WebContents> payment_handler_window_; |
DongJun Kim | 3a9b5a1a | 2020-09-23 16:42:51 | [diff] [blame] | 95 | |
| 96 | // Owns this object. |
Keishi Hattori | 0e45c02 | 2021-11-27 09:25:52 | [diff] [blame] | 97 | raw_ptr<WebContents> payment_request_web_contents_; |
DongJun Kim | 3a9b5a1a | 2020-09-23 16:42:51 | [diff] [blame] | 98 | |
Matt Falkenhagen | dde7e525 | 2021-09-10 02:41:18 | [diff] [blame] | 99 | std::unique_ptr<PaymentEventDispatcher> event_dispatcher_; |
DongJun Kim | cdd6f59 | 2020-09-23 20:13:22 | [diff] [blame] | 100 | |
DongJun Kim | 3a9b5a1a | 2020-09-23 16:42:51 | [diff] [blame] | 101 | base::WeakPtrFactory<PaymentAppProviderImpl> weak_ptr_factory_{this}; |
jinho.bang | ac34b3a3 | 2017-01-05 12:51:21 | [diff] [blame] | 102 | }; |
| 103 | |
| 104 | } // namespace content |
| 105 | |
| 106 | #endif // CONTENT_BROWSER_PAYMENTS_PAYMENT_APP_PROVIDER_IMPL_H_ |