diff --git a/dom/payments/PaymentRequestData.cpp b/dom/payments/PaymentRequestData.cpp index 498f08f82d87..ba23836a072f 100644 --- a/dom/payments/PaymentRequestData.cpp +++ b/dom/payments/PaymentRequestData.cpp @@ -365,58 +365,52 @@ PaymentDetails::Create(const IPCPaymentDetails& aIPCDetails, } nsCOMPtr displayItems; - if (aIPCDetails.displayItemsPassed()) { - nsCOMPtr items = do_CreateInstance(NS_ARRAY_CONTRACTID); - MOZ_ASSERT(items); - for (const IPCPaymentItem& displayItem : aIPCDetails.displayItems()) { - nsCOMPtr item; - rv = PaymentItem::Create(displayItem, getter_AddRefs(item)); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - rv = items->AppendElement(item); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } + nsCOMPtr items = do_CreateInstance(NS_ARRAY_CONTRACTID); + MOZ_ASSERT(items); + for (const IPCPaymentItem& displayItem : aIPCDetails.displayItems()) { + nsCOMPtr item; + rv = PaymentItem::Create(displayItem, getter_AddRefs(item)); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + rv = items->AppendElement(item); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; } - displayItems = items.forget(); } + displayItems = items.forget(); nsCOMPtr shippingOptions; - if (aIPCDetails.shippingOptionsPassed()) { - nsCOMPtr options = do_CreateInstance(NS_ARRAY_CONTRACTID); - MOZ_ASSERT(options); - for (const IPCPaymentShippingOption& shippingOption : aIPCDetails.shippingOptions()) { - nsCOMPtr option; - rv = PaymentShippingOption::Create(shippingOption, getter_AddRefs(option)); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - rv = options->AppendElement(option); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } + nsCOMPtr options = do_CreateInstance(NS_ARRAY_CONTRACTID); + MOZ_ASSERT(options); + for (const IPCPaymentShippingOption& shippingOption : aIPCDetails.shippingOptions()) { + nsCOMPtr option; + rv = PaymentShippingOption::Create(shippingOption, getter_AddRefs(option)); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + rv = options->AppendElement(option); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; } - shippingOptions = options.forget(); } + shippingOptions = options.forget(); nsCOMPtr modifiers; - if (aIPCDetails.modifiersPassed()) { - nsCOMPtr detailsModifiers = do_CreateInstance(NS_ARRAY_CONTRACTID); - MOZ_ASSERT(detailsModifiers); - for (const IPCPaymentDetailsModifier& modifier : aIPCDetails.modifiers()) { - nsCOMPtr detailsModifier; - rv = PaymentDetailsModifier::Create(modifier, getter_AddRefs(detailsModifier)); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - rv = detailsModifiers->AppendElement(detailsModifier); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } + nsCOMPtr detailsModifiers = do_CreateInstance(NS_ARRAY_CONTRACTID); + MOZ_ASSERT(detailsModifiers); + for (const IPCPaymentDetailsModifier& modifier : aIPCDetails.modifiers()) { + nsCOMPtr detailsModifier; + rv = PaymentDetailsModifier::Create(modifier, getter_AddRefs(detailsModifier)); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + rv = detailsModifiers->AppendElement(detailsModifier); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; } - modifiers = detailsModifiers.forget(); } + modifiers = detailsModifiers.forget(); nsCOMPtr details = new PaymentDetails(aIPCDetails.id(), total, displayItems, shippingOptions, diff --git a/dom/payments/PaymentRequestManager.cpp b/dom/payments/PaymentRequestManager.cpp index 03d708fc84c7..0ba6fba878b1 100644 --- a/dom/payments/PaymentRequestManager.cpp +++ b/dom/payments/PaymentRequestManager.cpp @@ -178,10 +178,7 @@ ConvertDetailsInit(JSContext* aCx, shippingOptions, modifiers, EmptyString(), // error message - EmptyString(), // shippingAddressErrors - aDetails.mDisplayItems.WasPassed(), - aDetails.mShippingOptions.WasPassed(), - aDetails.mModifiers.WasPassed()); + EmptyString()); // shippingAddressErrors return NS_OK; } @@ -223,10 +220,7 @@ ConvertDetailsUpdate(JSContext* aCx, shippingOptions, modifiers, error, - shippingAddressErrors, - aDetails.mDisplayItems.WasPassed(), - aDetails.mShippingOptions.WasPassed(), - aDetails.mModifiers.WasPassed()); + shippingAddressErrors); return NS_OK; } diff --git a/dom/payments/ipc/PPaymentRequest.ipdl b/dom/payments/ipc/PPaymentRequest.ipdl index f4b54fac8cf7..7f2f1311f810 100644 --- a/dom/payments/ipc/PPaymentRequest.ipdl +++ b/dom/payments/ipc/PPaymentRequest.ipdl @@ -56,9 +56,6 @@ struct IPCPaymentDetails IPCPaymentDetailsModifier[] modifiers; nsString error; nsString shippingAddressErrors; - bool displayItemsPassed; - bool shippingOptionsPassed; - bool modifiersPassed; }; struct IPCPaymentOptions diff --git a/dom/payments/test/ConstructorChromeScript.js b/dom/payments/test/ConstructorChromeScript.js index 69ca86702d24..bb1990425b62 100644 --- a/dom/payments/test/ConstructorChromeScript.js +++ b/dom/payments/test/ConstructorChromeScript.js @@ -45,14 +45,14 @@ function checkSimplestRequest(payRequest) { emitTestFail("total item's value should be '1.00'."); } - if (details.displayItems) { - emitTestFail("details.displayItems should be undefined."); + if (details.displayItems.length !== 0) { + emitTestFail("details.displayItems should be an empty array."); } - if (details.modifiers) { - emitTestFail("details.displayItems should be undefined."); + if (details.modifiers.length !== 0) { + emitTestFail("details.modifiers should be an empty array."); } - if (details.shippingOptions) { - emitTestFail("details.shippingOptions should be undefined."); + if (details.shippingOptions.length !== 0) { + emitTestFail("details.shippingOptions should be an empty array."); } // checking the default generated PaymentOptions parameter @@ -319,14 +319,14 @@ function checkNonBasicCardRequest(payRequest) { emitTestFail("total item's value should be '1.00'."); } - if (details.displayItems) { - emitTestFail("details.displayItems should be undefined."); + if (details.displayItems.length !== 0) { + emitTestFail("details.displayItems should be an zero length array."); } - if (details.modifiers) { - emitTestFail("details.displayItems should be undefined."); + if (details.displayItems.length !== 0) { + emitTestFail("details.modifiers should be an zero length array."); } - if (details.shippingOptions) { - emitTestFail("details.shippingOptions should be undefined."); + if (details.displayItems.length !== 0) { + emitTestFail("details.shippingOptions should be an zero length array."); } // checking the default generated PaymentOptions parameter diff --git a/dom/payments/test/browser_payment_in_different_tabs.js b/dom/payments/test/browser_payment_in_different_tabs.js index bb126792d5ca..515fc328c77d 100644 --- a/dom/payments/test/browser_payment_in_different_tabs.js +++ b/dom/payments/test/browser_payment_in_different_tabs.js @@ -2,30 +2,38 @@ // kTestRoot is from head.js const kTestPage = kTestRoot + "simple_payment_request.html"; - -add_task(async function() { +const TABS_TO_OPEN = 5; +add_task(async () => { Services.prefs.setBoolPref("dom.payments.request.enabled", true); - await BrowserTestUtils.withNewTab(kTestPage, - async function(browser) { - await BrowserTestUtils.withNewTab(kTestPage, - function(browser) { - const paymentSrv = Cc["@mozilla.org/dom/payments/payment-request-service;1"].getService(Ci.nsIPaymentRequestService); - ok(paymentSrv, "Fail to get PaymentRequestService."); - - const paymentEnum = paymentSrv.enumerate(); - ok(paymentEnum.hasMoreElements(), "PaymentRequestService should have at least one payment request."); - let tabIds = []; - while (paymentEnum.hasMoreElements()) { - let payment = paymentEnum.getNext().QueryInterface(Ci.nsIPaymentRequest); - ok(payment, "Fail to get existing payment request."); - checkSimplePayment(payment); - tabIds.push(payment.tabId); - } - is(tabIds.length, 2, "TabId array length should be 2."); - ok(tabIds[0] != tabIds[1], "TabIds should be different."); - Services.prefs.setBoolPref("dom.payments.request.enabled", false); - } - ); - } + const tabs = []; + const options = { + gBrowser: Services.wm.getMostRecentWindow("navigator:browser").gBrowser, + url: kTestPage, + }; + for (let i = 0; i < TABS_TO_OPEN; i++) { + const tab = await BrowserTestUtils.openNewForegroundTab(options); + tabs.push(tab); + } + const paymentSrv = Cc[ + "@mozilla.org/dom/payments/payment-request-service;1" + ].getService(Ci.nsIPaymentRequestService); + ok(paymentSrv, "Fail to get PaymentRequestService."); + const paymentEnum = paymentSrv.enumerate(); + ok( + paymentEnum.hasMoreElements(), + "PaymentRequestService should have at least one payment request." ); + const payments = new Set(); + while (paymentEnum.hasMoreElements()) { + const payment = paymentEnum.getNext().QueryInterface(Ci.nsIPaymentRequest); + ok(payment, "Fail to get existing payment request."); + checkSimplePayment(payment); + payments.add(payment); + } + is(payments.size, TABS_TO_OPEN, `Should be ${TABS_TO_OPEN} unique objects.`); + tabs.forEach(async tab => { + await TestUtils.waitForTick(); + BrowserTestUtils.removeTab(tab); + }); + Services.prefs.setBoolPref("dom.payments.request.enabled", false); }); diff --git a/dom/payments/test/head.js b/dom/payments/test/head.js index 8f5dde97a054..3aafda34c266 100644 --- a/dom/payments/test/head.js +++ b/dom/payments/test/head.js @@ -17,9 +17,9 @@ function checkSimplePayment(aSimplePayment) { is(details.totalItem.amount.currency, "USD", "total item's currency should be 'USD'."); is(details.totalItem.amount.value, "55.00", "total item's value should be '55.00'."); - ok(!details.displayItems, "details.displayItems should be undefined."); - ok(!details.modifiers, "details.modifiers should be undefined."); - ok(!details.shippingOptions, "details.shippingOptions should be undefined."); + is(details.displayItems.length, 0, "details.displayItems should be a zero length array."); + is(details.modifiers.length, 0, "details.modifiers should be a zero length array."); + is(details.shippingOptions.length, 0, "details.shippingOptions should be a zero length array."); // checking the default generated PaymentOptions parameter const paymentOptions = aSimplePayment.paymentOptions; diff --git a/dom/payments/test/simple_payment_request.html b/dom/payments/test/simple_payment_request.html index 76e38b602b88..192405318f9e 100644 --- a/dom/payments/test/simple_payment_request.html +++ b/dom/payments/test/simple_payment_request.html @@ -1,47 +1,42 @@ - - - - Payment Request Testing - - - - -

simple payment request.html

- - - + }; +} +