diff --git a/components/payments/BUILD.gn b/components/payments/BUILD.gn index 22ae52831cd118..bbdd5f599ccf8d 100644 --- a/components/payments/BUILD.gn +++ b/components/payments/BUILD.gn @@ -20,7 +20,9 @@ mojom("payment_app") { ] public_deps = [ + ":payment_request", "//mojo/common:common_custom_types", + "//url/mojo:url_mojom_gurl", ] } diff --git a/components/payments/payment_app.mojom b/components/payments/payment_app.mojom index a12d53bd3af3db..a3e9715b769427 100644 --- a/components/payments/payment_app.mojom +++ b/components/payments/payment_app.mojom @@ -4,6 +4,9 @@ module payments.mojom; +import "components/payments/payment_request.mojom"; +import "url/mojo/url.mojom"; + enum PaymentAppManifestError { NONE, NOT_IMPLEMENTED, @@ -31,3 +34,11 @@ interface PaymentAppManager { GetManifest() => (PaymentAppManifest payment_app_manifest, PaymentAppManifestError error); }; + +struct PaymentAppRequestData { + url.mojom.Url origin; + array methodData; + PaymentItem total; + array modifiers; + string optionId; +}; diff --git a/content/browser/payments/payment_app_provider_impl.cc b/content/browser/payments/payment_app_provider_impl.cc index 0d88e87924f453..5f90d1c5d65ce0 100644 --- a/content/browser/payments/payment_app_provider_impl.cc +++ b/content/browser/payments/payment_app_provider_impl.cc @@ -57,6 +57,13 @@ void PaymentAppProviderImpl::GetAllManifests( base::Bind(&GetAllManifestsOnIO, payment_app_context, callback)); } +void PaymentAppProviderImpl::InvokePaymentApp( + BrowserContext* browser_context, + int64_t registration_id, + payments::mojom::PaymentAppRequestDataPtr data) { + NOTIMPLEMENTED(); +} + PaymentAppProviderImpl::PaymentAppProviderImpl() {} PaymentAppProviderImpl::~PaymentAppProviderImpl() {} diff --git a/content/browser/payments/payment_app_provider_impl.h b/content/browser/payments/payment_app_provider_impl.h index 127e181eef875d..5a5a1285eb73d2 100644 --- a/content/browser/payments/payment_app_provider_impl.h +++ b/content/browser/payments/payment_app_provider_impl.h @@ -25,6 +25,10 @@ class CONTENT_EXPORT PaymentAppProviderImpl : public PaymentAppProvider { // Should be accessed only on the UI thread. void GetAllManifests(BrowserContext* browser_context, const GetAllManifestsCallback& callback) override; + void InvokePaymentApp( + BrowserContext* browser_context, + int64_t registration_id, + payments::mojom::PaymentAppRequestDataPtr data) override; private: PaymentAppProviderImpl(); diff --git a/content/browser/service_worker/embedded_worker_test_helper.cc b/content/browser/service_worker/embedded_worker_test_helper.cc index 0ef41277a3ae06..b2f802133e3304 100644 --- a/content/browser/service_worker/embedded_worker_test_helper.cc +++ b/content/browser/service_worker/embedded_worker_test_helper.cc @@ -186,6 +186,12 @@ class EmbeddedWorkerTestHelper::MockServiceWorkerEventDispatcher NOTIMPLEMENTED(); } + void DispatchPaymentRequestEvent( + payments::mojom::PaymentAppRequestDataPtr data, + const DispatchPaymentRequestEventCallback& callback) override { + NOTIMPLEMENTED(); + } + void DispatchExtendableMessageEvent( mojom::ExtendableMessageEventPtr event, const DispatchExtendableMessageEventCallback& callback) override { diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn index 0d16324720b518..e4f12fc03d3ce0 100644 --- a/content/common/BUILD.gn +++ b/content/common/BUILD.gn @@ -354,6 +354,7 @@ source_set("common") { "//cc/ipc", "//cc/surfaces", "//components/discardable_memory/common", + "//components/payments:payment_app", "//components/tracing", "//components/tracing:startup_tracing", "//content:resources", diff --git a/content/common/service_worker/service_worker_event_dispatcher.mojom b/content/common/service_worker/service_worker_event_dispatcher.mojom index d878916e6a84a8..df445a8052fc78 100644 --- a/content/common/service_worker/service_worker_event_dispatcher.mojom +++ b/content/common/service_worker/service_worker_event_dispatcher.mojom @@ -4,6 +4,7 @@ module content.mojom; +import "components/payments/payment_app.mojom"; import "content/common/url_loader.mojom"; import "mojo/common/string16.mojom"; import "mojo/common/time.mojom"; @@ -45,6 +46,9 @@ interface ServiceWorkerEventDispatcher { blink.mojom.BackgroundSyncEventLastChance last_chance) => (blink.mojom.ServiceWorkerEventStatus status, mojo.common.mojom.Time dispatch_event_time); + DispatchPaymentRequestEvent(payments.mojom.PaymentAppRequestData data) + => (blink.mojom.ServiceWorkerEventStatus status, + mojo.common.mojom.Time dispatch_event_time); DispatchExtendableMessageEvent(ExtendableMessageEvent event) => (blink.mojom.ServiceWorkerEventStatus status, mojo.common.mojom.Time dispatch_event_time); diff --git a/content/public/browser/payment_app_provider.h b/content/public/browser/payment_app_provider.h index 022e8c655ddbb1..b772e8b2e1870e 100644 --- a/content/public/browser/payment_app_provider.h +++ b/content/public/browser/payment_app_provider.h @@ -35,6 +35,10 @@ class CONTENT_EXPORT PaymentAppProvider { // Should be accessed only on the UI thread. virtual void GetAllManifests(BrowserContext* browser_context, const GetAllManifestsCallback& callback) = 0; + virtual void InvokePaymentApp( + BrowserContext* browser_context, + int64_t registration_id, + payments::mojom::PaymentAppRequestDataPtr data) = 0; protected: virtual ~PaymentAppProvider() {} diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn index 773f254483eac0..bd57ea2d692776 100644 --- a/content/renderer/BUILD.gn +++ b/content/renderer/BUILD.gn @@ -404,6 +404,7 @@ target(link_target_type, "renderer") { "//cc/surfaces:surface_id", "//cc/surfaces:surfaces", "//components/discardable_memory/client", + "//components/payments:payment_app", "//components/url_formatter", "//content:resources", "//content/child", diff --git a/content/renderer/DEPS b/content/renderer/DEPS index c5de582175bbd4..98c4ec955fd0a7 100644 --- a/content/renderer/DEPS +++ b/content/renderer/DEPS @@ -2,6 +2,7 @@ include_rules = [ # Allow inclusion of specific components that we depend on. # See comment in content/DEPS for which components are allowed. "+components/discardable_memory/client", + "+components/payments", "+components/scheduler", "+components/url_formatter", diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc index 715a35eab81fc5..43a660e2c9cd4f 100644 --- a/content/renderer/service_worker/service_worker_context_client.cc +++ b/content/renderer/service_worker/service_worker_context_client.cc @@ -904,6 +904,12 @@ void ServiceWorkerContextClient::DispatchSyncEvent( web_last_chance); } +void ServiceWorkerContextClient::DispatchPaymentRequestEvent( + payments::mojom::PaymentAppRequestDataPtr data, + const DispatchPaymentRequestEventCallback& callback) { + NOTIMPLEMENTED(); +} + void ServiceWorkerContextClient::Send(IPC::Message* message) { sender_->Send(message); } diff --git a/content/renderer/service_worker/service_worker_context_client.h b/content/renderer/service_worker/service_worker_context_client.h index 2686e316ac8aed..4bbcc3277959d1 100644 --- a/content/renderer/service_worker/service_worker_context_client.h +++ b/content/renderer/service_worker/service_worker_context_client.h @@ -19,6 +19,7 @@ #include "base/memory/ref_counted.h" #include "base/strings/string16.h" #include "base/time/time.h" +#include "components/payments/payment_app.mojom.h" #include "content/child/webmessageportchannel_impl.h" #include "content/common/service_worker/service_worker_event_dispatcher.mojom.h" #include "content/common/service_worker/service_worker_status_code.h" @@ -68,6 +69,9 @@ class ServiceWorkerContextClient : public blink::WebServiceWorkerContextClient, using SyncCallback = base::Callback; + using PaymentRequestEventCallback = + base::Callback; using FetchCallback = base::Callback; @@ -224,6 +228,9 @@ class ServiceWorkerContextClient : public blink::WebServiceWorkerContextClient, const std::string& tag, blink::mojom::BackgroundSyncEventLastChance last_chance, const DispatchSyncEventCallback& callback) override; + void DispatchPaymentRequestEvent( + payments::mojom::PaymentAppRequestDataPtr data, + const DispatchPaymentRequestEventCallback& callback) override; void OnActivateEvent(int request_id); void OnInstallEvent(int request_id); diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 1fd0646b30693e..0dbf9fef9f889f 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn @@ -1406,6 +1406,7 @@ test("content_unittests") { "//components/display_compositor", "//components/leveldb/public/cpp", "//components/payments:payment_app", + "//components/payments:payment_request", "//components/rappor:test_support", "//content:resources", "//content/app:both_for_content_tests",