Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: content/browser/payments/payment_app_provider_impl.cc

Issue 2718013004: PaymentApp: Implement respondWith() in PaymentRequestEvent. (content side) (Closed)
Patch Set: PaymentApp: Implement respondWith() in PaymentRequestEvent. (content side) Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/payments/payment_app_provider_impl.h" 5 #include "content/browser/payments/payment_app_provider_impl.h"
6 6
7 #include "content/browser/payments/payment_app_context_impl.h" 7 #include "content/browser/payments/payment_app_context_impl.h"
8 #include "content/browser/service_worker/service_worker_context_wrapper.h" 8 #include "content/browser/service_worker/service_worker_context_wrapper.h"
9 #include "content/browser/service_worker/service_worker_metrics.h" 9 #include "content/browser/service_worker/service_worker_metrics.h"
10 #include "content/browser/service_worker/service_worker_version.h" 10 #include "content/browser/service_worker/service_worker_version.h"
11 #include "content/browser/storage_partition_impl.h" 11 #include "content/browser/storage_partition_impl.h"
12 #include "content/common/service_worker/service_worker_status_code.h" 12 #include "content/common/service_worker/service_worker_status_code.h"
13 #include "content/common/service_worker/service_worker_utils.h"
13 #include "content/public/browser/browser_context.h" 14 #include "content/public/browser/browser_context.h"
14 #include "content/public/browser/browser_thread.h" 15 #include "content/public/browser/browser_thread.h"
15 16
16 namespace content { 17 namespace content {
17 namespace { 18 namespace {
18 19
20 class ResponseCallback : public mojom::PaymentAppResponseCallback {
21 public:
22 static mojom::PaymentAppResponseCallbackPtr Create(
23 int event_id,
24 scoped_refptr<ServiceWorkerVersion> service_worker_version,
25 const PaymentAppProvider::InvokePaymentAppCallback callback) {
26 ResponseCallback* response_callback = new ResponseCallback(
27 event_id, std::move(service_worker_version), callback);
28 return response_callback->binding_.CreateInterfacePtrAndBind();
29 }
30 ~ResponseCallback() override {}
31
32 void OnPaymentAppResponse(payments::mojom::PaymentAppResponsePtr response,
33 base::Time dispatch_event_time) override {
34 DCHECK_CURRENTLY_ON(BrowserThread::IO);
35 service_worker_version_->FinishRequest(event_id_, false,
36 dispatch_event_time);
37 BrowserThread::PostTask(
38 BrowserThread::UI, FROM_HERE,
39 base::Bind(callback_, base::Passed(std::move(response))));
40 delete this;
41 }
42
43 private:
44 ResponseCallback(int event_id,
45 scoped_refptr<ServiceWorkerVersion> service_worker_version,
46 const PaymentAppProvider::InvokePaymentAppCallback callback)
47 : event_id_(event_id),
48 service_worker_version_(service_worker_version),
49 callback_(callback),
50 binding_(this) {}
51
52 int event_id_;
53 scoped_refptr<ServiceWorkerVersion> service_worker_version_;
54 const PaymentAppProvider::InvokePaymentAppCallback callback_;
55 mojo::Binding<mojom::PaymentAppResponseCallback> binding_;
56 };
57
19 void DidGetAllManifestsOnIO( 58 void DidGetAllManifestsOnIO(
20 const PaymentAppProvider::GetAllManifestsCallback& callback, 59 const PaymentAppProvider::GetAllManifestsCallback& callback,
21 PaymentAppProvider::Manifests manifests) { 60 PaymentAppProvider::Manifests manifests) {
22 BrowserThread::PostTask( 61 BrowserThread::PostTask(
23 BrowserThread::UI, FROM_HERE, 62 BrowserThread::UI, FROM_HERE,
24 base::Bind(callback, base::Passed(std::move(manifests)))); 63 base::Bind(callback, base::Passed(std::move(manifests))));
25 } 64 }
26 65
27 void GetAllManifestsOnIO( 66 void GetAllManifestsOnIO(
28 scoped_refptr<PaymentAppContextImpl> payment_app_context, 67 scoped_refptr<PaymentAppContextImpl> payment_app_context,
29 const PaymentAppProvider::GetAllManifestsCallback& callback) { 68 const PaymentAppProvider::GetAllManifestsCallback& callback) {
30 DCHECK_CURRENTLY_ON(BrowserThread::IO); 69 DCHECK_CURRENTLY_ON(BrowserThread::IO);
31 70
32 payment_app_context->payment_app_database()->ReadAllManifests( 71 payment_app_context->payment_app_database()->ReadAllManifests(
33 base::Bind(&DidGetAllManifestsOnIO, callback)); 72 base::Bind(&DidGetAllManifestsOnIO, callback));
34 } 73 }
35 74
36 void DidDispatchPaymentRequestEvent( 75 void DidDispatchPaymentRequestEvent(
37 scoped_refptr<ServiceWorkerVersion> active_version, 76 scoped_refptr<ServiceWorkerVersion> active_version,
38 int request_id, 77 int event_finish_id,
39 ServiceWorkerStatusCode service_worker_status, 78 ServiceWorkerStatusCode service_worker_status,
40 base::Time dispatch_event_time) { 79 base::Time dispatch_event_time) {
41 active_version->FinishRequest(request_id, 80 active_version->FinishRequest(event_finish_id,
42 service_worker_status == SERVICE_WORKER_OK, 81 service_worker_status == SERVICE_WORKER_OK,
43 dispatch_event_time); 82 dispatch_event_time);
44 } 83 }
45 84
46 void DispatchPaymentRequestEventError( 85 void DispatchPaymentRequestEventError(
47 ServiceWorkerStatusCode service_worker_status) { 86 ServiceWorkerStatusCode service_worker_status) {
48 NOTIMPLEMENTED(); 87 NOTIMPLEMENTED();
49 } 88 }
50 89
51 void DispatchPaymentRequestEvent( 90 void DispatchPaymentRequestEvent(
52 payments::mojom::PaymentAppRequestPtr app_request, 91 payments::mojom::PaymentAppRequestPtr app_request,
92 const PaymentAppProvider::InvokePaymentAppCallback& callback,
53 scoped_refptr<ServiceWorkerVersion> active_version) { 93 scoped_refptr<ServiceWorkerVersion> active_version) {
54 DCHECK_CURRENTLY_ON(BrowserThread::IO); 94 DCHECK_CURRENTLY_ON(BrowserThread::IO);
55 DCHECK(active_version); 95 DCHECK(active_version);
56 96
57 int request_id = active_version->StartRequest( 97 int event_id = active_version->StartRequest(
shimazu 2017/03/08 01:39:39 |event_id| vs |event_finish_id| seems a bit ambigu
zino 2017/03/19 04:47:23 Done.
58 ServiceWorkerMetrics::EventType::PAYMENT_REQUEST, 98 ServiceWorkerMetrics::EventType::PAYMENT_REQUEST,
59 base::Bind(&DispatchPaymentRequestEventError)); 99 base::Bind(&DispatchPaymentRequestEventError));
100 int event_finish_id = active_version->StartRequest(
101 ServiceWorkerMetrics::EventType::PAYMENT_REQUEST,
102 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
60 103
104 mojom::PaymentAppResponseCallbackPtr response_callback_ptr =
105 ResponseCallback::Create(event_id, active_version, callback);
106 DCHECK(response_callback_ptr);
61 active_version->event_dispatcher()->DispatchPaymentRequestEvent( 107 active_version->event_dispatcher()->DispatchPaymentRequestEvent(
62 std::move(app_request), 108 event_id, std::move(app_request), std::move(response_callback_ptr),
63 base::Bind(&DidDispatchPaymentRequestEvent, active_version, request_id)); 109 base::Bind(&DidDispatchPaymentRequestEvent, active_version,
shimazu 2017/03/08 01:39:39 Could you use active_version->CreateSimpleEventCal
zino 2017/03/19 04:47:23 Done.
110 event_finish_id));
64 } 111 }
65 112
66 void DidFindRegistrationOnIO( 113 void DidFindRegistrationOnIO(
67 payments::mojom::PaymentAppRequestPtr app_request, 114 payments::mojom::PaymentAppRequestPtr app_request,
115 const PaymentAppProvider::InvokePaymentAppCallback& callback,
68 ServiceWorkerStatusCode service_worker_status, 116 ServiceWorkerStatusCode service_worker_status,
69 scoped_refptr<ServiceWorkerRegistration> service_worker_registration) { 117 scoped_refptr<ServiceWorkerRegistration> service_worker_registration) {
70 DCHECK_CURRENTLY_ON(BrowserThread::IO); 118 DCHECK_CURRENTLY_ON(BrowserThread::IO);
71 119
72 if (service_worker_status != SERVICE_WORKER_OK) 120 if (service_worker_status != SERVICE_WORKER_OK)
73 return; 121 return;
74 122
75 ServiceWorkerVersion* active_version = 123 ServiceWorkerVersion* active_version =
76 service_worker_registration->active_version(); 124 service_worker_registration->active_version();
77 DCHECK(active_version); 125 DCHECK(active_version);
78 active_version->RunAfterStartWorker( 126 active_version->RunAfterStartWorker(
79 ServiceWorkerMetrics::EventType::PAYMENT_REQUEST, 127 ServiceWorkerMetrics::EventType::PAYMENT_REQUEST,
80 base::Bind(&DispatchPaymentRequestEvent, 128 base::Bind(&DispatchPaymentRequestEvent,
81 base::Passed(std::move(app_request)), 129 base::Passed(std::move(app_request)), callback,
82 make_scoped_refptr(active_version)), 130 make_scoped_refptr(active_version)),
83 base::Bind(&DispatchPaymentRequestEventError)); 131 base::Bind(&DispatchPaymentRequestEventError));
84 } 132 }
85 133
86 void FindRegistrationOnIO( 134 void FindRegistrationOnIO(
87 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context, 135 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
88 int64_t registration_id, 136 int64_t registration_id,
89 payments::mojom::PaymentAppRequestPtr app_request) { 137 payments::mojom::PaymentAppRequestPtr app_request,
138 const PaymentAppProvider::InvokePaymentAppCallback& callback) {
90 DCHECK_CURRENTLY_ON(BrowserThread::IO); 139 DCHECK_CURRENTLY_ON(BrowserThread::IO);
91 140
92 service_worker_context->FindReadyRegistrationForIdOnly( 141 service_worker_context->FindReadyRegistrationForIdOnly(
93 registration_id, base::Bind(&DidFindRegistrationOnIO, 142 registration_id,
94 base::Passed(std::move(app_request)))); 143 base::Bind(&DidFindRegistrationOnIO, base::Passed(std::move(app_request)),
144 callback));
95 } 145 }
96 146
97 } // namespace 147 } // namespace
98 148
99 // static 149 // static
100 PaymentAppProvider* PaymentAppProvider::GetInstance() { 150 PaymentAppProvider* PaymentAppProvider::GetInstance() {
101 return PaymentAppProviderImpl::GetInstance(); 151 return PaymentAppProviderImpl::GetInstance();
102 } 152 }
103 153
104 // static 154 // static
(...skipping 13 matching lines...) Expand all
118 partition->GetPaymentAppContext(); 168 partition->GetPaymentAppContext();
119 169
120 BrowserThread::PostTask( 170 BrowserThread::PostTask(
121 BrowserThread::IO, FROM_HERE, 171 BrowserThread::IO, FROM_HERE,
122 base::Bind(&GetAllManifestsOnIO, payment_app_context, callback)); 172 base::Bind(&GetAllManifestsOnIO, payment_app_context, callback));
123 } 173 }
124 174
125 void PaymentAppProviderImpl::InvokePaymentApp( 175 void PaymentAppProviderImpl::InvokePaymentApp(
126 BrowserContext* browser_context, 176 BrowserContext* browser_context,
127 int64_t registration_id, 177 int64_t registration_id,
128 payments::mojom::PaymentAppRequestPtr app_request) { 178 payments::mojom::PaymentAppRequestPtr app_request,
179 const InvokePaymentAppCallback& callback) {
129 DCHECK_CURRENTLY_ON(BrowserThread::UI); 180 DCHECK_CURRENTLY_ON(BrowserThread::UI);
130 181
131 StoragePartitionImpl* partition = static_cast<StoragePartitionImpl*>( 182 StoragePartitionImpl* partition = static_cast<StoragePartitionImpl*>(
132 BrowserContext::GetDefaultStoragePartition(browser_context)); 183 BrowserContext::GetDefaultStoragePartition(browser_context));
133 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context = 184 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context =
134 partition->GetServiceWorkerContext(); 185 partition->GetServiceWorkerContext();
135 186
136 BrowserThread::PostTask( 187 BrowserThread::PostTask(
137 BrowserThread::IO, FROM_HERE, 188 BrowserThread::IO, FROM_HERE,
138 base::Bind(&FindRegistrationOnIO, std::move(service_worker_context), 189 base::Bind(&FindRegistrationOnIO, std::move(service_worker_context),
139 registration_id, base::Passed(std::move(app_request)))); 190 registration_id, base::Passed(std::move(app_request)),
191 callback));
140 } 192 }
141 193
142 PaymentAppProviderImpl::PaymentAppProviderImpl() {} 194 PaymentAppProviderImpl::PaymentAppProviderImpl() {}
143 195
144 PaymentAppProviderImpl::~PaymentAppProviderImpl() {} 196 PaymentAppProviderImpl::~PaymentAppProviderImpl() {}
145 197
146 } // namespace content 198 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698