// Copyright 2020 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Next MinVersion: 4 module chromeos.payments.mojom; import "chromeos/components/payments/mojom/payment_app_types.mojom"; // The service that runs in ARC and allows the browser to invoke the TWA payment // app that is installed in ARC, if it implements payment intents as described // in https://web.dev/android-payment-apps-overview/. // // This mojom interface is used in crosapi as well to forward the payment // request from Lacros. // // At first, only "https://play.google.com/billing" payment method is supported. // // Ash Browser: // -------------------- -------------------------------------------------- // | Ash Browser | | ARC | // | | | | // | --------------- | | -------------- ------- ---------------- | // | | Web Payment |<-|------|->| PaymentApp |<-->| TWA |<-->| Play Billing | | // | --------------- | | -------------- ------- ---------------- | // | | | | // -------------------- -------------------------------------------------- // Lacros Browser: // ---------------- ---------------- ----------------------------------------- // | Lacros | | Ash | | ARC | // | Browser | | | | | // |------------- | | ------------ | | ------------ ----- -------------- | // ||Web Payment|<|-|>|PaymentApp|<|-|>|PaymentApp|<->|TWA|<->|Play Billing| | // |------------- | | |Forwarder | | | ------------ ----- -------------- | // | | | ------------ | | | // ---------------- ---------------- ----------------------------------------- // // Next method ID: 3 [Stable, Uuid="5d046348-1f14-4bfe-840b-75bc2c05ef01"] interface PaymentAppInstance { // Called by the browser to check whether the TWA with |package_name| (e.g., // "com.example.app") in ARC has intent filters for // org.chromium.intent.action.PAY and // org.chromium.intent.action.IS_READY_TO_PAY with // "https://play.google.com/billing" in either // "org.chromium.default_payment_method_name" or // "org.chromium.payment_method_names" metadata of the PAY intent filter. // Other payment methods are ignored for now. // // Should not invoke any of the TWA activities or connect to any of its // services, because this method may be invoked when off the record, e.g., // incognito mode or guest mode. IsPaymentImplemented@0(string package_name) => (chromeos.payments.mojom.IsPaymentImplementedResult response); // Forwards the request to IsReadyToPayServiceHelper.query(), which queries // the payment app. The payment app should return true if payments can be // made. This should not be invoked when off the record, e.g., incognito mode // or guest mode. [MinVersion=1] IsReadyToPay@1(chromeos.payments.mojom.PaymentParameters parameters) => (chromeos.payments.mojom.IsReadyToPayResult response); // Forwards the request to WebPaymentIntentHelper.createPayIntent() and fires // the resulting intent. This invokes the payment flow. // // The "String merchantName" parameter to createPayIntent() should be empty // (but not null). // // The total amount for createPayIntent() should always be "0" with currency // "ZZZ". [MinVersion=2] InvokePaymentApp@2(chromeos.payments.mojom.PaymentParameters parameters) => (chromeos.payments.mojom.InvokePaymentAppResult response); // Requests to abort a previous payment flow (identified by |request_token|) // which was opened with InvokePaymentApp(). // // This may be called by the website if a payment should no longer be made // (e.g., when an item goes out of stock), or by the browser if the payment is // no longer available (e.g., the page was refreshed). [MinVersion=3] AbortPaymentApp@3(string request_token) => (bool aborted); };