Chromium Code Reviews| Index: content/renderer/service_worker/service_worker_context_client.cc |
| diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc |
| index babd858683d03a2c59cc7499b4e784554a2dbe72..8590d768e80aa4bdbe1b0eb5e83abbbc5608f256 100644 |
| --- a/content/renderer/service_worker/service_worker_context_client.cc |
| +++ b/content/renderer/service_worker/service_worker_context_client.cc |
| @@ -59,6 +59,7 @@ |
| #include "third_party/WebKit/public/platform/WebURLResponse.h" |
| #include "third_party/WebKit/public/platform/modules/notifications/WebNotificationData.h" |
| #include "third_party/WebKit/public/platform/modules/payments/WebPaymentAppRequest.h" |
| +#include "third_party/WebKit/public/platform/modules/payments/WebPaymentAppResponse.h" |
| #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerClientQueryOptions.h" |
| #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerError.h" |
| #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerRequest.h" |
| @@ -196,8 +197,10 @@ struct ServiceWorkerContextClient::WorkerContextData { |
| using ActivateEventCallbacksMap = |
| IDMap<std::unique_ptr<const DispatchActivateEventCallback>>; |
| using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; |
| + using PaymentResponseCallbacksMap = |
| + IDMap<std::unique_ptr<mojom::PaymentAppResponseCallbackPtr>>; |
|
shimazu
2017/03/08 01:39:40
IDMap was originally used here, but now we can use
zino
2017/03/19 04:47:23
Done.
|
| using PaymentRequestEventCallbacksMap = |
| - IDMap<std::unique_ptr<const PaymentRequestEventCallback>>; |
| + IDMap<std::unique_ptr<const DispatchPaymentRequestEventCallback>>; |
| using NotificationClickEventCallbacksMap = |
| IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>; |
| using NotificationCloseEventCallbacksMap = |
| @@ -239,6 +242,9 @@ struct ServiceWorkerContextClient::WorkerContextData { |
| // Pending callbacks for Background Sync Events. |
| SyncEventCallbacksMap sync_event_callbacks; |
| + // Pending callbacks for Payment App Response. |
| + PaymentResponseCallbacksMap payment_response_callbacks; |
| + |
| // Pending callbacks for Payment Request Events. |
| PaymentRequestEventCallbacksMap payment_request_event_callbacks; |
| @@ -782,16 +788,31 @@ void ServiceWorkerContextClient::didHandleSyncEvent( |
| context_->sync_event_callbacks.Remove(request_id); |
| } |
| +void ServiceWorkerContextClient::respondToPaymentRequestEvent( |
| + int event_id, |
|
shimazu
2017/03/08 01:39:40
|payment_request_id|
zino
2017/03/19 04:47:23
Done.
|
| + const blink::WebPaymentAppResponse& web_response, |
| + double dispatch_event_time) { |
| + mojom::PaymentAppResponseCallbackPtr* response_callback = |
| + context_->payment_response_callbacks.Lookup(event_id); |
| + payments::mojom::PaymentAppResponsePtr response = |
| + payments::mojom::PaymentAppResponse::New(); |
| + response->method_name = web_response.methodName.utf8(); |
| + (*response_callback) |
| + ->OnPaymentAppResponse(std::move(response), |
| + base::Time::FromDoubleT(dispatch_event_time)); |
| + context_->payment_response_callbacks.Remove(event_id); |
| +} |
| + |
| void ServiceWorkerContextClient::didHandlePaymentRequestEvent( |
| - int request_id, |
| + int event_id, |
| blink::WebServiceWorkerEventResult result, |
| double event_dispatch_time) { |
| - const PaymentRequestEventCallback* callback = |
| - context_->payment_request_event_callbacks.Lookup(request_id); |
| + const DispatchPaymentRequestEventCallback* callback = |
| + context_->payment_request_event_callbacks.Lookup(event_id); |
| DCHECK(callback); |
| callback->Run(EventResultToStatus(result), |
| base::Time::FromDoubleT(event_dispatch_time)); |
| - context_->payment_request_event_callbacks.Remove(request_id); |
| + context_->payment_request_event_callbacks.Remove(event_id); |
| } |
| blink::WebServiceWorkerNetworkProvider* |
| @@ -903,13 +924,23 @@ void ServiceWorkerContextClient::DispatchSyncEvent( |
| } |
| void ServiceWorkerContextClient::DispatchPaymentRequestEvent( |
| + int event_id, |
|
shimazu
2017/03/08 01:39:39
|payment_request_id|
zino
2017/03/19 04:47:23
Done.
|
| payments::mojom::PaymentAppRequestPtr app_request, |
| + mojom::PaymentAppResponseCallbackPtr response_callback, |
| const DispatchPaymentRequestEventCallback& callback) { |
| - int request_id = context_->payment_request_event_callbacks.Add( |
| - base::MakeUnique<PaymentRequestEventCallback>(callback)); |
| + TRACE_EVENT0("ServiceWorker", |
| + "ServiceWorkerContextClient::DispatchPaymentRequestEvent"); |
| + context_->payment_response_callbacks.AddWithID( |
| + base::MakeUnique<mojom::PaymentAppResponseCallbackPtr>( |
| + std::move(response_callback)), |
| + event_id); |
| + context_->payment_request_event_callbacks.AddWithID( |
| + base::MakeUnique<DispatchPaymentRequestEventCallback>(callback), |
| + event_id); |
| + |
| blink::WebPaymentAppRequest webAppRequest = |
| mojo::ConvertTo<blink::WebPaymentAppRequest>(std::move(app_request)); |
| - proxy_->dispatchPaymentRequestEvent(request_id, webAppRequest); |
| + proxy_->dispatchPaymentRequestEvent(event_id, webAppRequest); |
| } |
| void ServiceWorkerContextClient::Send(IPC::Message* message) { |