<!
DOCTYPE HTML>
<
html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1490698
-->
<
head>
<
meta charset=
"utf-8">
<
title>Test for retry PaymentRequest</
title>
<
link rel=
"stylesheet" type=
"text/css" href=
"/tests/SimpleTest/test.css"/>
<
script src=
"/tests/SimpleTest/SimpleTest.js"></
script>
<
script type=
"application/javascript" src=
"DefaultData.js"></
script>
<
script type=
"application/javascript">
"use strict";
SimpleTest.waitForExplicitFinish();
const gUrl = SimpleTest.getTestFileURL(
'Bug1490698ChromeScript.js');
const gScript = SpecialPowers.loadChromeScript(gUrl);
function testFailHandler(message) {
ok(false, message);
}
function testPassHandler(message) {
ok(true, message);
}
gScript.addMessageListener(
"test-fail", testFailHandler);
gScript.addMessageListener(
"test-pass", testPassHandler);
async function requestChromeAction(action, params) {
gScript.sendAsyncMessage(action, params);
await new Promise(resolve => {
gScript.addMessageListener(`${action}-complete`, function completeListener() {
gScript.removeMessageListener(`${action}-complete`, completeListener);
resolve();
});
});
}
function unexpectedErrMsg(testName, errName, timing) {
return `${testName}: Unexpected error(${errName}) when ${timing} the PaymentRequest.`;
}
async function testInteractWithPaymentUnderWrongState() {
const testName =
"testInteractWithPaymentUnderWrongState";
await requestChromeAction(
"start-test", testName);
const payRequest = new PaymentRequest(defaultMethods, defaultDetails, defaultOptions);
ok(payRequest, testName +
": failed to create PaymentRequest.");
if (!payRequest) {
await requestChromeAction(
"finish-test");
return;
}
const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
let payResponse;
try {
payResponse = await payRequest.show();
info(`${testName}: Interact with payment when PaymentRequest is eClosed`);
await requestChromeAction(
"interact-with-payment");
handler.destruct();
} catch(err) {
ok(false, unexpectedErrMsg(testName, err.name,
"showing"));
handler.destruct();
await requestChromeAction(
"finish-test");
return;
}
try {
await payResponse.complete(
"success");
ok(true, `${testName}: complete() is successful after PaymentRequest
's state is eClosed.`);
} catch(err) {
ok(false, unexpectedErrMsg(testName, err.name,
"completing"));
await requestChromeAction(
"finish-test");
return;
}
try {
info(`${testName}: Interact with payment when PaymentRequest is completed`);
await requestChromeAction(
"interact-with-payment");
} catch(err) {
ok(false, unexpectedErrMsg(testName, err.name,
"completing"));
await requestChromeAction(
"finish-test");
return;
}
await requestChromeAction(
"finish-test");
}
function teardown() {
return new Promise((resolve, reject) => {
gScript.addMessageListener(
"teardown-complete", function teardownCompleteHandler()
{
gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.removeMessageListener("test-fail", testFailHandler);
gScript.removeMessageListener("test-pass", testPassHandler);
gScript.destroy();
SimpleTest.finish();
resolve();
});
gScript.sendAsyncMessage("teardown");
});
}
async function runTests() {
try {
await testInteractWithPaymentUnderWrongState();
await teardown();
} catch(e) {
ok(false, "Unexpected error: " + e.name);
SimpleTest.finish();
}
}
window.addEventListener('load', function() {
SpecialPowers.pushPrefEnv({
'set': [
['dom.payments.request.enabled', true],
]
}, runTests);
});
</script>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1490698">Mozilla Bug 1490698</a>
</body>
</html>