tor-browser

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

test_payerDetails.html (3445B)


      1 <!DOCTYPE HTML>
      2 <meta charset="utf-8">
      3 <title>Test for PaymentResponse.prototype.onpayerdetailchange</title>
      4 <link rel="stylesheet" href="/tests/SimpleTest/test.css" />
      5 <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6 <script src="./DefaultData.js"></script>
      7 <script>
      8  SimpleTest.waitForExplicitFinish();
      9 
     10  const gUrl = SimpleTest.getTestFileURL("PayerDetailsChromeScript.js");
     11  const gScript = SpecialPowers.loadChromeScript(gUrl);
     12 
     13  function okTester(result) {
     14    return message => ok(result, message);
     15  }
     16  const passListener = okTester(true);
     17  const failListener = okTester(false);
     18 
     19  gScript.addMessageListener("test-fail", failListener);
     20  gScript.addMessageListener("test-pass", passListener);
     21 
     22  function sendOnce(message) {
     23    return data => {
     24      return new Promise(resolve => {
     25        const doneMsg = `${message}-complete`;
     26        gScript.addMessageListener(doneMsg, function listener() {
     27          gScript.removeMessageListener(doneMsg, listener);
     28          resolve();
     29        });
     30        gScript.sendAsyncMessage(message, data);
     31      });
     32    };
     33  }
     34  const sendTearDown = sendOnce("teardown");
     35 
     36  async function loopTest(iterations) {
     37    const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(
     38      true
     39    );
     40    const options = {
     41      requestPayerName: true,
     42      requestPayerEmail: true,
     43      requestPayerPhone: true,
     44    }
     45    const request = new PaymentRequest(defaultMethods, defaultDetails, options);
     46    const response = await request.show();
     47    is(response.payerName, "", ".payerName must initially be ''");
     48    is(response.payerEmail, "", ".payerEmail must initially be ''");
     49    is(response.payerPhone, "", ".payerPhone must initially be ''");
     50    for (let i = 0; i < iterations; i++) {
     51      const payer = {
     52        name: `test name ${i}`,
     53        phone: `test phone ${i}`,
     54        email: `test email ${i}`,
     55      }
     56 
     57      // Capture the event to firing
     58      const eventPromise = new Promise(resolve => {
     59        response.onpayerdetailchange = resolve;
     60      });
     61      const retryPromise = response.retry({
     62        error: "retry-fire-payerdetaichangeevent",
     63        payer
     64      });
     65      const event = await eventPromise;
     66 
     67      // Check things got updated
     68      is(response.payerName, payer.name, `.payerName must be "${payer.name}"`);
     69      is(response.payerEmail, payer.email, `.payerEmail must be "${payer.email}"`);
     70      is(response.payerPhone, payer.phone, `.payerPhone must be "${payer.phone}"`);
     71 
     72      // Finally, let's do an updateWith()
     73      event.updateWith({ error: "update-with", payerErrors: payer, ...defaultDetails });
     74 
     75      await retryPromise;
     76    }
     77 
     78    await response.complete("success");
     79    handler.destruct();
     80  }
     81 
     82  async function teardown() {
     83    await sendTearDown();
     84    gScript.removeMessageListener("test-fail", failListener);
     85    gScript.removeMessageListener("test-pass", passListener);
     86    gScript.destroy();
     87    SimpleTest.finish();
     88  }
     89 
     90  async function runTests() {
     91    try {
     92      await loopTest(5); // lets go around 5 times
     93    } catch (err) {
     94      ok(false, `Unexpected error: ${err}.`);
     95    } finally {
     96      await teardown();
     97    }
     98  }
     99 
    100  window.addEventListener("load", () => {
    101    const prefs = [["dom.payments.request.enabled", true]];
    102    SpecialPowers.pushPrefEnv({ set: prefs }, runTests);
    103  });
    104 </script>
    105 
    106 <body>
    107  <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1472026">Mozilla Bug 1472026</a>