Chromium Code Reviews| Index: content/browser/payments/payment_app_provider_impl.cc |
| diff --git a/content/browser/payments/payment_app_provider_impl.cc b/content/browser/payments/payment_app_provider_impl.cc |
| index e2cd3f033f389c37ee25b0ce42d81a45282c40cb..ada4390e507ad470cd41279c1ad2463402648a9f 100644 |
| --- a/content/browser/payments/payment_app_provider_impl.cc |
| +++ b/content/browser/payments/payment_app_provider_impl.cc |
| @@ -10,12 +10,51 @@ |
| #include "content/browser/service_worker/service_worker_version.h" |
| #include "content/browser/storage_partition_impl.h" |
| #include "content/common/service_worker/service_worker_status_code.h" |
| +#include "content/common/service_worker/service_worker_utils.h" |
| #include "content/public/browser/browser_context.h" |
| #include "content/public/browser/browser_thread.h" |
| namespace content { |
| namespace { |
| +class ResponseCallback : public mojom::PaymentAppResponseCallback { |
| + public: |
| + static mojom::PaymentAppResponseCallbackPtr Create( |
| + int event_id, |
| + scoped_refptr<ServiceWorkerVersion> service_worker_version, |
| + const PaymentAppProvider::InvokePaymentAppCallback callback) { |
| + ResponseCallback* response_callback = new ResponseCallback( |
| + event_id, std::move(service_worker_version), callback); |
| + return response_callback->binding_.CreateInterfacePtrAndBind(); |
| + } |
| + ~ResponseCallback() override {} |
| + |
| + void OnPaymentAppResponse(payments::mojom::PaymentAppResponsePtr response, |
| + base::Time dispatch_event_time) override { |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + service_worker_version_->FinishRequest(event_id_, false, |
| + dispatch_event_time); |
| + BrowserThread::PostTask( |
| + BrowserThread::UI, FROM_HERE, |
| + base::Bind(callback_, base::Passed(std::move(response)))); |
| + delete this; |
| + } |
| + |
| + private: |
| + ResponseCallback(int event_id, |
| + scoped_refptr<ServiceWorkerVersion> service_worker_version, |
| + const PaymentAppProvider::InvokePaymentAppCallback callback) |
| + : event_id_(event_id), |
| + service_worker_version_(service_worker_version), |
| + callback_(callback), |
| + binding_(this) {} |
| + |
| + int event_id_; |
| + scoped_refptr<ServiceWorkerVersion> service_worker_version_; |
| + const PaymentAppProvider::InvokePaymentAppCallback callback_; |
| + mojo::Binding<mojom::PaymentAppResponseCallback> binding_; |
| +}; |
| + |
| void DidGetAllManifestsOnIO( |
| const PaymentAppProvider::GetAllManifestsCallback& callback, |
| PaymentAppProvider::Manifests manifests) { |
| @@ -35,10 +74,10 @@ void GetAllManifestsOnIO( |
| void DidDispatchPaymentRequestEvent( |
| scoped_refptr<ServiceWorkerVersion> active_version, |
| - int request_id, |
| + int event_finish_id, |
| ServiceWorkerStatusCode service_worker_status, |
| base::Time dispatch_event_time) { |
| - active_version->FinishRequest(request_id, |
| + active_version->FinishRequest(event_finish_id, |
| service_worker_status == SERVICE_WORKER_OK, |
| dispatch_event_time); |
| } |
| @@ -50,21 +89,30 @@ void DispatchPaymentRequestEventError( |
| void DispatchPaymentRequestEvent( |
| payments::mojom::PaymentAppRequestPtr app_request, |
| + const PaymentAppProvider::InvokePaymentAppCallback& callback, |
| scoped_refptr<ServiceWorkerVersion> active_version) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| DCHECK(active_version); |
| - int request_id = active_version->StartRequest( |
| + 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.
|
| ServiceWorkerMetrics::EventType::PAYMENT_REQUEST, |
| base::Bind(&DispatchPaymentRequestEventError)); |
| + int event_finish_id = active_version->StartRequest( |
| + ServiceWorkerMetrics::EventType::PAYMENT_REQUEST, |
| + base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| + mojom::PaymentAppResponseCallbackPtr response_callback_ptr = |
| + ResponseCallback::Create(event_id, active_version, callback); |
| + DCHECK(response_callback_ptr); |
| active_version->event_dispatcher()->DispatchPaymentRequestEvent( |
| - std::move(app_request), |
| - base::Bind(&DidDispatchPaymentRequestEvent, active_version, request_id)); |
| + event_id, std::move(app_request), std::move(response_callback_ptr), |
| + 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.
|
| + event_finish_id)); |
| } |
| void DidFindRegistrationOnIO( |
| payments::mojom::PaymentAppRequestPtr app_request, |
| + const PaymentAppProvider::InvokePaymentAppCallback& callback, |
| ServiceWorkerStatusCode service_worker_status, |
| scoped_refptr<ServiceWorkerRegistration> service_worker_registration) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| @@ -78,7 +126,7 @@ void DidFindRegistrationOnIO( |
| active_version->RunAfterStartWorker( |
| ServiceWorkerMetrics::EventType::PAYMENT_REQUEST, |
| base::Bind(&DispatchPaymentRequestEvent, |
| - base::Passed(std::move(app_request)), |
| + base::Passed(std::move(app_request)), callback, |
| make_scoped_refptr(active_version)), |
| base::Bind(&DispatchPaymentRequestEventError)); |
| } |
| @@ -86,12 +134,14 @@ void DidFindRegistrationOnIO( |
| void FindRegistrationOnIO( |
| scoped_refptr<ServiceWorkerContextWrapper> service_worker_context, |
| int64_t registration_id, |
| - payments::mojom::PaymentAppRequestPtr app_request) { |
| + payments::mojom::PaymentAppRequestPtr app_request, |
| + const PaymentAppProvider::InvokePaymentAppCallback& callback) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| service_worker_context->FindReadyRegistrationForIdOnly( |
| - registration_id, base::Bind(&DidFindRegistrationOnIO, |
| - base::Passed(std::move(app_request)))); |
| + registration_id, |
| + base::Bind(&DidFindRegistrationOnIO, base::Passed(std::move(app_request)), |
| + callback)); |
| } |
| } // namespace |
| @@ -125,7 +175,8 @@ void PaymentAppProviderImpl::GetAllManifests( |
| void PaymentAppProviderImpl::InvokePaymentApp( |
| BrowserContext* browser_context, |
| int64_t registration_id, |
| - payments::mojom::PaymentAppRequestPtr app_request) { |
| + payments::mojom::PaymentAppRequestPtr app_request, |
| + const InvokePaymentAppCallback& callback) { |
| DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| StoragePartitionImpl* partition = static_cast<StoragePartitionImpl*>( |
| @@ -136,7 +187,8 @@ void PaymentAppProviderImpl::InvokePaymentApp( |
| BrowserThread::PostTask( |
| BrowserThread::IO, FROM_HERE, |
| base::Bind(&FindRegistrationOnIO, std::move(service_worker_context), |
| - registration_id, base::Passed(std::move(app_request)))); |
| + registration_id, base::Passed(std::move(app_request)), |
| + callback)); |
| } |
| PaymentAppProviderImpl::PaymentAppProviderImpl() {} |