ShippingOptionsChromeScript.js (3515B)
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", message); 19 } 20 function emitTestPass(message) { 21 sendAsyncMessage("test-pass", message); 22 } 23 24 let expectedRequestOption = null; 25 let expectedUpdatedOption = null; 26 let changeShippingOption = null; 27 28 function showResponse(requestId) { 29 const showResponseData = Cc[ 30 "@mozilla.org/dom/payments/general-response-data;1" 31 ].createInstance(Ci.nsIGeneralResponseData); 32 showResponseData.initData({}); 33 const showActionResponse = Cc[ 34 "@mozilla.org/dom/payments/payment-show-action-response;1" 35 ].createInstance(Ci.nsIPaymentShowActionResponse); 36 showActionResponse.init( 37 requestId, 38 Ci.nsIPaymentActionResponse.PAYMENT_ACCEPTED, 39 "testing-payment-method", // payment method 40 showResponseData, // payment method data 41 "Bill A. Pacheco", // payer name 42 "", // payer email 43 "" 44 ); // payer phone 45 paymentSrv.respondPayment( 46 showActionResponse.QueryInterface(Ci.nsIPaymentActionResponse) 47 ); 48 } 49 50 function showRequest(requestId) { 51 let request = paymentSrv.getPaymentRequestById(requestId); 52 const message = 53 "request.shippingOption should be " + 54 expectedRequestOption + 55 " when calling show(), but got " + 56 request.shippingOption + 57 "."; 58 if (request.shippingOption != expectedRequestOption) { 59 emitTestFail(message); 60 } else { 61 emitTestPass(message); 62 } 63 if (changeShippingOption) { 64 paymentSrv.changeShippingOption(requestId, changeShippingOption); 65 } else { 66 showResponse(requestId); 67 } 68 } 69 70 function updateRequest(requestId) { 71 let request = paymentSrv.getPaymentRequestById(requestId); 72 const message = 73 "request.shippingOption should be " + 74 expectedUpdatedOption + 75 " when calling updateWith(), but got " + 76 request.shippingOption + 77 "."; 78 if (request.shippingOption != expectedUpdatedOption) { 79 emitTestFail(message); 80 } else { 81 emitTestPass(message); 82 } 83 showResponse(requestId); 84 } 85 86 const TestingUIService = { 87 showPayment: showRequest, 88 abortPayment(requestId) {}, 89 completePayment(requestId) { 90 let request = paymentSrv.getPaymentRequestById(requestId); 91 let completeResponse = Cc[ 92 "@mozilla.org/dom/payments/payment-complete-action-response;1" 93 ].createInstance(Ci.nsIPaymentCompleteActionResponse); 94 completeResponse.init( 95 requestId, 96 Ci.nsIPaymentActionResponse.COMPLETE_SUCCEEDED 97 ); 98 paymentSrv.respondPayment( 99 completeResponse.QueryInterface(Ci.nsIPaymentActionResponse) 100 ); 101 }, 102 updatePayment: updateRequest, 103 closePayment(requestId) {}, 104 QueryInterface: ChromeUtils.generateQI(["nsIPaymentUIService"]), 105 }; 106 107 paymentSrv.setTestingUIService( 108 TestingUIService.QueryInterface(Ci.nsIPaymentUIService) 109 ); 110 111 addMessageListener("set-expected-results", function (results) { 112 expectedRequestOption = results.requestResult; 113 expectedUpdatedOption = results.responseResult; 114 changeShippingOption = results.changeOptionResult; 115 }); 116 117 addMessageListener("teardown", function () { 118 paymentSrv.setTestingUIService(null); 119 sendAsyncMessage("teardown-complete"); 120 });