tor-browser

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

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>