Source code
Revision control
Copy as Markdown
Other Tools
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* Any copyright is dedicated to the Public Domain.
/* eslint-env mozilla/chrome-script */
"use strict";
const { XPCOMUtils } = ChromeUtils.importESModule(
"resource://gre/modules/XPCOMUtils.sys.mjs"
);
const paymentSrv = Cc[
"@mozilla.org/dom/payments/payment-request-service;1"
].getService(Ci.nsIPaymentRequestService);
function emitTestFail(message) {
sendAsyncMessage("test-fail", `${DummyUIService.testName}: ${message}`);
}
function emitTestPass(message) {
sendAsyncMessage("test-pass", `${DummyUIService.testName}: ${message}`);
}
addMessageListener("close-check", function () {
const paymentEnum = paymentSrv.enumerate();
if (paymentEnum.hasMoreElements()) {
emitTestFail("Non-empty PaymentRequest queue in PaymentRequestService.");
} else {
emitTestPass("Got empty PaymentRequest queue in PaymentRequestService.");
}
sendAsyncMessage("close-check-complete");
});
var setPaymentNums = 0;
addMessageListener("payment-num-set", function () {
setPaymentNums = 0;
const paymentEnum = paymentSrv.enumerate();
while (paymentEnum.hasMoreElements()) {
setPaymentNums = setPaymentNums + 1;
paymentEnum.getNext();
}
sendAsyncMessage("payment-num-set-complete");
});
addMessageListener("payment-num-check", function (expectedNumPayments) {
const paymentEnum = paymentSrv.enumerate();
let numPayments = 0;
while (paymentEnum.hasMoreElements()) {
numPayments = numPayments + 1;
paymentEnum.getNext();
}
if (numPayments !== expectedNumPayments + setPaymentNums) {
emitTestFail(
"Expected '" +
expectedNumPayments +
"' PaymentRequests in PaymentRequestService" +
", but got '" +
numPayments +
"'."
);
} else {
emitTestPass(
"Got expected '" +
numPayments +
"' PaymentRequests in PaymentRequestService."
);
}
// force cleanup PaymentRequests for clear environment to next testcase.
paymentSrv.cleanup();
sendAsyncMessage("payment-num-check-complete");
});
addMessageListener("test-setup", testName => {
DummyUIService.testName = testName;
sendAsyncMessage("test-setup-complete");
});
addMessageListener("reject-payment", expectedError => {
try {
const responseData = Cc[
"@mozilla.org/dom/payments/general-response-data;1"
].createInstance(Ci.nsIGeneralResponseData);
responseData.initData({});
const showResponse = Cc[
"@mozilla.org/dom/payments/payment-show-action-response;1"
].createInstance(Ci.nsIPaymentShowActionResponse);
showResponse.init(
DummyUIService.respondRequestId,
Ci.nsIPaymentActionResponse.PAYMENT_REJECTED,
"", // payment method
responseData, // payment method data
"", // payer name
"", // payer email
""
); // payer phone
paymentSrv.respondPayment(
showResponse.QueryInterface(Ci.nsIPaymentActionResponse)
);
emitTestPass("Reject PaymentRequest successfully");
} catch (error) {
if (expectedError) {
if (error.name === "NS_ERROR_FAILURE") {
emitTestPass(
"Got expected NS_ERROR_FAILURE when responding a closed PaymentRequest"
);
sendAsyncMessage("reject-payment-complete");
return;
}
}
emitTestFail(
"Unexpected error '" +
error.name +
"' when reponding a closed PaymentRequest"
);
}
sendAsyncMessage("reject-payment-complete");
});
addMessageListener("update-payment", () => {
try {
paymentSrv.changeShippingOption(DummyUIService.respondRequestId, "");
emitTestPass("Change shippingOption succefully");
} catch (error) {
emitTestFail(
"Unexpected error '" + error.name + "' when changing the shipping option"
);
}
sendAsyncMessage("update-payment-complete");
});
const DummyUIService = {
testName: "",
respondRequestId: "",
showPayment: requestId => {
DummyUIService.respondRequestId = requestId;
},
abortPayment: requestId => {
DummyUIService.respondRequestId = requestId;
},
completePayment: requestId => {
DummyUIService.respondRequestId = requestId;
},
updatePayment: requestId => {
DummyUIService.respondRequestId = requestId;
},
closePayment: requestId => {
this.respondRequestId = requestId;
},
QueryInterface: ChromeUtils.generateQI(["nsIPaymentUIService"]),
};
paymentSrv.setTestingUIService(
DummyUIService.QueryInterface(Ci.nsIPaymentUIService)
);
addMessageListener("teardown", function () {
paymentSrv.setTestingUIService(null);
sendAsyncMessage("teardown-complete");
});