tor-browser

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

ClosePaymentChromeScript.js (4672B)


      1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* Any copyright is dedicated to the Public Domain.
      3   http://creativecommons.org/publicdomain/zero/1.0/ */
      4 
      5 /* eslint-env mozilla/chrome-script */
      6 
      7 "use strict";
      8 
      9 const { XPCOMUtils } = ChromeUtils.importESModule(
     10  "resource://gre/modules/XPCOMUtils.sys.mjs"
     11 );
     12 
     13 const paymentSrv = Cc[
     14  "@mozilla.org/dom/payments/payment-request-service;1"
     15 ].getService(Ci.nsIPaymentRequestService);
     16 
     17 function emitTestFail(message) {
     18  sendAsyncMessage("test-fail", `${DummyUIService.testName}: ${message}`);
     19 }
     20 function emitTestPass(message) {
     21  sendAsyncMessage("test-pass", `${DummyUIService.testName}: ${message}`);
     22 }
     23 
     24 addMessageListener("close-check", function () {
     25  const paymentEnum = paymentSrv.enumerate();
     26  if (paymentEnum.hasMoreElements()) {
     27    emitTestFail("Non-empty PaymentRequest queue in PaymentRequestService.");
     28  } else {
     29    emitTestPass("Got empty PaymentRequest queue in PaymentRequestService.");
     30  }
     31  sendAsyncMessage("close-check-complete");
     32 });
     33 
     34 var setPaymentNums = 0;
     35 
     36 addMessageListener("payment-num-set", function () {
     37  setPaymentNums = 0;
     38  const paymentEnum = paymentSrv.enumerate();
     39  while (paymentEnum.hasMoreElements()) {
     40    setPaymentNums = setPaymentNums + 1;
     41    paymentEnum.getNext();
     42  }
     43  sendAsyncMessage("payment-num-set-complete");
     44 });
     45 
     46 addMessageListener("payment-num-check", function (expectedNumPayments) {
     47  const paymentEnum = paymentSrv.enumerate();
     48  let numPayments = 0;
     49  while (paymentEnum.hasMoreElements()) {
     50    numPayments = numPayments + 1;
     51    paymentEnum.getNext();
     52  }
     53  if (numPayments !== expectedNumPayments + setPaymentNums) {
     54    emitTestFail(
     55      "Expected '" +
     56        expectedNumPayments +
     57        "' PaymentRequests in PaymentRequestService" +
     58        ", but got '" +
     59        numPayments +
     60        "'."
     61    );
     62  } else {
     63    emitTestPass(
     64      "Got expected '" +
     65        numPayments +
     66        "' PaymentRequests in PaymentRequestService."
     67    );
     68  }
     69  // force cleanup PaymentRequests for clear environment to next testcase.
     70  paymentSrv.cleanup();
     71  sendAsyncMessage("payment-num-check-complete");
     72 });
     73 
     74 addMessageListener("test-setup", testName => {
     75  DummyUIService.testName = testName;
     76  sendAsyncMessage("test-setup-complete");
     77 });
     78 
     79 addMessageListener("reject-payment", expectedError => {
     80  try {
     81    const responseData = Cc[
     82      "@mozilla.org/dom/payments/general-response-data;1"
     83    ].createInstance(Ci.nsIGeneralResponseData);
     84    responseData.initData({});
     85    const showResponse = Cc[
     86      "@mozilla.org/dom/payments/payment-show-action-response;1"
     87    ].createInstance(Ci.nsIPaymentShowActionResponse);
     88    showResponse.init(
     89      DummyUIService.respondRequestId,
     90      Ci.nsIPaymentActionResponse.PAYMENT_REJECTED,
     91      "", // payment method
     92      responseData, // payment method data
     93      "", // payer name
     94      "", // payer email
     95      ""
     96    ); // payer phone
     97    paymentSrv.respondPayment(
     98      showResponse.QueryInterface(Ci.nsIPaymentActionResponse)
     99    );
    100    emitTestPass("Reject PaymentRequest successfully");
    101  } catch (error) {
    102    if (expectedError) {
    103      if (error.name === "NS_ERROR_FAILURE") {
    104        emitTestPass(
    105          "Got expected NS_ERROR_FAILURE when responding a closed PaymentRequest"
    106        );
    107        sendAsyncMessage("reject-payment-complete");
    108        return;
    109      }
    110    }
    111    emitTestFail(
    112      "Unexpected error '" +
    113        error.name +
    114        "' when reponding a closed PaymentRequest"
    115    );
    116  }
    117  sendAsyncMessage("reject-payment-complete");
    118 });
    119 
    120 addMessageListener("update-payment", () => {
    121  try {
    122    paymentSrv.changeShippingOption(DummyUIService.respondRequestId, "");
    123    emitTestPass("Change shippingOption succefully");
    124  } catch (error) {
    125    emitTestFail(
    126      "Unexpected error '" + error.name + "' when changing the shipping option"
    127    );
    128  }
    129  sendAsyncMessage("update-payment-complete");
    130 });
    131 
    132 const DummyUIService = {
    133  testName: "",
    134  respondRequestId: "",
    135  showPayment: requestId => {
    136    DummyUIService.respondRequestId = requestId;
    137  },
    138  abortPayment: requestId => {
    139    DummyUIService.respondRequestId = requestId;
    140  },
    141  completePayment: requestId => {
    142    DummyUIService.respondRequestId = requestId;
    143  },
    144  updatePayment: requestId => {
    145    DummyUIService.respondRequestId = requestId;
    146  },
    147  closePayment: requestId => {
    148    this.respondRequestId = requestId;
    149  },
    150  QueryInterface: ChromeUtils.generateQI(["nsIPaymentUIService"]),
    151 };
    152 
    153 paymentSrv.setTestingUIService(
    154  DummyUIService.QueryInterface(Ci.nsIPaymentUIService)
    155 );
    156 
    157 addMessageListener("teardown", function () {
    158  paymentSrv.setTestingUIService(null);
    159  sendAsyncMessage("teardown-complete");
    160 });