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 c4b51fb99a0920dfd06c7cd1fb8d61bc40513075..eaada81efd037409e75908d478fd01c8172f63e2 100644 |
--- a/content/renderer/service_worker/service_worker_context_client.cc |
+++ b/content/renderer/service_worker/service_worker_context_client.cc |
@@ -54,6 +54,7 @@ |
#include "third_party/WebKit/public/platform/WebSecurityOrigin.h" |
#include "third_party/WebKit/public/platform/WebString.h" |
#include "third_party/WebKit/public/platform/modules/notifications/WebNotificationData.h" |
+#include "third_party/WebKit/public/platform/modules/payments/WebPaymentAppRequestData.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" |
@@ -63,6 +64,19 @@ |
#include "third_party/WebKit/public/web/modules/serviceworker/WebServiceWorkerContextProxy.h" |
#include "third_party/WebKit/public/web/modules/serviceworker/WebServiceWorkerNetworkProvider.h" |
+namespace mojo { |
+ |
+template <> |
+struct TypeConverter<blink::WebPaymentAppRequestData, |
+ payments::mojom::PaymentAppRequestDataPtr> { |
+ static blink::WebPaymentAppRequestData Convert( |
+ const payments::mojom::PaymentAppRequestDataPtr& input) { |
+ blink::WebPaymentAppRequestData output; |
+ return output; |
+ } |
+}; |
+} |
+ |
namespace content { |
namespace { |
@@ -179,6 +193,8 @@ struct ServiceWorkerContextClient::WorkerContextData { |
using SkipWaitingCallbacksMap = |
IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; |
using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; |
+ using PaymentRequestEventCallbacksMap = |
+ IDMap<std::unique_ptr<const PaymentRequestEventCallback>>; |
using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>; |
using ExtendableMessageEventCallbacksMap = |
IDMap<std::unique_ptr<const DispatchExtendableMessageEventCallback>>; |
@@ -211,6 +227,9 @@ struct ServiceWorkerContextClient::WorkerContextData { |
// Pending callbacks for Background Sync Events. |
SyncEventCallbacksMap sync_event_callbacks; |
+ // Pending callbacks for Payment Request Events. |
+ PaymentRequestEventCallbacksMap payment_request_event_callbacks; |
+ |
// Pending callbacks for Fetch Events. |
FetchEventCallbacksMap fetch_event_callbacks; |
@@ -902,6 +921,21 @@ void ServiceWorkerContextClient::DispatchSyncEvent( |
web_last_chance); |
} |
+void ServiceWorkerContextClient::DispatchPaymentRequestEvent( |
+ payments::mojom::PaymentAppRequestDataPtr data, |
+ const DispatchPaymentRequestEventCallback& callback) { |
+ TRACE_EVENT0("ServiceWorker", |
+ "ServiceWorkerContextClient::DispatchPaymentRequestEvent"); |
+ int request_id = context_->payment_request_event_callbacks.Add( |
+ base::MakeUnique<PaymentRequestEventCallback>(callback)); |
+ |
+ // TODO(zino): Use typemap when this is moved to blink-side. |
+ blink::WebPaymentAppRequestData webData = |
+ mojo::ConvertTo<blink::WebPaymentAppRequestData>(std::move(data)); |
+ |
+ proxy_->dispatchPaymentRequestEvent(request_id, webData); |
+} |
+ |
void ServiceWorkerContextClient::Send(IPC::Message* message) { |
sender_->Send(message); |
} |