blob: a483f095218c0b22a236931d0c5ff59b6137e180 [file] [log] [blame]
Avi Drissman4e1b7bc32022-09-15 14:03:501// Copyright 2020 The Chromium Authors
DongJun Kimcdd6f592020-09-23 20:13:222// 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_RESPOND_WITH_CALLBACK_H_
6#define CONTENT_BROWSER_PAYMENTS_RESPOND_WITH_CALLBACK_H_
7
Avi Drissmanadac21992023-01-11 23:46:398#include "base/functional/callback_forward.h"
DongJun Kimcdd6f592020-09-23 20:13:229#include "content/browser/service_worker/service_worker_context_wrapper.h"
DongJun Kimcdd6f592020-09-23 20:13:2210#include "content/public/browser/browser_context.h"
11#include "content/public/browser/payment_app_provider.h"
12#include "content/public/browser/payment_app_provider_util.h"
13#include "content/public/browser/web_contents.h"
14#include "content/public/browser/web_contents_observer.h"
15#include "third_party/blink/public/mojom/payments/payment_app.mojom.h"
16
17namespace content {
18
Matt Falkenhagendde7e5252021-09-10 02:41:1819class PaymentEventDispatcher;
DongJun Kimcdd6f592020-09-23 20:13:2220enum class RespondWithCallbackType { kInvoke, kAbort, kCanMakePayment };
21
22// Abstract base class for event callbacks that are invoked when the payment
23// handler resolves the promise passed in to TheEvent.respondWith() method.
24class RespondWithCallback
Dave Tapuska8eedbdd2021-07-08 16:02:0125 : public payments::mojom::PaymentHandlerResponseCallback {
DongJun Kimcdd6f592020-09-23 20:13:2226 public:
27 // Disallow copy and assign.
28 RespondWithCallback(const RespondWithCallback& other) = delete;
29 RespondWithCallback& operator=(const RespondWithCallback& other) = delete;
30
31 mojo::PendingRemote<payments::mojom::PaymentHandlerResponseCallback>
32 BindNewPipeAndPassRemote();
33
34 protected:
35 RespondWithCallback(
DongJun Kimcdd6f592020-09-23 20:13:2236 ServiceWorkerMetrics::EventType event_type,
37 scoped_refptr<ServiceWorkerVersion> service_worker_version,
Matt Falkenhagendde7e5252021-09-10 02:41:1838 base::WeakPtr<PaymentEventDispatcher> event_dispatcher);
DongJun Kimcdd6f592020-09-23 20:13:2239
40 ~RespondWithCallback() override;
41
42 // payments::mojom::PaymentHandlerResponseCallback implementation.
43 void OnResponseForCanMakePayment(
44 payments::mojom::CanMakePaymentResponsePtr response) override {}
45
46 // payments::mojom::PaymentHandlerResponseCallback implementation.
47 void OnResponseForPaymentRequest(
48 payments::mojom::PaymentHandlerResponsePtr response) override {}
49
50 // payments::mojom::PaymentHandlerResponseCallback implementation.
51 void OnResponseForAbortPayment(bool payment_aborted) override {}
52
53 virtual void OnServiceWorkerError(
54 blink::ServiceWorkerStatusCode service_worker_status) = 0;
55
56 void FinishServiceWorkerRequest();
DongJun Kimcdd6f592020-09-23 20:13:2257 void ClearRespondWithCallbackAndCloseWindow();
58
59 private:
60 int request_id_;
61 scoped_refptr<ServiceWorkerVersion> service_worker_version_;
Matt Falkenhagendde7e5252021-09-10 02:41:1862 base::WeakPtr<PaymentEventDispatcher> event_dispatcher_;
DongJun Kimcdd6f592020-09-23 20:13:2263 mojo::Receiver<payments::mojom::PaymentHandlerResponseCallback> receiver_{
64 this};
65
66 base::WeakPtrFactory<RespondWithCallback> weak_ptr_factory_{this};
67};
68
69// Self-deleting callback for "canmakepayment" event. Invoked when the payment
70// handler resolves the promise passed into CanMakePaymentEvent.respondWith()
71// method.
72class CanMakePaymentRespondWithCallback : public RespondWithCallback {
73 public:
74 CanMakePaymentRespondWithCallback(
DongJun Kimcdd6f592020-09-23 20:13:2275 scoped_refptr<ServiceWorkerVersion> service_worker_version,
Matt Falkenhagendde7e5252021-09-10 02:41:1876 base::WeakPtr<PaymentEventDispatcher> event_dispatcher,
DongJun Kimcdd6f592020-09-23 20:13:2277 PaymentAppProvider::CanMakePaymentCallback callback);
78 ~CanMakePaymentRespondWithCallback() override;
79
80 // Disallow copy and assign.
81 CanMakePaymentRespondWithCallback(
82 const CanMakePaymentRespondWithCallback& other) = delete;
83 CanMakePaymentRespondWithCallback& operator=(
84 const CanMakePaymentRespondWithCallback& other) = delete;
85
86 private:
87 // payments::mojom::PaymentHandlerResponseCallback implementation.
88 void OnResponseForCanMakePayment(
89 payments::mojom::CanMakePaymentResponsePtr response) override;
90
91 // RespondWithCallback implementation.
92 void OnServiceWorkerError(
93 blink::ServiceWorkerStatusCode service_worker_status) override;
94
95 PaymentAppProvider::CanMakePaymentCallback callback_;
96};
97
98// Self-deleting callback for "paymentrequest" event. Invoked when the payment
99// handler resolves the promise passed into PaymentRequestEvent.respondWith()
100// method.
101class InvokeRespondWithCallback : public RespondWithCallback {
102 public:
103 InvokeRespondWithCallback(
DongJun Kimcdd6f592020-09-23 20:13:22104 scoped_refptr<ServiceWorkerVersion> service_worker_version,
Matt Falkenhagendde7e5252021-09-10 02:41:18105 base::WeakPtr<PaymentEventDispatcher> event_dispatcher,
DongJun Kimcdd6f592020-09-23 20:13:22106 PaymentAppProvider::InvokePaymentAppCallback callback);
107 ~InvokeRespondWithCallback() override;
108
109 // Disallow copy and assign.
110 InvokeRespondWithCallback(const InvokeRespondWithCallback& other) = delete;
111 InvokeRespondWithCallback& operator=(const InvokeRespondWithCallback& other) =
112 delete;
113
114 // Called only for "paymentrequest" event.
115 void AbortPaymentSinceOpennedWindowClosing(
116 payments::mojom::PaymentEventResponseType reason);
117
118 private:
119 // payments::mojom::PaymentHandlerResponseCallback implementation.
120 void OnResponseForPaymentRequest(
121 payments::mojom::PaymentHandlerResponsePtr response) override;
122
123 // RespondWithCallback implementation.
124 void OnServiceWorkerError(
125 blink::ServiceWorkerStatusCode service_worker_status) override;
126
127 void RespondToPaymentRequestWithErrorAndDeleteSelf(
128 payments::mojom::PaymentEventResponseType response_type);
129
130 PaymentAppProvider::InvokePaymentAppCallback callback_;
131};
132
133// Self-deleting callback for "abortpayment" event. Invoked when the payment
134// handler resolves the promise passed into AbortPayment.respondWith() method.
135class AbortRespondWithCallback : public RespondWithCallback {
136 public:
137 AbortRespondWithCallback(
DongJun Kimcdd6f592020-09-23 20:13:22138 scoped_refptr<ServiceWorkerVersion> service_worker_version,
Matt Falkenhagendde7e5252021-09-10 02:41:18139 base::WeakPtr<PaymentEventDispatcher> event_dispatcher,
DongJun Kimcdd6f592020-09-23 20:13:22140 PaymentAppProvider::AbortCallback callback);
141 ~AbortRespondWithCallback() override;
142
143 // Disallow copy and assign.
144 AbortRespondWithCallback(const AbortRespondWithCallback& other) = delete;
145 AbortRespondWithCallback& operator=(const AbortRespondWithCallback& other) =
146 delete;
147
148 private:
149 // payments::mojom::PaymentHandlerResponseCallback implementation.
150 void OnResponseForAbortPayment(bool payment_aborted) override;
151
152 // RespondWithCallback implementation.
153 void OnServiceWorkerError(
154 blink::ServiceWorkerStatusCode service_worker_status) override;
155
156 PaymentAppProvider::AbortCallback callback_;
157};
158
159} // namespace content.
160
161#endif // CONTENT_BROWSER_PAYMENTS_RESPOND_WITH_CALLBACK_H_