 Chromium Code Reviews
 Chromium Code Reviews Issue 2718013004:
  PaymentApp: Implement respondWith() in PaymentRequestEvent. (content side)  (Closed)
    
  
    Issue 2718013004:
  PaymentApp: Implement respondWith() in PaymentRequestEvent. (content side)  (Closed) 
  | 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() {} |