summaryrefslogtreecommitdiffstats
path: root/dom/interfaces/payments
diff options
context:
space:
mode:
Diffstat (limited to 'dom/interfaces/payments')
-rw-r--r--dom/interfaces/payments/moz.build15
-rw-r--r--dom/interfaces/payments/nsIPaymentActionResponse.idl406
-rw-r--r--dom/interfaces/payments/nsIPaymentAddress.idl43
-rw-r--r--dom/interfaces/payments/nsIPaymentRequest.idl93
-rw-r--r--dom/interfaces/payments/nsIPaymentRequestService.idl102
-rw-r--r--dom/interfaces/payments/nsIPaymentUIService.idl85
6 files changed, 744 insertions, 0 deletions
diff --git a/dom/interfaces/payments/moz.build b/dom/interfaces/payments/moz.build
new file mode 100644
index 0000000000..f7e1229a82
--- /dev/null
+++ b/dom/interfaces/payments/moz.build
@@ -0,0 +1,15 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+XPIDL_SOURCES += [
+ "nsIPaymentActionResponse.idl",
+ "nsIPaymentAddress.idl",
+ "nsIPaymentRequest.idl",
+ "nsIPaymentRequestService.idl",
+ "nsIPaymentUIService.idl",
+]
+
+XPIDL_MODULE = "dom_payments"
diff --git a/dom/interfaces/payments/nsIPaymentActionResponse.idl b/dom/interfaces/payments/nsIPaymentActionResponse.idl
new file mode 100644
index 0000000000..36d5be3b94
--- /dev/null
+++ b/dom/interfaces/payments/nsIPaymentActionResponse.idl
@@ -0,0 +1,406 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsISupports.idl"
+#include "nsIVariant.idl"
+#include "nsIPaymentAddress.idl"
+
+/**
+ * The base interface of response data for the specified payment method.
+ * The response data is the content of the PaymentResponse's detail attribute.
+ */
+[builtinclass, scriptable, uuid(2a338575-c688-40ee-a157-7488ab292ef2)]
+interface nsIPaymentResponseData: nsISupports
+{
+ /**
+ * The consts for representing the response data type.
+ * GENERAL_RESPONSE is the general purpose response data type. Except basic
+ * card response data, all response data should belong to this type.
+ * BASICCARD_RESPONSE is a special response data type for basic card response.
+ */
+ const uint32_t GENERAL_RESPONSE = 0;
+ const uint32_t BASICCARD_RESPONSE = 1;
+
+ /**
+ * The response data type.
+ * Using the above defined consts(GENERAL_RESPONSE or BASICCARD_RESPONSE).
+ */
+ readonly attribute uint32_t type;
+
+ /**
+ * The initial method.
+ * @param aType - the response data type.
+ */
+ void init(in uint32_t aType);
+};
+
+/**
+ * The general purpose response data.
+ */
+[builtinclass, scriptable, uuid(b986773e-2b30-4ed2-b8fe-6a96631c8000)]
+interface nsIGeneralResponseData : nsIPaymentResponseData
+{
+ /**
+ * The stringified response data.
+ */
+ readonly attribute AString data;
+
+ /**
+ * The initial method for nsIGeneralResponseData.
+ * @param aData - the javascript object of the content.
+ */
+ [implicit_jscontext]
+ void initData(in jsval aData);
+};
+
+/**
+ * The basic card response data.
+ * Since PaymentAddress is an no constructor interface type, UI code can not
+ * easy create PaymentAddress by calling new PaymentAddress().
+ * Unfortunately, BasicCardResponse has a PaymentAddress attribute, billingAddress
+ * , it means UI can not create BsaicCardResponse by calling the init() with a
+ * given JSObject directly, because PaymentAddress creation in JS code is hard.
+ * To let UI code can create BasicCardResponse easier, nsIBasicCardResponse is
+ * provided for UI by passing the raw data of BasicCardResponse,
+ */
+[builtinclass, scriptable, uuid(0d55a5e6-d185-44f0-b992-a8e1321e4bce)]
+interface nsIBasicCardResponseData : nsIPaymentResponseData
+{
+ /**
+ * The cardholder name.
+ */
+ readonly attribute AString cardholderName;
+
+ /**
+ * The card number.
+ */
+ readonly attribute AString cardNumber;
+
+ /**
+ * The expiry month.
+ */
+ readonly attribute AString expiryMonth;
+
+ /**
+ * The expiry year.
+ */
+ readonly attribute AString expiryYear;
+
+ /**
+ * The card security number.
+ */
+ readonly attribute AString cardSecurityCode;
+
+ /**
+ * The billing address.
+ */
+ readonly attribute nsIPaymentAddress billingAddress;
+
+ /**
+ * The initial method for nsIBasicCardResponseData.
+ * @param aCardholderName - the cardholder name.
+ * @param aCardNumber - the card number.
+ * @param aExpiryMonth - the expiry month.
+ * @param aExpiryYear - the expiry year.
+ * @param aCardSecurityCode - the card security code.
+ * @param aBillingAddreess - the billing address.
+ */
+ void initData(in AString aCardholderName,
+ in AString aCardNumber,
+ in AString aExpiryMonth,
+ in AString aExpiryYear,
+ in AString aCardSecurityCode,
+ in nsIPaymentAddress billingAddress);
+};
+
+/**
+ * The base interface of user's response.
+ * Payment UI should create different sub-interface of nsIPaymentActionResponse
+ * according to user's action, and call nsIPaymentRequestService::respondPayment
+ * with the created action to inform the merchant.
+ */
+[builtinclass, scriptable, uuid(a607c095-ef60-4a9b-a3d0-0506c60728b3)]
+interface nsIPaymentActionResponse : nsISupports
+{
+ /**
+ * The response type.
+ * Align type to nsIPaymentActionRequest types,
+ * where 1 is for payment request creation.
+ * the action expects no response from UI module.
+ */
+ const uint32_t NO_TYPE = 0;
+ // const uint32_t CREATE_ACTION = 1;
+ const uint32_t CANMAKE_ACTION = 2;
+ const uint32_t SHOW_ACTION = 3;
+ const uint32_t ABORT_ACTION = 4;
+ const uint32_t COMPLETE_ACTION = 5;
+
+ /**
+ * The abort status.
+ */
+ const uint32_t ABORT_SUCCEEDED = 1;
+ const uint32_t ABORT_FAILED = 0;
+
+ /**
+ * The payment status.
+ */
+ const uint32_t PAYMENT_REJECTED = 0;
+ const uint32_t PAYMENT_ACCEPTED = 1;
+ const uint32_t PAYMENT_NOTSUPPORTED = 2;
+
+ /**
+ * The complete status.
+ */
+ const uint32_t COMPLETE_SUCCEEDED = 1;
+ const uint32_t COMPLETE_FAILED = 0;
+
+ /*
+ * The payment request identity.
+ */
+ readonly attribute AString requestId;
+
+ /*
+ * The response type.
+ */
+ readonly attribute uint32_t type;
+};
+
+/**
+ * The response for canMakePayment action.
+ */
+[builtinclass, scriptable, uuid(52fc3f9f-c0cb-4874-b3d4-ee4b6e9cbe9c)]
+interface nsIPaymentCanMakeActionResponse : nsIPaymentActionResponse
+{
+ /**
+ * The result of canMakePayment action.
+ */
+ readonly attribute bool result;
+
+ /**
+ * The initial method.
+ * @param aRequestId - the request identifier of the payment request.
+ * @param aResult - the canMakePayment result.
+ */
+ void init(in AString aRequestId, in bool aResult);
+};
+
+/**
+ * The response for show action.
+ * Notice that to represent user's cancel, we should use nsIPaymentShowActionResponse
+ * with PAYMENT_REJECTED status, not nsIPaymentAbortActionResponse.
+ */
+[builtinclass, scriptable, uuid(184385cb-2d35-4b99-a9a3-7c780bf66b9b)]
+interface nsIPaymentShowActionResponse : nsIPaymentActionResponse
+{
+ /**
+ * Accept status of the payment.
+ * Using the defined consts(PAYMENT_XXX) in nsIPaymentActionResponse.
+ */
+ readonly attribute uint32_t acceptStatus;
+
+ /**
+ * The decided payment method name. i.e. "basic-card".
+ */
+ readonly attribute AString methodName;
+
+ /**
+ * The data needed by the payment method. (it must be serializable)
+ */
+ readonly attribute nsIPaymentResponseData data;
+
+ /**
+ * The payer name information.
+ */
+ readonly attribute AString payerName;
+
+ /**
+ * The payer email information.
+ */
+ readonly attribute AString payerEmail;
+
+ /**
+ * The payer phone information.
+ */
+ readonly attribute AString payerPhone;
+
+ /**
+ * The initial method.
+ * @param aRequestId - the request identifier of the payment request.
+ * @param aAcceptStatus - the payment status.
+ * @param aMethodName - the decided method name.
+ * @param aData - the response data for the decided payment method.
+ * @param aPayerName - the payer's name.
+ * @param aPayerEmail - the payer's email.
+ * @param aPayerPhone - the payer's phone.
+ */
+ void init(in AString aRequestId,
+ in uint32_t aAcceptStatus,
+ in AString aMethodName,
+ in nsIPaymentResponseData aData,
+ in AString aPayerName,
+ in AString aPayerEmail,
+ in AString aPayerPhone);
+};
+
+/**
+ * The response for abort action.
+ */
+[builtinclass, scriptable, uuid(8c72bcdb-0c37-4786-a9e5-510afa2f8ede)]
+interface nsIPaymentAbortActionResponse : nsIPaymentActionResponse
+{
+ /**
+ * The abort action status.
+ * Using the defined consts(ABORT_XXX) in nsIPaymentActionResponse.
+ */
+ readonly attribute uint32_t abortStatus;
+
+ /**
+ * The Initial method.
+ * @param aRequestId - the request identifier of payment request.
+ * @param aAbortStatus - the abort action result.
+ */
+ void init(in AString aRequestId, in uint32_t aAbortStatus);
+
+ /**
+ * Check if the abort action is succeeded
+ */
+ bool isSucceeded();
+};
+
+[builtinclass, scriptable, uuid(62c01e69-9ca4-4060-99e4-b95f628c8e6d)]
+interface nsIPaymentCompleteActionResponse : nsIPaymentActionResponse
+{
+ /**
+ * The complete action status.
+ * Using the defined consts(COMPLETE_XXX) in nsIPaymentActionResponse.
+ */
+ readonly attribute uint32_t completeStatus;
+
+ /**
+ * The Initial method.
+ * @param aRequestId - the request identifier of payment request.
+ * @param aCompleteStatus - the complete action result.
+ */
+ void init(in AString aRequestId,
+ in uint32_t aCompleteStatus);
+
+ /**
+ * Check if the complete action is succeeded.
+ */
+ bool isCompleted();
+};
+
+[builtinclass, scriptable, uuid(2035e0a9-c9ab-4c9f-b8e9-28b2ed61548c)]
+interface nsIMethodChangeDetails : nsISupports
+{
+ /**
+ * The consts for representing the method change details data type.
+ * GENERAL_DETAILS is the general purpose details data type. Except basic
+ * card details, all details should belong to this type.
+ * BASICCARD_DETAILS is a special details data type for basic card change
+ * details.
+ */
+ const uint32_t GENERAL_DETAILS = 0;
+ const uint32_t BASICCARD_DETAILS = 1;
+
+ /**
+ * The method change details data type.
+ * Using the above defined consts(GENERAL_DETAILS or BASICCARD_DETAILS).
+ */
+ readonly attribute uint32_t type;
+
+ /**
+ * The initial method.
+ * @param aType - the method change details data type.
+ */
+ void init(in uint32_t aType);
+};
+
+/**
+ * The general purpose method change details.
+ */
+[builtinclass, scriptable, uuid(e031267e-bec8-4f3c-b0b1-396b77ca260c)]
+interface nsIGeneralChangeDetails : nsIMethodChangeDetails
+{
+ /**
+ * The stringified change details.
+ */
+ readonly attribute AString details;
+
+ /**
+ * The initial method for nsIGeneralChangeDetails.
+ * @param aData - the javascript object of the content.
+ */
+ [implicit_jscontext]
+ void initData(in jsval aDetails);
+};
+
+/**
+ * The basic card change details.
+ * Since PaymentAddress is an no constructor interface type, UI code can not
+ * easy create PaymentAddress by calling new PaymentAddress().
+ * Unfortunately, BasicCardResponse has a PaymentAddress attribute, billingAddress
+ * , it means UI can not create BsaicCardChangeDetails by calling the init() with a
+ * given JSObject directly, because PaymentAddress creation in JS code is hard.
+ * To let UI code can create BasicCardResponse easier, nsIBasicCardResponse is
+ * provided for UI by passing the raw data of BasicCardResponse,
+ */
+[builtinclass, scriptable, uuid(5296f79e-15ea-40c3-8196-19cfa64d328c)]
+interface nsIBasicCardChangeDetails : nsIMethodChangeDetails
+{
+ /**
+ * The billing address.
+ */
+ readonly attribute nsIPaymentAddress billingAddress;
+
+ /**
+ * The initial method for nsIBasicCardChangeDetails.
+ * @param aBillingAddreess - the billing address.
+ */
+ void initData(in nsIPaymentAddress billingAddress);
+};
+
+
+%{C++
+#define NS_GENERAL_RESPONSE_DATA_CID \
+ { 0xb986773e, 0x2b30, 0x4ed2, { 0xb8, 0xfe, 0x6a, 0x96, 0x63, 0x1c, 0x80, 0x00 } }
+#define NS_GENERAL_RESPONSE_DATA_CONTRACT_ID \
+ "@mozilla.org/dom/payments/general-response-data;1"
+
+#define NS_BASICCARD_RESPONSE_DATA_CID \
+ { 0x0d55a5e6, 0xd185, 0x44f0, { 0xb9, 0x92, 0xa8, 0xe1, 0x32, 0x1e, 0x4b, 0xce } }
+#define NS_BASICCARD_RESPONSE_DATA_CONTRACT_ID \
+ "@mozilla.org/dom/payments/basiccard-response-data;1"
+
+#define NS_PAYMENT_CANMAKE_ACTION_RESPONSE_CID \
+ { 0x52fc3f9f, 0xc0cb, 0x4874, { 0xb3, 0xd4, 0xee, 0x4b, 0x6e, 0x9c, 0xbe, 0x9c } }
+#define NS_PAYMENT_CANMAKE_ACTION_RESPONSE_CONTRACT_ID \
+ "@mozilla.org/dom/payments/payment-canmake-action-response;1"
+
+#define NS_PAYMENT_SHOW_ACTION_RESPONSE_CID \
+ { 0x184385cb, 0x2d35, 0x4b99, { 0xa9, 0xa3, 0x7c, 0x78, 0x0b, 0xf6, 0x6b, 0x9b } }
+#define NS_PAYMENT_SHOW_ACTION_RESPONSE_CONTRACT_ID \
+ "@mozilla.org/dom/payments/payment-show-action-response;1"
+
+#define NS_PAYMENT_ABORT_ACTION_RESPONSE_CID \
+ { 0x8c72bcdb, 0x0c37, 0x4786, { 0xa9, 0xe5, 0x51, 0x0a, 0xfa, 0x2f, 0x8e, 0xde } }
+#define NS_PAYMENT_ABORT_ACTION_RESPONSE_CONTRACT_ID \
+ "@mozilla.org/dom/payments/payment-abort-action-response;1"
+
+#define NS_PAYMENT_COMPLETE_ACTION_RESPONSE_CID \
+ { 0x62c01e69, 0x9ca4, 0x4060, { 0x99, 0xe4, 0xb9, 0x5f, 0x62, 0x8c, 0x8e, 0x6d } }
+#define NS_PAYMENT_COMPLETE_ACTION_RESPONSE_CONTRACT_ID \
+ "@mozilla.org/dom/payments/payment-complete-action-response;1"
+
+#define NS_GENERAL_CHANGE_DETAILS_CID \
+ { 0xe031267e, 0xbec8, 0x4f3c, { 0xb0, 0xb1, 0x39, 0x6b, 0x77, 0xca, 0x26, 0x0c } }
+#define NS_GENERAL_CHANGE_DETAILS_CONTRACT_ID \
+ "@mozilla.org/dom/payments/general-change-details;1"
+
+#define NS_BASICCARD_CHANGE_DETAILS_CID \
+ { 0x5296f79e, 0x15ea, 0x40c3, { 0x81, 0x96, 0x19, 0xcf, 0xa6, 0x4d, 0x32, 0x8c } }
+#define NS_BASICCARD_CHANGE_DETAILS_CONTRACT_ID \
+ "@mozilla.org/dom/payments/basiccard-change-details;1"
+%}
diff --git a/dom/interfaces/payments/nsIPaymentAddress.idl b/dom/interfaces/payments/nsIPaymentAddress.idl
new file mode 100644
index 0000000000..7f9bf39e51
--- /dev/null
+++ b/dom/interfaces/payments/nsIPaymentAddress.idl
@@ -0,0 +1,43 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsISupports.idl"
+
+interface nsIArray;
+
+[builtinclass, scriptable, uuid(49a02241-7e48-477a-9345-9f246925dcb3)]
+interface nsIPaymentAddress : nsISupports
+{
+ readonly attribute AString country;
+ readonly attribute nsIArray addressLine;
+ readonly attribute AString region;
+ readonly attribute AString regionCode;
+ readonly attribute AString city;
+ readonly attribute AString dependentLocality;
+ readonly attribute AString postalCode;
+ readonly attribute AString sortingCode;
+ readonly attribute AString organization;
+ readonly attribute AString recipient;
+ readonly attribute AString phone;
+
+ void init(in AString aCountry,
+ in nsIArray aAddressLine,
+ in AString aRegion,
+ in AString aRegionCode,
+ in AString aCity,
+ in AString aDependentLocality,
+ in AString aPostalCode,
+ in AString aSortingCode,
+ in AString aOrganization,
+ in AString aRecipient,
+ in AString aPhone);
+};
+
+%{C++
+#define NS_PAYMENT_ADDRESS_CID \
+ { 0x49a02241, 0x7e48, 0x477a, { 0x93, 0x45, 0x9f, 0x24, 0x69, 0x25, 0xdc, 0xb3 } }
+#define NS_PAYMENT_ADDRESS_CONTRACT_ID \
+ "@mozilla.org/dom/payments/payment-address;1"
+%}
diff --git a/dom/interfaces/payments/nsIPaymentRequest.idl b/dom/interfaces/payments/nsIPaymentRequest.idl
new file mode 100644
index 0000000000..ea5b6cba47
--- /dev/null
+++ b/dom/interfaces/payments/nsIPaymentRequest.idl
@@ -0,0 +1,93 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsISupports.idl"
+#include "nsIVariant.idl"
+#include "nsIPrincipal.idl"
+
+interface nsIArray;
+
+[scriptable, builtinclass, uuid(2fe296cc-d917-4820-b492-aa42df23f9b4)]
+interface nsIPaymentMethodData : nsISupports
+{
+ readonly attribute AString supportedMethods;
+ [implicit_jscontext]
+ readonly attribute jsval data;
+};
+
+[scriptable, builtinclass, uuid(d22a6f5f-767b-4fea-bf92-68b0b8003eba)]
+interface nsIPaymentCurrencyAmount : nsISupports
+{
+ readonly attribute AString currency;
+ readonly attribute AString value;
+};
+
+[scriptable, builtinclass, uuid(4f78a59f-b5ff-4fb5-ab48-3b37d0101b02)]
+interface nsIPaymentItem : nsISupports
+{
+ readonly attribute AString label;
+ readonly attribute nsIPaymentCurrencyAmount amount;
+ readonly attribute boolean pending;
+};
+
+[scriptable, builtinclass, uuid(74259861-c318-40e8-b3d5-518e701bed80)]
+interface nsIPaymentDetailsModifier : nsISupports
+{
+ readonly attribute AString supportedMethods;
+ readonly attribute nsIPaymentItem total;
+ readonly attribute nsIArray additionalDisplayItems;
+ [implicit_jscontext]
+ readonly attribute jsval data;
+};
+
+[scriptable, builtinclass, uuid(68341551-3605-4381-b936-41e830aa88fb)]
+interface nsIPaymentShippingOption : nsISupports
+{
+ readonly attribute AString id;
+ readonly attribute AString label;
+ readonly attribute nsIPaymentCurrencyAmount amount;
+ attribute boolean selected;
+};
+
+[scriptable, builtinclass, uuid(73a5a3f1-45b9-4605-a6e6-7aa60daa9039)]
+interface nsIPaymentDetails : nsISupports
+{
+ readonly attribute AString id;
+ readonly attribute nsIPaymentItem totalItem;
+ readonly attribute nsIArray displayItems;
+ readonly attribute nsIArray shippingOptions;
+ readonly attribute nsIArray modifiers;
+ readonly attribute AString error;
+ [implicit_jscontext]
+ readonly attribute jsval shippingAddressErrors;
+ [implicit_jscontext]
+ readonly attribute jsval payerErrors;
+ [implicit_jscontext]
+ readonly attribute jsval paymentMethodErrors;
+};
+
+[scriptable, builtinclass, uuid(d53f9f20-138e-47cc-9fd5-db16a3f6d301)]
+interface nsIPaymentOptions : nsISupports
+{
+ readonly attribute boolean requestPayerName;
+ readonly attribute boolean requestPayerEmail;
+ readonly attribute boolean requestPayerPhone;
+ readonly attribute boolean requestShipping;
+ readonly attribute boolean requestBillingAddress;
+ readonly attribute AString shippingType;
+};
+
+[scriptable, builtinclass, uuid(2fa36783-d684-4487-b7a8-9def6ae3128f)]
+interface nsIPaymentRequest : nsISupports
+{
+ readonly attribute uint64_t topOuterWindowId;
+ readonly attribute nsIPrincipal topLevelPrincipal;
+ readonly attribute AString requestId;
+ readonly attribute AString completeStatus;
+ readonly attribute nsIArray paymentMethods;
+ readonly attribute nsIPaymentDetails paymentDetails;
+ readonly attribute nsIPaymentOptions paymentOptions;
+ readonly attribute AString shippingOption;
+};
diff --git a/dom/interfaces/payments/nsIPaymentRequestService.idl b/dom/interfaces/payments/nsIPaymentRequestService.idl
new file mode 100644
index 0000000000..34c296df94
--- /dev/null
+++ b/dom/interfaces/payments/nsIPaymentRequestService.idl
@@ -0,0 +1,102 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsISupports.idl"
+#include "nsIVariant.idl"
+#include "nsIPaymentRequest.idl"
+#include "nsIPaymentActionResponse.idl"
+#include "nsIPaymentAddress.idl"
+#include "nsISimpleEnumerator.idl"
+#include "nsIPaymentUIService.idl"
+
+/**
+ * nsPaymentRequestService is used to manage the created PaymentRequest in the
+ * chrome process. It is also the IPC agent for payment UI to communicate with
+ * merchant side.
+ */
+[scriptable, builtinclass, uuid(cccd665f-edf3-41fc-ab9b-fc55b37340aa)]
+interface nsIPaymentRequestService : nsISupports
+{
+ /**
+ * Get the nsIPaymentRequest through the given payment request identifier.
+ * @param aRequestId - the payment request identifier.
+ * This is an internal id generated by Gecko.
+ * @return - the requested payment request. null if there is no
+ * coressponding nsIPaymentRequest for aRequestId.
+ */
+ nsIPaymentRequest getPaymentRequestById(in AString aRequestId);
+
+ /**
+ * Get the enumerator for all managed nsIPaymentRequests.
+ * @return - an enumerator for all managed nsIPaymentRequests.
+ */
+ nsISimpleEnumerator enumerate();
+
+ /**
+ * Send the user's response to the merchant.
+ * @param aResponse - the user's response.
+ */
+ void respondPayment(in nsIPaymentActionResponse aResponse);
+
+ /**
+ * Inform the merchant the shipping address has changed.
+ * @param requestId - the request identifier of the payment request.
+ * @param aAddress - the new payment address.
+ */
+ void changeShippingAddress(in AString requestId, in nsIPaymentAddress aAddress);
+
+ /**
+ * Inform the merchant the shipping option has changed.
+ * @param requestId - the request identifier of the payment request.
+ * @param option - the shipping option ID string.
+ */
+ void changeShippingOption(in AString requestId, in AString option);
+
+ /**
+ * Inform the merchant the payer's details changed in the PaymentResponse.
+ * @param requestId - the request identifier of the payment request.
+ * @param aPayerName - the changed payer's name.
+ * @param aPayerEmail - the changed payer's email.
+ * @param aPayerPhone - the changed payer's phone.
+ */
+ void changePayerDetail(in AString requestId,
+ in AString aPayerName,
+ in AString aPayerEmail,
+ in AString aPayerPhone);
+
+ /**
+ * Inform the merchant the payment method has changed.
+ * @param requestId - the request identifier of the payment request.
+ * @param aMethodName - the changed payment method's name.
+ * @param aMethodDetails - the changed payment method's details.
+ */
+ void changePaymentMethod(in AString requestId,
+ in AString aMethodName,
+ in nsIMethodChangeDetails aMethodDetails);
+
+
+ /**
+ * Following APIs are for testing or platform code only. UI implementation
+ * should not use them.
+ */
+ /**
+ * Clean up the all managed payment requests.
+ * This API is for testing only.
+ */
+ void cleanup();
+
+ /**
+ * Setup the customized nsIPaymentUIService.
+ * This API is for testing only.
+ */
+ void setTestingUIService(in nsIPaymentUIService aUIService);
+};
+
+%{C++
+#define NS_PAYMENT_REQUEST_SERVICE_CID \
+ { 0xcccd665f, 0xedf3, 0x41fc, { 0xab, 0x9b, 0xfc, 0x55, 0xb3, 0x73, 0x40, 0xaa } }
+#define NS_PAYMENT_REQUEST_SERVICE_CONTRACT_ID \
+ "@mozilla.org/dom/payments/payment-request-service;1"
+%}
diff --git a/dom/interfaces/payments/nsIPaymentUIService.idl b/dom/interfaces/payments/nsIPaymentUIService.idl
new file mode 100644
index 0000000000..21b181d6a1
--- /dev/null
+++ b/dom/interfaces/payments/nsIPaymentUIService.idl
@@ -0,0 +1,85 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsISupports.idl"
+#include "nsIPaymentActionResponse.idl"
+
+/**
+ * nsIPaymentUIService is the interface used by Gecko to communicate with the
+ * payment UI.
+ * In general, the implementation of this interface should be a service that
+ * manages all payment UI components and receives the requested payment actions
+ * from Gecko and perform the corresponding UI behavior.
+ */
+[scriptable, uuid(01f8bd55-9017-438b-85ec-7c15d2b35cdc)]
+interface nsIPaymentUIService : nsISupports
+{
+ /**
+ * Show the payment UI to users.
+ * The implementation gets the payment data through nsIPaymentRequestService
+ * by the passed in requestId, then shows the payment UI and start to interact
+ * with users.
+ * According to user's action, nsIPaymentRequestService's APIs respondPayment,
+ * changeShippingAddress, or changeShippingOtpion is possible to called in the
+ * implementation.
+ * @param requestId - the request identify of the payment request.
+ * Notice that this requestId is an internal request Id
+ * generated by Gecko
+ */
+ void showPayment(in AString requestId);
+
+ /**
+ * Abort the payment.
+ * The implementation must abort and close the showing payment UI then call
+ * nsIPaymentRequestService respondPayment with nsIPaymentAbortActionResponse
+ * to inform Gecko of the abort status.
+ * @param requestId - the request identify of the payment request.
+ * Notice that this requestId is an internal request Id
+ * generated by Gecko
+ */
+ void abortPayment(in AString requestId);
+
+ /**
+ * Complete the payment.
+ * The implementation should close the showing payment UI, then call
+ * nsIPaymentRequestService respondPayment with nsIPaymentCompleteActionResponse
+ * to inform Gecko of the complete status.
+ * @param requestId - the request identify of the payment request.
+ * Notice that this requestId is an internal request Id
+ * generated by Gecko
+ */
+ void completePayment(in AString requestId);
+
+ /**
+ * Update the payment data in the payment UI.
+ * The implementation should get the updated payment data through the
+ * nsIPaymentRequestService again, and update the UI.
+ * @param requestId - the request identify of the payment request.
+ * Notice that this requestId is an internal request Id
+ * generated by Gecko
+ */
+ void updatePayment(in AString requestId);
+
+ /**
+ * Close the payment UI for the specified PaymentRequest.
+ * The implementation should clean up the PaymentRequest data saved in the UI
+ * component and close the UI if the specified PaymentRequest is showing to
+ * the user.
+ * Notice when the method is called, that means the PaymentRequest is invalid
+ * in nsIPaymentRequestService.
+ * @param requestId - the request identify of the payment request.
+ * Notice that this requestId is an internal request Id
+ * generated by Gecko
+ */
+ void closePayment(in AString requestId);
+
+};
+
+%{C++
+#define NS_PAYMENT_UI_SERVICE_CID \
+ { 0x01f8bd55, 0x9017, 0x438b, { 0x85, 0xec, 0x7c, 0x15, 0xd2, 0xb3, 0x5c, 0xdc } }
+#define NS_PAYMENT_UI_SERVICE_CONTRACT_ID \
+ "@mozilla.org/dom/payments/payment-ui-service;1"
+%}