tor-browser

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

test_canMakePayment.html (5013B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=1345365
      5 -->
      6 <head>
      7  <meta charset="utf-8">
      8  <title>Test for PaymentRequest API canMakePayment()</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  var gUrl = SimpleTest.getTestFileURL('GeneralChromeScript.js');
     17  var gScript = SpecialPowers.loadChromeScript(gUrl);
     18 
     19  const defaultMethods = [{
     20    supportedMethods: "basic-card",
     21  }];
     22  const defaultDetails = {
     23    total: {
     24      label: "Total",
     25      amount: {
     26        currency: "USD",
     27        value: "1.00"
     28      }
     29    },
     30  };
     31 
     32  const nonsupportedMethods = [{
     33    supportedMethods: "testing-payment-method",
     34  }];
     35 
     36  function testDefaultAction() {
     37    return new Promise((resolve, reject) => {
     38      const payRequest = new PaymentRequest(nonsupportedMethods, defaultDetails);
     39      payRequest.canMakePayment().then((result) => {
     40        ok(!result, "Should be resolved with false, but got " + result + ".");
     41        resolve();
     42      }).catch((err) => {
     43        ok(false, "Expected no error, but got '" + err.name +"'.");
     44        resolve();
     45      });
     46    });
     47  }
     48 
     49  function testSimple() {
     50    return new Promise((resolve, reject) => {
     51      const payRequest = new PaymentRequest(defaultMethods, defaultDetails);
     52      payRequest.canMakePayment().then((result) => {
     53        ok(result, "Should be resolved with true, but got " + result + ".");
     54        resolve();
     55      }).catch((err) => {
     56        ok(false, "Expected no error, but got '" + err.name +"'.");
     57        resolve();
     58      });
     59    });
     60  }
     61 
     62  function testAfterShow() {
     63    const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
     64 
     65    return new Promise((resolve, reject) => {
     66      const payRequest = new PaymentRequest(defaultMethods, defaultDetails);
     67      const acceptPromise = payRequest.show();
     68      payRequest.canMakePayment().then((result) => {
     69        ok(false, "Should throw 'InvalidStateError', but got resolved.");
     70        resolve();
     71      }).catch( (err) => {
     72        is(err.name, "InvalidStateError",
     73        "Expected 'InvalidStateError', but got '" + err.name + "'.");
     74        payRequest.abort().then((abortResult) => {
     75          is(abortResult, undefined, "abort() should be resolved with undefined.");
     76          resolve();
     77        }).catch( (error) => {
     78          ok(false, "Expected no error, but got '" + error.name + "'.");
     79          resolve();
     80        }).finally(handler.destruct);
     81      });
     82    });
     83  }
     84 
     85  function testAfterAbort() {
     86    const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
     87 
     88    return new Promise((resolve, reject) => {
     89      const payRequest = new PaymentRequest(defaultMethods, defaultDetails);
     90      const acceptPromise = payRequest.show();
     91      payRequest.abort().then((abortResult) => {
     92        payRequest.canMakePayment().then((result) => {
     93          ok(false, "Should throw 'InvalidStateError', but got resolved.");
     94          resolve();
     95        }).catch( (err) => {
     96          is(err.name, "InvalidStateError",
     97          "Expected 'InvalidStateError', but got '" + err.name + "'.");
     98          resolve();
     99        });
    100      }).catch( (err) => {
    101        ok(false, "Expected no error, but got '" + err.name +"'.");
    102        resolve();
    103      }).finally(handler.destruct);
    104    });
    105  }
    106 
    107  async function testNotAllowed() {
    108    let payRequest = new PaymentRequest(defaultMethods, defaultDetails);
    109    for (let i = 0; i < 1000; i++) {
    110      try {
    111        await payRequest.canMakePayment();
    112      } catch(err) {
    113        is(err.name, "NotAllowedError",
    114          "Expected 'NotAllowError', but got '" + err.name + "'");
    115        break;
    116      }
    117    }
    118    for (let i = 0; i < 1000; i++) {
    119      try {
    120        await new PaymentRequest(defaultMethods, defaultDetails).canMakePayment();
    121      } catch(err) {
    122        is(err.name, "NotAllowedError",
    123          "Expected 'NotAllowError', but got '" + err.name + "'");
    124        break;
    125      }
    126    }
    127  }
    128 
    129  function teardown() {
    130    gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
    131      gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
    132      gScript.destroy();
    133      SimpleTest.finish();
    134    });
    135    gScript.sendAsyncMessage("teardown");
    136  }
    137 
    138  function runTests() {
    139    testDefaultAction()
    140    .then(testSimple)
    141    .then(testAfterShow)
    142    .then(testAfterAbort)
    143    .then(testNotAllowed)
    144    .then(teardown)
    145    .catch(e => {
    146      ok(false, "Unexpected error: " + e.name);
    147      SimpleTest.finish();
    148    });
    149  }
    150 
    151  window.addEventListener('load', function() {
    152    SpecialPowers.pushPrefEnv({
    153      'set': [
    154        ['dom.payments.request.enabled', true],
    155      ]
    156    }, runTests);
    157  });
    158 
    159  </script>
    160 </head>
    161 <body>
    162 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1345365">Mozilla Bug 1345365</a>
    163 </body>
    164 </html>