| Index: content/browser/payments/payment_app_provider_impl.cc
|
| diff --git a/content/browser/payments/payment_app_provider_impl.cc b/content/browser/payments/payment_app_provider_impl.cc
|
| index e2cd3f033f389c37ee25b0ce42d81a45282c40cb..d7faf326d647dc820b339a9c07a2f2d6b34fbd12 100644
|
| --- a/content/browser/payments/payment_app_provider_impl.cc
|
| +++ b/content/browser/payments/payment_app_provider_impl.cc
|
| @@ -10,12 +10,53 @@
|
| #include "content/browser/service_worker/service_worker_version.h"
|
| #include "content/browser/storage_partition_impl.h"
|
| #include "content/common/service_worker/service_worker_status_code.h"
|
| +#include "content/common/service_worker/service_worker_utils.h"
|
| #include "content/public/browser/browser_context.h"
|
| #include "content/public/browser/browser_thread.h"
|
|
|
| +#include "mojo/common/time.mojom.h"
|
| +
|
| namespace content {
|
| namespace {
|
|
|
| +class ResponseCallback : public payments::mojom::PaymentAppResponseCallback {
|
| + public:
|
| + static payments::mojom::PaymentAppResponseCallbackPtr Create(
|
| + int payment_request_id,
|
| + scoped_refptr<ServiceWorkerVersion> service_worker_version,
|
| + const PaymentAppProvider::InvokePaymentAppCallback callback) {
|
| + ResponseCallback* response_callback = new ResponseCallback(
|
| + payment_request_id, std::move(service_worker_version), callback);
|
| + return response_callback->binding_.CreateInterfacePtrAndBind();
|
| + }
|
| + ~ResponseCallback() override {}
|
| +
|
| + void OnPaymentAppResponse(payments::mojom::PaymentAppResponsePtr response,
|
| + base::Time dispatch_event_time) override {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| + service_worker_version_->FinishRequest(payment_request_id_, false,
|
| + std::move(dispatch_event_time));
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI, FROM_HERE,
|
| + base::Bind(callback_, base::Passed(std::move(response))));
|
| + delete this;
|
| + }
|
| +
|
| + private:
|
| + ResponseCallback(int payment_request_id,
|
| + scoped_refptr<ServiceWorkerVersion> service_worker_version,
|
| + const PaymentAppProvider::InvokePaymentAppCallback callback)
|
| + : payment_request_id_(payment_request_id),
|
| + service_worker_version_(service_worker_version),
|
| + callback_(callback),
|
| + binding_(this) {}
|
| +
|
| + int payment_request_id_;
|
| + scoped_refptr<ServiceWorkerVersion> service_worker_version_;
|
| + const PaymentAppProvider::InvokePaymentAppCallback callback_;
|
| + mojo::Binding<payments::mojom::PaymentAppResponseCallback> binding_;
|
| +};
|
| +
|
| void DidGetAllManifestsOnIO(
|
| const PaymentAppProvider::GetAllManifestsCallback& callback,
|
| PaymentAppProvider::Manifests manifests) {
|
| @@ -33,16 +74,6 @@ void GetAllManifestsOnIO(
|
| base::Bind(&DidGetAllManifestsOnIO, callback));
|
| }
|
|
|
| -void DidDispatchPaymentRequestEvent(
|
| - scoped_refptr<ServiceWorkerVersion> active_version,
|
| - int request_id,
|
| - ServiceWorkerStatusCode service_worker_status,
|
| - base::Time dispatch_event_time) {
|
| - active_version->FinishRequest(request_id,
|
| - service_worker_status == SERVICE_WORKER_OK,
|
| - dispatch_event_time);
|
| -}
|
| -
|
| void DispatchPaymentRequestEventError(
|
| ServiceWorkerStatusCode service_worker_status) {
|
| NOTIMPLEMENTED();
|
| @@ -50,21 +81,30 @@ void DispatchPaymentRequestEventError(
|
|
|
| void DispatchPaymentRequestEvent(
|
| payments::mojom::PaymentAppRequestPtr app_request,
|
| + const PaymentAppProvider::InvokePaymentAppCallback& callback,
|
| scoped_refptr<ServiceWorkerVersion> active_version) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| DCHECK(active_version);
|
|
|
| - int request_id = active_version->StartRequest(
|
| + int payment_request_id = active_version->StartRequest(
|
| ServiceWorkerMetrics::EventType::PAYMENT_REQUEST,
|
| base::Bind(&DispatchPaymentRequestEventError));
|
| + int event_finish_id = active_version->StartRequest(
|
| + ServiceWorkerMetrics::EventType::PAYMENT_REQUEST,
|
| + base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
|
|
|
| + payments::mojom::PaymentAppResponseCallbackPtr response_callback_ptr =
|
| + ResponseCallback::Create(payment_request_id, active_version, callback);
|
| + DCHECK(response_callback_ptr);
|
| active_version->event_dispatcher()->DispatchPaymentRequestEvent(
|
| - std::move(app_request),
|
| - base::Bind(&DidDispatchPaymentRequestEvent, active_version, request_id));
|
| + payment_request_id, std::move(app_request),
|
| + std::move(response_callback_ptr),
|
| + active_version->CreateSimpleEventCallback(event_finish_id));
|
| }
|
|
|
| void DidFindRegistrationOnIO(
|
| payments::mojom::PaymentAppRequestPtr app_request,
|
| + const PaymentAppProvider::InvokePaymentAppCallback& callback,
|
| ServiceWorkerStatusCode service_worker_status,
|
| scoped_refptr<ServiceWorkerRegistration> service_worker_registration) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| @@ -78,7 +118,7 @@ void DidFindRegistrationOnIO(
|
| active_version->RunAfterStartWorker(
|
| ServiceWorkerMetrics::EventType::PAYMENT_REQUEST,
|
| base::Bind(&DispatchPaymentRequestEvent,
|
| - base::Passed(std::move(app_request)),
|
| + base::Passed(std::move(app_request)), callback,
|
| make_scoped_refptr(active_version)),
|
| base::Bind(&DispatchPaymentRequestEventError));
|
| }
|
| @@ -86,12 +126,14 @@ void DidFindRegistrationOnIO(
|
| void FindRegistrationOnIO(
|
| scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
|
| int64_t registration_id,
|
| - payments::mojom::PaymentAppRequestPtr app_request) {
|
| + payments::mojom::PaymentAppRequestPtr app_request,
|
| + const PaymentAppProvider::InvokePaymentAppCallback& callback) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
|
|
| service_worker_context->FindReadyRegistrationForIdOnly(
|
| - registration_id, base::Bind(&DidFindRegistrationOnIO,
|
| - base::Passed(std::move(app_request))));
|
| + registration_id,
|
| + base::Bind(&DidFindRegistrationOnIO, base::Passed(std::move(app_request)),
|
| + callback));
|
| }
|
|
|
| } // namespace
|
| @@ -125,7 +167,8 @@ void PaymentAppProviderImpl::GetAllManifests(
|
| void PaymentAppProviderImpl::InvokePaymentApp(
|
| BrowserContext* browser_context,
|
| int64_t registration_id,
|
| - payments::mojom::PaymentAppRequestPtr app_request) {
|
| + payments::mojom::PaymentAppRequestPtr app_request,
|
| + const InvokePaymentAppCallback& callback) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
|
|
| StoragePartitionImpl* partition = static_cast<StoragePartitionImpl*>(
|
| @@ -136,7 +179,8 @@ void PaymentAppProviderImpl::InvokePaymentApp(
|
| BrowserThread::PostTask(
|
| BrowserThread::IO, FROM_HERE,
|
| base::Bind(&FindRegistrationOnIO, std::move(service_worker_context),
|
| - registration_id, base::Passed(std::move(app_request))));
|
| + registration_id, base::Passed(std::move(app_request)),
|
| + callback));
|
| }
|
|
|
| PaymentAppProviderImpl::PaymentAppProviderImpl() {}
|
|
|