test_bug1478740.html (4865B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=1478740 5 --> 6 <head> 7 <meta charset="utf-8"> 8 <title>Test for retry PaymentRequest</title> 9 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 10 <script src="/tests/SimpleTest/SimpleTest.js"></script> 11 <script type="application/javascript" src="DefaultData.js"></script> 12 <script type="application/javascript"> 13 14 "use strict"; 15 SimpleTest.waitForExplicitFinish(); 16 17 const gUrl = SimpleTest.getTestFileURL('Bug1478740ChromeScript.js'); 18 const gScript = SpecialPowers.loadChromeScript(gUrl); 19 20 function testFailHandler(message) { 21 ok(false, message); 22 } 23 function testPassHandler(message) { 24 ok(true, message); 25 } 26 gScript.addMessageListener("test-fail", testFailHandler); 27 gScript.addMessageListener("test-pass", testPassHandler); 28 29 async function requestChromeAction(action, params) { 30 gScript.sendAsyncMessage(action, params); 31 await new Promise(resolve => { 32 gScript.addMessageListener(`${action}-complete`, function completeListener() { 33 gScript.removeMessageListener(`${action}-complete`, completeListener); 34 resolve(); 35 }); 36 }); 37 } 38 function unexpectedErrMsg(testName, errName, timing) { 39 return `${testName}: Unexpected error(${errName}) when ${timing} the PaymentRequest.`; 40 } 41 42 async function testMultipleShows() { 43 const testName = "testMultipleShows"; 44 await requestChromeAction("start-test", testName); 45 let expectedResults = ["successful", 46 "successful", 47 "successful", 48 "AbortError", 49 "AbortError", 50 "AbortError"]; 51 let nextStatus = ["creating first page", 52 "creating second page", 53 "showing first payment", 54 "showing second payment", 55 "showing third payment", 56 "aborting first payment"]; 57 let currStatus = nextStatus.shift(); 58 let ifr1 = document.createElement('iframe'); 59 let ifr2 = document.createElement('iframe'); 60 61 await new Promise(resolve => { 62 let listener = async function(event) { 63 let expected = expectedResults.shift(); 64 is(event.data, expected, 65 `${testName}: Expected '${expected}' when ${currStatus}, but got '${event.data}'`); 66 switch (currStatus) { 67 case "creating first page": 68 ifr2.src = "bug1478740.html"; 69 document.body.appendChild(ifr2); 70 break; 71 case "creating second page": 72 ifr1.contentWindow.postMessage("Show Payment", "*"); 73 break; 74 case "showing first payment": 75 ifr2.contentWindow.postMessage("Show Payment", "*"); 76 break; 77 case "showing second payment": 78 ifr2.contentWindow.postMessage("Show Payment", "*"); 79 break; 80 case "showing third payment": 81 await requestChromeAction("reject-payment"); 82 break; 83 case "aborting first payment": 84 window.removeEventListener("message", listener); 85 gScript.removeMessageListener("showing-payment", listener); 86 document.body.removeChild(ifr1); 87 document.body.removeChild(ifr2); 88 resolve(); 89 break; 90 default: 91 ok(false, `unknown status ${currStatus}`); 92 } 93 currStatus = nextStatus.shift(); 94 } 95 window.addEventListener("message", listener); 96 gScript.addMessageListener("showing-payment", listener); 97 ifr1.src = "bug1478740.html"; 98 document.body.appendChild(ifr1); 99 }); 100 await requestChromeAction("finish-test"); 101 } 102 103 function teardown() { 104 return new Promise((resolve, reject) => { 105 gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() { 106 gScript.removeMessageListener("teardown-complete", teardownCompleteHandler); 107 gScript.removeMessageListener("test-fail", testFailHandler); 108 gScript.removeMessageListener("test-pass", testPassHandler); 109 gScript.destroy(); 110 SimpleTest.finish(); 111 resolve(); 112 }); 113 gScript.sendAsyncMessage("teardown"); 114 }); 115 } 116 117 async function runTests() { 118 try { 119 await testMultipleShows(); 120 await teardown(); 121 } catch(e) { 122 ok(false, "Unexpected error: " + e.name); 123 SimpleTest.finish(); 124 } 125 } 126 127 window.addEventListener('load', function() { 128 SpecialPowers.pushPrefEnv({ 129 'set': [ 130 ['dom.payments.request.enabled', true], 131 ['dom.payments.request.user_interaction_required', false], 132 ] 133 }, runTests); 134 }); 135 </script> 136 </head> 137 <body> 138 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1478740">Mozilla Bug 1478740</a> 139 </body> 140 </html>