Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1811)

Unified Diff: content/renderer/service_worker/service_worker_context_client.cc

Issue 2718013004: PaymentApp: Implement respondWith() in PaymentRequestEvent. (content side) (Closed)
Patch Set: rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 b29686eb93cb369b8f74bfccd49c854b5700b268..fb363187fd6025eb3ab42b8b37c010d254d11037 100644
--- a/content/renderer/service_worker/service_worker_context_client.cc
+++ b/content/renderer/service_worker/service_worker_context_client.cc
@@ -60,6 +60,7 @@
#include "third_party/WebKit/public/platform/modules/background_fetch/WebBackgroundFetchSettledFetch.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"
@@ -266,8 +267,6 @@ struct ServiceWorkerContextClient::WorkerContextData {
using BackgroundFetchedEventCallbacksMap =
IDMap<std::unique_ptr<const DispatchBackgroundFetchedEventCallback>>;
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 =
@@ -321,8 +320,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;
@@ -915,16 +921,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*
@@ -1028,13 +1047,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, callback));
+
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) {
« no previous file with comments | « content/renderer/service_worker/service_worker_context_client.h ('k') | content/test/data/payments/payment_app.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698