Files
tubestation/toolkit/components/payments/test/browser/head.js
Jonathan Guillotte-Blouin 922abd31cf Bug 1382388 - Make the Payments Dialog unprivileged & add "abort" support. r=MattN
MozReview-Commit-ID: IXexL4ju2Fj
2017-09-21 13:49:41 -07:00

91 lines
2.7 KiB
JavaScript

"use strict";
/* eslint
"no-unused-vars": ["error", {
vars: "local",
args: "none",
varsIgnorePattern: "^(Cc|Ci|Cr|Cu|EXPORTED_SYMBOLS)$",
}],
*/
const BLANK_PAGE_URL = "https://example.com/browser/toolkit/components/" +
"payments/test/browser/blank_page.html";
const PREF_PAYMENT_ENABLED = "dom.payments.request.enabled";
const paymentUISrv = Cc["@mozilla.org/dom/payments/payment-ui-service;1"]
.getService().wrappedJSObject;
/**
* Return the container (e.g. dialog or overlay) that the payment request contents are shown in.
* This abstracts away the details of the widget used so that this can more earily transition from a
* dialog to another kind of overlay.
* Consumers shouldn't rely on a dialog window being returned.
* @returns {Promise}
*/
async function getPaymentWidget() {
let win;
await BrowserTestUtils.waitForCondition(() => {
win = Services.wm.getMostRecentWindow(null);
return win.name.startsWith(paymentUISrv.REQUEST_ID_PREFIX);
}, "payment dialog should be the most recent");
return win;
}
async function getPaymentFrame(widget) {
return widget.document.getElementById("paymentRequestFrame");
}
async function waitForMessageFromWidget(messageType, widget = null) {
info("waitForMessageFromWidget: " + messageType);
return new Promise(resolve => {
Services.mm.addMessageListener("paymentContentToChrome", function onMessage({data, target}) {
if (data.messageType != messageType) {
return;
}
if (widget && widget != target) {
return;
}
resolve();
info(`Got ${messageType} from widget`);
Services.mm.removeMessageListener("paymentContentToChrome", onMessage);
});
});
}
async function waitForWidgetReady(widget = null) {
return waitForMessageFromWidget("paymentDialogReady", widget);
}
function spawnPaymentDialogTask(paymentDialogFrame, taskFn, args = null) {
return ContentTask.spawn(paymentDialogFrame.frameLoader, args, taskFn);
}
/**
* Common content tasks functions to be used with ContentTask.spawn.
*/
let ContentTasks = {
createAndShowRequest: async ({methodData, details, options}) => {
let rq = new content.PaymentRequest(methodData, details, options);
content.rq = rq; // assign it so we can retrieve it later
rq.show();
},
/**
* Click the cancel button
*
* Don't await on this task since the cancel can close the dialog before
* ContentTask can resolve the promise.
*
* @returns {undefined}
*/
manuallyClickCancel: () => {
content.document.getElementById("cancel").click();
},
};
add_task(async function setup_head() {
await SpecialPowers.pushPrefEnv({set: [[PREF_PAYMENT_ENABLED, true]]});
});