BasiccardChromeScript.js (10880B)
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 21 const billingAddress = Cc[ 22 "@mozilla.org/dom/payments/payment-address;1" 23 ].createInstance(Ci.nsIPaymentAddress); 24 const addressLine = Cc["@mozilla.org/array;1"].createInstance( 25 Ci.nsIMutableArray 26 ); 27 const address = Cc["@mozilla.org/supports-string;1"].createInstance( 28 Ci.nsISupportsString 29 ); 30 address.data = "Easton Ave"; 31 addressLine.appendElement(address); 32 billingAddress.init( 33 "USA", // country 34 addressLine, // address line 35 "CA", // region 36 "CA", // region code 37 "San Bruno", // city 38 "", // dependent locality 39 "94066", // postal code 40 "123456", // sorting code 41 "", // organization 42 "Bill A. Pacheco", // recipient 43 "+14344413879" 44 ); // phone 45 46 const specialAddress = Cc[ 47 "@mozilla.org/dom/payments/payment-address;1" 48 ].createInstance(Ci.nsIPaymentAddress); 49 const specialAddressLine = Cc["@mozilla.org/array;1"].createInstance( 50 Ci.nsIMutableArray 51 ); 52 const specialData = Cc["@mozilla.org/supports-string;1"].createInstance( 53 Ci.nsISupportsString 54 ); 55 specialData.data = ":$%@&*"; 56 specialAddressLine.appendElement(specialData); 57 specialAddress.init( 58 "USA", // country 59 specialAddressLine, // address line 60 "CA", // region 61 "CA", // region code 62 "San Bruno", // city 63 "", // dependent locality 64 "94066", // postal code 65 "123456", // sorting code 66 "", // organization 67 "Bill A. Pacheco", // recipient 68 "+14344413879" 69 ); // phone 70 71 const basiccardResponseData = Cc[ 72 "@mozilla.org/dom/payments/basiccard-response-data;1" 73 ].createInstance(Ci.nsIBasicCardResponseData); 74 75 const basiccardChangeDetails = Cc[ 76 "@mozilla.org/dom/payments/basiccard-change-details;1" 77 ].createInstance(Ci.nsIBasicCardChangeDetails); 78 79 const showResponse = Cc[ 80 "@mozilla.org/dom/payments/payment-show-action-response;1" 81 ].createInstance(Ci.nsIPaymentShowActionResponse); 82 83 function abortPaymentResponse(requestId) { 84 let abortResponse = Cc[ 85 "@mozilla.org/dom/payments/payment-abort-action-response;1" 86 ].createInstance(Ci.nsIPaymentAbortActionResponse); 87 abortResponse.init(requestId, Ci.nsIPaymentActionResponse.ABORT_SUCCEEDED); 88 paymentSrv.respondPayment( 89 abortResponse.QueryInterface(Ci.nsIPaymentActionResponse) 90 ); 91 } 92 93 function completePaymentResponse(requestId) { 94 let completeResponse = Cc[ 95 "@mozilla.org/dom/payments/payment-complete-action-response;1" 96 ].createInstance(Ci.nsIPaymentCompleteActionResponse); 97 completeResponse.init( 98 requestId, 99 Ci.nsIPaymentActionResponse.COMPLETE_SUCCEEDED 100 ); 101 paymentSrv.respondPayment( 102 completeResponse.QueryInterface(Ci.nsIPaymentActionResponse) 103 ); 104 } 105 106 function showRequest(requestId) { 107 if (DummyUIService.showAction === "payment-method-change") { 108 basiccardChangeDetails.initData(billingAddress); 109 try { 110 paymentSrv.changePaymentMethod( 111 requestId, 112 "basic-card", 113 basiccardChangeDetails.QueryInterface(Ci.nsIMethodChangeDetails) 114 ); 115 } catch (error) { 116 emitTestFail( 117 `Unexpected error (${error.name}) when calling PaymentRequestService::changePaymentMethod` 118 ); 119 } 120 return; 121 } 122 if (DummyUIService.showAction === "detailBasicCardResponse") { 123 try { 124 basiccardResponseData.initData( 125 "Bill A. Pacheco", // cardholderName 126 "4916855166538720", // cardNumber 127 "01", // expiryMonth 128 "2024", // expiryYear 129 "180", // cardSecurityCode 130 billingAddress 131 ); // billingAddress 132 } catch (e) { 133 emitTestFail("Fail to initialize basic card response data."); 134 } 135 } 136 if (DummyUIService.showAction === "simpleBasicCardResponse") { 137 try { 138 basiccardResponseData.initData( 139 "", // cardholderName 140 "4916855166538720", // cardNumber 141 "", // expiryMonth 142 "", // expiryYear 143 "", // cardSecurityCode 144 null 145 ); // billingAddress 146 } catch (e) { 147 emitTestFail("Fail to initialize basic card response data."); 148 } 149 } 150 if (DummyUIService.showAction === "specialAddressResponse") { 151 try { 152 basiccardResponseData.initData( 153 "Bill A. Pacheco", // cardholderName 154 "4916855166538720", // cardNumber 155 "01", // expiryMonth 156 "2024", // expiryYear 157 "180", // cardSecurityCode 158 specialAddress 159 ); // billingAddress 160 } catch (e) { 161 emitTestFail("Fail to initialize basic card response data."); 162 } 163 } 164 showResponse.init( 165 requestId, 166 Ci.nsIPaymentActionResponse.PAYMENT_ACCEPTED, 167 "basic-card", // payment method 168 basiccardResponseData, // payment method data 169 "Bill A. Pacheco", // payer name 170 "", // payer email 171 "" 172 ); // payer phone 173 paymentSrv.respondPayment( 174 showResponse.QueryInterface(Ci.nsIPaymentActionResponse) 175 ); 176 } 177 178 const DummyUIService = { 179 testName: "", 180 showAction: "", 181 showPayment: showRequest, 182 abortPayment: abortPaymentResponse, 183 completePayment: completePaymentResponse, 184 updatePayment: requestId => { 185 try { 186 basiccardResponseData.initData( 187 "Bill A. Pacheco", // cardholderName 188 "4916855166538720", // cardNumber 189 "01", // expiryMonth 190 "2024", // expiryYear 191 "180", // cardSecurityCode 192 billingAddress 193 ); // billingAddress 194 } catch (e) { 195 emitTestFail("Fail to initialize basic card response data."); 196 } 197 showResponse.init( 198 requestId, 199 Ci.nsIPaymentActionResponse.PAYMENT_ACCEPTED, 200 "basic-card", // payment method 201 basiccardResponseData, // payment method data 202 "Bill A. Pacheco", // payer name 203 "", // payer email 204 "" 205 ); // payer phone 206 paymentSrv.respondPayment( 207 showResponse.QueryInterface(Ci.nsIPaymentActionResponse) 208 ); 209 }, 210 closePayment: requestId => {}, 211 QueryInterface: ChromeUtils.generateQI(["nsIPaymentUIService"]), 212 }; 213 214 paymentSrv.setTestingUIService( 215 DummyUIService.QueryInterface(Ci.nsIPaymentUIService) 216 ); 217 218 addMessageListener("set-detailed-ui-service", function (testName) { 219 DummyUIService.testName = testName; 220 DummyUIService.showAction = "detailBasicCardResponse"; 221 sendAsyncMessage("set-detailed-ui-service-complete"); 222 }); 223 224 addMessageListener("set-simple-ui-service", function (testName) { 225 DummyUIService.testName = testName; 226 DummyUIService.showAction = "simpleBasicCardResponse"; 227 sendAsyncMessage("set-simple-ui-service-complete"); 228 }); 229 230 addMessageListener("set-special-address-ui-service", function (testName) { 231 DummyUIService.testName = testName; 232 DummyUIService.showAction = "specialAddressResponse"; 233 sendAsyncMessage("set-special-address-ui-service-complete"); 234 }); 235 236 addMessageListener("method-change-to-basic-card", function (testName) { 237 DummyUIService.testName = testName; 238 DummyUIService.showAction = "payment-method-change"; 239 sendAsyncMessage("method-change-to-basic-card-complete"); 240 }); 241 242 addMessageListener("error-response-test", function (testName) { 243 // test empty cardNumber 244 try { 245 basiccardResponseData.initData("", "", "", "", "", null); 246 emitTestFail( 247 "BasicCardResponse should not be initialized with empty cardNumber." 248 ); 249 } catch (e) { 250 if (e.name != "NS_ERROR_FAILURE") { 251 emitTestFail( 252 "Empty cardNumber expected 'NS_ERROR_FAILURE', but got " + e.name + "." 253 ); 254 } 255 } 256 257 // test invalid expiryMonth 123 258 try { 259 basiccardResponseData.initData("", "4916855166538720", "123", "", "", null); 260 emitTestFail( 261 "BasicCardResponse should not be initialized with invalid expiryMonth '123'." 262 ); 263 } catch (e) { 264 if (e.name != "NS_ERROR_FAILURE") { 265 emitTestFail( 266 "expiryMonth 123 expected 'NS_ERROR_FAILURE', but got " + e.name + "." 267 ); 268 } 269 } 270 // test invalid expiryMonth 99 271 try { 272 basiccardResponseData.initData("", "4916855166538720", "99", "", "", null); 273 emitTestFail( 274 "BasicCardResponse should not be initialized with invalid expiryMonth '99'." 275 ); 276 } catch (e) { 277 if (e.name != "NS_ERROR_FAILURE") { 278 emitTestFail( 279 "expiryMonth 99 xpected 'NS_ERROR_FAILURE', but got " + e.name + "." 280 ); 281 } 282 } 283 // test invalid expiryMonth ab 284 try { 285 basiccardResponseData.initData("", "4916855166538720", "ab", "", "", null); 286 emitTestFail( 287 "BasicCardResponse should not be initialized with invalid expiryMonth 'ab'." 288 ); 289 } catch (e) { 290 if (e.name != "NS_ERROR_FAILURE") { 291 emitTestFail( 292 "expiryMonth ab expected 'NS_ERROR_FAILURE', but got " + e.name + "." 293 ); 294 } 295 } 296 // test invalid expiryYear abcd 297 try { 298 basiccardResponseData.initData( 299 "", 300 "4916855166538720", 301 "", 302 "abcd", 303 "", 304 null 305 ); 306 emitTestFail( 307 "BasicCardResponse should not be initialized with invalid expiryYear 'abcd'." 308 ); 309 } catch (e) { 310 if (e.name != "NS_ERROR_FAILURE") { 311 emitTestFail( 312 "expiryYear abcd expected 'NS_ERROR_FAILURE', but got " + e.name + "." 313 ); 314 } 315 } 316 // test invalid expiryYear 11111 317 try { 318 basiccardResponseData.initData( 319 "", 320 "4916855166538720", 321 "", 322 "11111", 323 "", 324 null 325 ); 326 emitTestFail( 327 "BasicCardResponse should not be initialized with invalid expiryYear '11111'." 328 ); 329 } catch (e) { 330 if (e.name != "NS_ERROR_FAILURE") { 331 emitTestFail( 332 "expiryYear 11111 expected 'NS_ERROR_FAILURE', but got " + e.name + "." 333 ); 334 } 335 } 336 337 const responseData = Cc[ 338 "@mozilla.org/dom/payments/general-response-data;1" 339 ].createInstance(Ci.nsIGeneralResponseData); 340 try { 341 responseData.initData({}); 342 } catch (e) { 343 emitTestFail("Fail to initialize response data with empty object."); 344 } 345 346 try { 347 showResponse.init( 348 "testid", 349 Ci.nsIPaymentActionResponse.PAYMENT_ACCEPTED, 350 "basic-card", // payment method 351 responseData, // payment method data 352 "Bill A. Pacheco", // payer name 353 "", // payer email 354 "" 355 ); // payer phone 356 emitTestFail( 357 "nsIPaymentShowActionResponse should not be initialized with basic-card method and nsIGeneralResponseData." 358 ); 359 } catch (e) { 360 if (e.name != "NS_ERROR_FAILURE") { 361 emitTestFail( 362 "ShowResponse init expected 'NS_ERROR_FAILURE', but got " + e.name + "." 363 ); 364 } 365 } 366 sendAsyncMessage("error-response-test-complete"); 367 }); 368 369 addMessageListener("teardown", function () { 370 paymentSrv.setTestingUIService(null); 371 sendAsyncMessage("teardown-complete"); 372 });