Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE HTML>
<html>
<!--
-->
<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('Bug1478740ChromeScript.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 testMultipleShows() {
const testName = "testMultipleShows";
await requestChromeAction("start-test", testName);
let expectedResults = ["successful",
"successful",
"successful",
"AbortError",
"AbortError",
"AbortError"];
let nextStatus = ["creating first page",
"creating second page",
"showing first payment",
"showing second payment",
"showing third payment",
"aborting first payment"];
let currStatus = nextStatus.shift();
let ifr1 = document.createElement('iframe');
let ifr2 = document.createElement('iframe');
await new Promise(resolve => {
let listener = async function(event) {
let expected = expectedResults.shift();
is(event.data, expected,
`${testName}: Expected '${expected}' when ${currStatus}, but got '${event.data}'`);
switch (currStatus) {
case "creating first page":
ifr2.src = "bug1478740.html";
document.body.appendChild(ifr2);
break;
case "creating second page":
ifr1.contentWindow.postMessage("Show Payment", "*");
break;
case "showing first payment":
ifr2.contentWindow.postMessage("Show Payment", "*");
break;
case "showing second payment":
ifr2.contentWindow.postMessage("Show Payment", "*");
break;
case "showing third payment":
await requestChromeAction("reject-payment");
break;
case "aborting first payment":
window.removeEventListener("message", listener);
gScript.removeMessageListener("showing-payment", listener);
document.body.removeChild(ifr1);
document.body.removeChild(ifr2);
resolve();
break;
default:
ok(false, `unknown status ${currStatus}`);
}
currStatus = nextStatus.shift();
}
window.addEventListener("message", listener);
gScript.addMessageListener("showing-payment", listener);
ifr1.src = "bug1478740.html";
document.body.appendChild(ifr1);
});
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 testMultipleShows();
await teardown();
} catch(e) {
ok(false, "Unexpected error: " + e.name);
SimpleTest.finish();
}
}
window.addEventListener('load', function() {
SpecialPowers.pushPrefEnv({
'set': [
['dom.payments.request.enabled', true],
['dom.payments.request.user_interaction_required', false],
]
}, runTests);
});
</script>
</head>
<body>
</body>
</html>