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

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

Issue 2718013004: PaymentApp: Implement respondWith() in PaymentRequestEvent. (content side) (Closed)
Patch Set: PaymentApp: Implement respondWith() in PaymentRequestEvent. (content side) 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 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) {

Powered by Google App Engine
This is Rietveld 408576698