test_payment-request-in-iframe.html (5094B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=1318988 5 --> 6 <head> 7 <meta charset="utf-8"> 8 <title>Test for Bug 1318988</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"> 12 13 "use strict"; 14 SimpleTest.waitForExplicitFinish(); 15 16 function testRequestInSameOrigin() { 17 return new Promise((resolve, reject) => { 18 var ifr = document.createElement('iframe'); 19 20 let listener = function(event) { 21 is(event.data, "successful", 22 "Expected 'successful', but got '" + event.data + "'"); 23 resolve(); 24 }; 25 26 window.addEventListener("message", listener); 27 28 ifr.src = "simple_payment_request.html"; 29 document.body.appendChild(ifr); 30 31 ifr.addEventListener('load', function() { 32 window.removeEventListener("message", listener); 33 }); 34 }); 35 } 36 37 function testRequestInIFrame() { 38 return new Promise((resolve, reject) => { 39 var ifr = document.createElement('iframe'); 40 41 let listener = function(event) { 42 is(event.data, "SecurityError", 43 "Expected 'SecurityError', but got '" + event.data + "'"); 44 resolve(); 45 }; 46 47 window.addEventListener("message", listener); 48 49 ifr.src = "https://test1.example.com:443/tests/dom/payments/test/simple_payment_request.html"; 50 document.body.appendChild(ifr); 51 52 ifr.addEventListener('load', function() { 53 window.removeEventListener("message", listener); 54 }); 55 }); 56 } 57 58 function testRequestInIFrameWithAttribute() { 59 return new Promise((resolve, reject) => { 60 var ifrr = document.createElement('iframe'); 61 62 let listener = function(event) { 63 is(event.data, "successful", 64 "Expected 'successful', but got '" + event.data + "'"); 65 resolve(); 66 }; 67 68 window.addEventListener("message", listener); 69 70 ifrr.setAttribute('allow', 'payment'); 71 ifrr.src = "https://test1.example.com:443/tests/dom/payments/test/simple_payment_request.html"; 72 document.body.appendChild(ifrr); 73 74 ifrr.addEventListener('load', function() { 75 window.removeEventListener("message", listener); 76 }); 77 }); 78 } 79 80 function testRequestWithAttributeChanged() { 81 return new Promise((resolve, reject) => { 82 var ifrr = document.createElement('iframe'); 83 84 let i = 0; 85 86 ifrr.addEventListener('load', function() { 87 if (i === 0) { 88 ifrr.removeAttribute("allow"); 89 } 90 ifrr.contentWindow.postMessage('new PaymentRequest', '*'); 91 }); 92 93 let listener = function(event) { 94 i++; 95 if (i === 1) { 96 is(event.data, "successful", 97 "Expected successful when running with allow=payment attribute."); 98 ifrr.contentWindow.location.href = ifrr.src; 99 } else { 100 is(event.data, "SecurityError", 101 "Expected SecurityError when running without allow=payment attribute."); 102 window.removeEventListener("message", listener); 103 resolve(); 104 } 105 } 106 window.addEventListener("message", listener); 107 108 ifrr.setAttribute("allow", "payment"); 109 ifrr.src = "https://test1.example.com:443/tests/dom/payments/test/echo_payment_request.html"; 110 111 document.body.appendChild(ifrr); 112 }); 113 } 114 115 function testRequestInCrossOriginNestedIFrame() { 116 return new Promise((resolve, reject) => { 117 var ifrr = document.createElement('iframe'); 118 119 let listener = function(event) { 120 if (ifrr.allow != 'payment') { 121 is(event.data, "SecurityError", 122 "Expected 'SecurityError' without allow=payment in nested iframe"); 123 ifrr.setAttribute('allow', "payment"); 124 ifrr.contentWindow.location.href = ifrr.src; 125 } else { 126 is(event.data, "successful", 127 "Expected 'successful' with allow='payment' in nested iframe"); 128 window.removeEventListener("message", listener); 129 resolve(); 130 } 131 }; 132 window.addEventListener("message", listener); 133 134 ifrr.addEventListener("load", function() { 135 ifrr.contentWindow.postMessage('new PaymentRequest in a new iframe', '*'); 136 }) 137 138 ifrr.src = "https://test1.example.com:443/tests/dom/payments/test/echo_payment_request.html"; 139 document.body.appendChild(ifrr); 140 }); 141 } 142 143 function runTests() { 144 testRequestInSameOrigin() 145 .then(testRequestInIFrame) 146 .then(testRequestInIFrameWithAttribute) 147 .then(testRequestWithAttributeChanged) 148 .then(testRequestInCrossOriginNestedIFrame) 149 .then(SimpleTest.finish) 150 .catch( e => { 151 ok(false, "Unexpected error: " + e.name); 152 SimpleTest.finish(); 153 }); 154 } 155 156 window.addEventListener('load', function() { 157 SpecialPowers.pushPrefEnv({ 158 'set': [ 159 ['dom.payments.request.enabled', true], 160 ] 161 }, runTests); 162 }); 163 </script> 164 </head> 165 <body> 166 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1318988">Mozilla Bug 1318988</a> 167 </body> 168 </html>