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) { |