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 838a19b4e2ae3d161a2dc0d9e10c1fe307ab95fb..ae8de4be3b3e2f7b3b752d66cbc6311223990e1b 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/WebServiceWorkerNetworkProvider.h" |
| @@ -187,8 +188,6 @@ struct ServiceWorkerContextClient::WorkerContextData { |
| using ActivateEventCallbacksMap = |
| IDMap<std::unique_ptr<const DispatchActivateEventCallback>>; |
| using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; |
| - using PaymentRequestEventCallbacksMap = |
| - IDMap<std::unique_ptr<const PaymentRequestEventCallback>>; |
| using NotificationClickEventCallbacksMap = |
| IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>; |
| using NotificationCloseEventCallbacksMap = |
| @@ -230,8 +229,15 @@ struct ServiceWorkerContextClient::WorkerContextData { |
| // Pending callbacks for Background Sync Events. |
| SyncEventCallbacksMap sync_event_callbacks; |
| + // Pending callbacks for Payment App Response. |
| + std::map<int /* payment_request_id */, |
| + payments::mojom::PaymentAppResponseCallbackPtr> |
| + payment_response_callbacks; |
| + |
| // Pending callbacks for Payment Request Events. |
| - PaymentRequestEventCallbacksMap payment_request_event_callbacks; |
| + std::map<int /* payment_request_id */, |
| + const DispatchPaymentRequestEventCallback> |
| + payment_request_event_callbacks; |
| // Pending callbacks for Notification Click Events. |
| NotificationClickEventCallbacksMap notification_click_event_callbacks; |
| @@ -773,16 +779,29 @@ void ServiceWorkerContextClient::didHandleSyncEvent( |
| context_->sync_event_callbacks.Remove(request_id); |
| } |
| +void ServiceWorkerContextClient::respondToPaymentRequestEvent( |
| + int payment_request_id, |
| + const blink::WebPaymentAppResponse& web_response, |
| + double dispatch_event_time) { |
| + const payments::mojom::PaymentAppResponseCallbackPtr& response_callback = |
| + context_->payment_response_callbacks[payment_request_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.erase(payment_request_id); |
| +} |
| + |
| void ServiceWorkerContextClient::didHandlePaymentRequestEvent( |
| - int request_id, |
| + int payment_request_id, |
| blink::WebServiceWorkerEventResult result, |
| double event_dispatch_time) { |
| - const PaymentRequestEventCallback* callback = |
| - context_->payment_request_event_callbacks.Lookup(request_id); |
| - DCHECK(callback); |
| - callback->Run(EventResultToStatus(result), |
| - base::Time::FromDoubleT(event_dispatch_time)); |
| - context_->payment_request_event_callbacks.Remove(request_id); |
| + const DispatchPaymentRequestEventCallback& callback = |
| + context_->payment_request_event_callbacks[payment_request_id]; |
| + callback.Run(EventResultToStatus(result), |
| + base::Time::FromDoubleT(event_dispatch_time)); |
| + context_->payment_request_event_callbacks.erase(payment_request_id); |
| } |
| blink::WebServiceWorkerNetworkProvider* |
| @@ -886,13 +905,20 @@ void ServiceWorkerContextClient::DispatchSyncEvent( |
| } |
| void ServiceWorkerContextClient::DispatchPaymentRequestEvent( |
| + int payment_request_id, |
| payments::mojom::PaymentAppRequestPtr app_request, |
| + payments::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.insert( |
| + std::make_pair(payment_request_id, std::move(response_callback))); |
| + context_->payment_request_event_callbacks.insert( |
| + std::make_pair(payment_request_id, std::move(callback))); |
|
nhiroki
2017/03/22 02:19:15
It looks strange that std::move() is used for cons
zino
2017/03/22 18:04:45
Done.
|
| + |
| blink::WebPaymentAppRequest webAppRequest = |
| mojo::ConvertTo<blink::WebPaymentAppRequest>(std::move(app_request)); |
| - proxy_->dispatchPaymentRequestEvent(request_id, webAppRequest); |
| + proxy_->dispatchPaymentRequestEvent(payment_request_id, webAppRequest); |
| } |
| void ServiceWorkerContextClient::Send(IPC::Message* message) { |