tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>