diff options
Diffstat (limited to 'dom/payments/test/test_bug1478740.html')
-rw-r--r-- | dom/payments/test/test_bug1478740.html | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/dom/payments/test/test_bug1478740.html b/dom/payments/test/test_bug1478740.html new file mode 100644 index 0000000000..e877face76 --- /dev/null +++ b/dom/payments/test/test_bug1478740.html @@ -0,0 +1,140 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1478740 +--> +<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> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1478740">Mozilla Bug 1478740</a> +</body> +</html> |