Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/dom/payments/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 23 kB image not shown  

Quelle  PaymentRequestData.cpp   Sprache: C

 
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


#include "mozilla/dom/PaymentRequestBinding.h"
#include "mozilla/dom/ToJSValue.h"
#include "nsArrayUtils.h"
#include "nsComponentManagerUtils.h"
#include "nsIMutableArray.h"
#include "nsUnicharUtils.h"
#include "PaymentRequestData.h"
#include "PaymentRequestUtils.h"

namespace mozilla::dom::payments {

/* PaymentMethodData */

NS_IMPL_ISUPPORTS(PaymentMethodData, nsIPaymentMethodData)

PaymentMethodData::PaymentMethodData(const nsAString& aSupportedMethods,
                                     const nsAString& aData)
    : mSupportedMethods(aSupportedMethods), mData(aData) {}

nsresult PaymentMethodData::Create(const IPCPaymentMethodData& aIPCMethodData,
                                   nsIPaymentMethodData** aMethodData) {
  NS_ENSURE_ARG_POINTER(aMethodData);
  nsCOMPtr<nsIPaymentMethodData> methodData = new PaymentMethodData(
      aIPCMethodData.supportedMethods(), aIPCMethodData.data());
  methodData.forget(aMethodData);
  return NS_OK;
}

NS_IMETHODIMP
PaymentMethodData::GetSupportedMethods(nsAString& aSupportedMethods) {
  aSupportedMethods = mSupportedMethods;
  return NS_OK;
}

NS_IMETHODIMP
PaymentMethodData::GetData(JSContext* aCx, JS::MutableHandle<JS::Value> aData) {
  if (mData.IsEmpty()) {
    aData.set(JS::NullValue());
    return NS_OK;
  }
  nsresult rv = DeserializeToJSValue(mData, aCx, aData);
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return rv;
  }
  return NS_OK;
}

/* PaymentCurrencyAmount */

NS_IMPL_ISUPPORTS(PaymentCurrencyAmount, nsIPaymentCurrencyAmount)

PaymentCurrencyAmount::PaymentCurrencyAmount(const nsAString& aCurrency,
                                             const nsAString& aValue)
    : mValue(aValue) {
  /*
   *  According to the spec
   *  https://w3c.github.io/payment-request/#validity-checkers
   *  Set amount.currency to the result of ASCII uppercasing amount.currency.
   */

  ToUpperCase(aCurrency, mCurrency);
}

nsresult PaymentCurrencyAmount::Create(
    const IPCPaymentCurrencyAmount& aIPCAmount,
    nsIPaymentCurrencyAmount** aAmount) {
  NS_ENSURE_ARG_POINTER(aAmount);
  nsCOMPtr<nsIPaymentCurrencyAmount> amount =
      new PaymentCurrencyAmount(aIPCAmount.currency(), aIPCAmount.value());
  amount.forget(aAmount);
  return NS_OK;
}

NS_IMETHODIMP
PaymentCurrencyAmount::GetCurrency(nsAString& aCurrency) {
  aCurrency = mCurrency;
  return NS_OK;
}

NS_IMETHODIMP
PaymentCurrencyAmount::GetValue(nsAString& aValue) {
  aValue = mValue;
  return NS_OK;
}

/* PaymentItem */

NS_IMPL_ISUPPORTS(PaymentItem, nsIPaymentItem)

PaymentItem::PaymentItem(const nsAString& aLabel,
                         nsIPaymentCurrencyAmount* aAmount, const bool aPending)
    : mLabel(aLabel), mAmount(aAmount), mPending(aPending) {}

nsresult PaymentItem::Create(const IPCPaymentItem& aIPCItem,
                             nsIPaymentItem** aItem) {
  NS_ENSURE_ARG_POINTER(aItem);
  nsCOMPtr<nsIPaymentCurrencyAmount> amount;
  nsresult rv =
      PaymentCurrencyAmount::Create(aIPCItem.amount(), getter_AddRefs(amount));
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return rv;
  }
  nsCOMPtr<nsIPaymentItem> item =
      new PaymentItem(aIPCItem.label(), amount, aIPCItem.pending());
  item.forget(aItem);
  return NS_OK;
}

NS_IMETHODIMP
PaymentItem::GetLabel(nsAString& aLabel) {
  aLabel = mLabel;
  return NS_OK;
}

NS_IMETHODIMP
PaymentItem::GetAmount(nsIPaymentCurrencyAmount** aAmount) {
  NS_ENSURE_ARG_POINTER(aAmount);
  MOZ_ASSERT(mAmount);
  nsCOMPtr<nsIPaymentCurrencyAmount> amount = mAmount;
  amount.forget(aAmount);
  return NS_OK;
}

NS_IMETHODIMP
PaymentItem::GetPending(bool* aPending) {
  NS_ENSURE_ARG_POINTER(aPending);
  *aPending = mPending;
  return NS_OK;
}

/* PaymentDetailsModifier */

NS_IMPL_ISUPPORTS(PaymentDetailsModifier, nsIPaymentDetailsModifier)

PaymentDetailsModifier::PaymentDetailsModifier(
    const nsAString& aSupportedMethods, nsIPaymentItem* aTotal,
    nsIArray* aAdditionalDisplayItems, const nsAString& aData)
    : mSupportedMethods(aSupportedMethods),
      mTotal(aTotal),
      mAdditionalDisplayItems(aAdditionalDisplayItems),
      mData(aData) {}

nsresult PaymentDetailsModifier::Create(
    const IPCPaymentDetailsModifier& aIPCModifier,
    nsIPaymentDetailsModifier** aModifier) {
  NS_ENSURE_ARG_POINTER(aModifier);
  nsCOMPtr<nsIPaymentItem> total;
  nsresult rv =
      PaymentItem::Create(aIPCModifier.total(), getter_AddRefs(total));
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return rv;
  }

  nsCOMPtr<nsIArray> displayItems;
  if (aIPCModifier.additionalDisplayItemsPassed()) {
    nsCOMPtr<nsIMutableArray> items = do_CreateInstance(NS_ARRAY_CONTRACTID);
    MOZ_ASSERT(items);
    for (const IPCPaymentItem& item : aIPCModifier.additionalDisplayItems()) {
      nsCOMPtr<nsIPaymentItem> additionalItem;
      rv = PaymentItem::Create(item, getter_AddRefs(additionalItem));
      if (NS_WARN_IF(NS_FAILED(rv))) {
        return rv;
      }
      rv = items->AppendElement(additionalItem);
      if (NS_WARN_IF(NS_FAILED(rv))) {
        return rv;
      }
    }
    displayItems = std::move(items);
  }
  nsCOMPtr<nsIPaymentDetailsModifier> modifier =
      new PaymentDetailsModifier(aIPCModifier.supportedMethods(), total,
                                 displayItems, aIPCModifier.data());
  modifier.forget(aModifier);
  return NS_OK;
}

NS_IMETHODIMP
PaymentDetailsModifier::GetSupportedMethods(nsAString& aSupportedMethods) {
  aSupportedMethods = mSupportedMethods;
  return NS_OK;
}

NS_IMETHODIMP
PaymentDetailsModifier::GetTotal(nsIPaymentItem** aTotal) {
  NS_ENSURE_ARG_POINTER(aTotal);
  MOZ_ASSERT(mTotal);
  nsCOMPtr<nsIPaymentItem> total = mTotal;
  total.forget(aTotal);
  return NS_OK;
}

NS_IMETHODIMP
PaymentDetailsModifier::GetAdditionalDisplayItems(
    nsIArray** aAdditionalDisplayItems) {
  NS_ENSURE_ARG_POINTER(aAdditionalDisplayItems);
  nsCOMPtr<nsIArray> additionalItems = mAdditionalDisplayItems;
  additionalItems.forget(aAdditionalDisplayItems);
  return NS_OK;
}

NS_IMETHODIMP
PaymentDetailsModifier::GetData(JSContext* aCx,
                                JS::MutableHandle<JS::Value> aData) {
  if (mData.IsEmpty()) {
    aData.set(JS::NullValue());
    return NS_OK;
  }
  nsresult rv = DeserializeToJSValue(mData, aCx, aData);
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return rv;
  }
  return NS_OK;
}

/* PaymentShippingOption */

NS_IMPL_ISUPPORTS(PaymentShippingOption, nsIPaymentShippingOption)

PaymentShippingOption::PaymentShippingOption(const nsAString& aId,
                                             const nsAString& aLabel,
                                             nsIPaymentCurrencyAmount* aAmount,
                                             const bool aSelected)
    : mId(aId), mLabel(aLabel), mAmount(aAmount), mSelected(aSelected) {}

nsresult PaymentShippingOption::Create(
    const IPCPaymentShippingOption& aIPCOption,
    nsIPaymentShippingOption** aOption) {
  NS_ENSURE_ARG_POINTER(aOption);
  nsCOMPtr<nsIPaymentCurrencyAmount> amount;
  nsresult rv = PaymentCurrencyAmount::Create(aIPCOption.amount(),
                                              getter_AddRefs(amount));
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return rv;
  }
  nsCOMPtr<nsIPaymentShippingOption> option = new PaymentShippingOption(
      aIPCOption.id(), aIPCOption.label(), amount, aIPCOption.selected());
  option.forget(aOption);
  return NS_OK;
}

NS_IMETHODIMP
PaymentShippingOption::GetId(nsAString& aId) {
  aId = mId;
  return NS_OK;
}

NS_IMETHODIMP
PaymentShippingOption::GetLabel(nsAString& aLabel) {
  aLabel = mLabel;
  return NS_OK;
}

NS_IMETHODIMP
PaymentShippingOption::GetAmount(nsIPaymentCurrencyAmount** aAmount) {
  NS_ENSURE_ARG_POINTER(aAmount);
  MOZ_ASSERT(mAmount);
  nsCOMPtr<nsIPaymentCurrencyAmount> amount = mAmount;
  amount.forget(aAmount);
  return NS_OK;
}

NS_IMETHODIMP
PaymentShippingOption::GetSelected(bool* aSelected) {
  NS_ENSURE_ARG_POINTER(aSelected);
  *aSelected = mSelected;
  return NS_OK;
}

NS_IMETHODIMP
PaymentShippingOption::SetSelected(bool aSelected) {
  mSelected = aSelected;
  return NS_OK;
}

/* PaymentDetails */

NS_IMPL_ISUPPORTS(PaymentDetails, nsIPaymentDetails)

PaymentDetails::PaymentDetails(const nsAString& aId, nsIPaymentItem* aTotalItem,
                               nsIArray* aDisplayItems,
                               nsIArray* aShippingOptions, nsIArray* aModifiers,
                               const nsAString& aError,
                               const nsAString& aShippingAddressErrors,
                               const nsAString& aPayerErrors,
                               const nsAString& aPaymentMethodErrors)
    : mId(aId),
      mTotalItem(aTotalItem),
      mDisplayItems(aDisplayItems),
      mShippingOptions(aShippingOptions),
      mModifiers(aModifiers),
      mError(aError),
      mShippingAddressErrors(aShippingAddressErrors),
      mPayerErrors(aPayerErrors),
      mPaymentMethodErrors(aPaymentMethodErrors) {}

nsresult PaymentDetails::Create(const IPCPaymentDetails& aIPCDetails,
                                nsIPaymentDetails** aDetails) {
  NS_ENSURE_ARG_POINTER(aDetails);

  nsCOMPtr<nsIPaymentItem> total;
  nsresult rv = PaymentItem::Create(aIPCDetails.total(), getter_AddRefs(total));
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return rv;
  }

  nsCOMPtr<nsIArray> displayItems;
  nsCOMPtr<nsIMutableArray> items = do_CreateInstance(NS_ARRAY_CONTRACTID);
  MOZ_ASSERT(items);
  for (const IPCPaymentItem& displayItem : aIPCDetails.displayItems()) {
    nsCOMPtr<nsIPaymentItem> 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 = std::move(items);

  nsCOMPtr<nsIArray> shippingOptions;
  nsCOMPtr<nsIMutableArray> options = do_CreateInstance(NS_ARRAY_CONTRACTID);
  MOZ_ASSERT(options);
  for (const IPCPaymentShippingOption& shippingOption :
       aIPCDetails.shippingOptions()) {
    nsCOMPtr<nsIPaymentShippingOption> 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 = std::move(options);

  nsCOMPtr<nsIArray> modifiers;
  nsCOMPtr<nsIMutableArray> detailsModifiers =
      do_CreateInstance(NS_ARRAY_CONTRACTID);
  MOZ_ASSERT(detailsModifiers);
  for (const IPCPaymentDetailsModifier& modifier : aIPCDetails.modifiers()) {
    nsCOMPtr<nsIPaymentDetailsModifier> 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 = std::move(detailsModifiers);

  nsCOMPtr<nsIPaymentDetails> details = new PaymentDetails(
      aIPCDetails.id(), total, displayItems, shippingOptions, modifiers,
      aIPCDetails.error(), aIPCDetails.shippingAddressErrors(),
      aIPCDetails.payerErrors(), aIPCDetails.paymentMethodErrors());

  details.forget(aDetails);
  return NS_OK;
}

NS_IMETHODIMP
PaymentDetails::GetId(nsAString& aId) {
  aId = mId;
  return NS_OK;
}

NS_IMETHODIMP
PaymentDetails::GetTotalItem(nsIPaymentItem** aTotalItem) {
  NS_ENSURE_ARG_POINTER(aTotalItem);
  MOZ_ASSERT(mTotalItem);
  nsCOMPtr<nsIPaymentItem> total = mTotalItem;
  total.forget(aTotalItem);
  return NS_OK;
}

NS_IMETHODIMP
PaymentDetails::GetDisplayItems(nsIArray** aDisplayItems) {
  NS_ENSURE_ARG_POINTER(aDisplayItems);
  nsCOMPtr<nsIArray> displayItems = mDisplayItems;
  displayItems.forget(aDisplayItems);
  return NS_OK;
}

NS_IMETHODIMP
PaymentDetails::GetShippingOptions(nsIArray** aShippingOptions) {
  NS_ENSURE_ARG_POINTER(aShippingOptions);
  nsCOMPtr<nsIArray> options = mShippingOptions;
  options.forget(aShippingOptions);
  return NS_OK;
}

NS_IMETHODIMP
PaymentDetails::GetModifiers(nsIArray** aModifiers) {
  NS_ENSURE_ARG_POINTER(aModifiers);
  nsCOMPtr<nsIArray> modifiers = mModifiers;
  modifiers.forget(aModifiers);
  return NS_OK;
}

NS_IMETHODIMP
PaymentDetails::GetError(nsAString& aError) {
  aError = mError;
  return NS_OK;
}

NS_IMETHODIMP
PaymentDetails::GetShippingAddressErrors(JSContext* aCx,
                                         JS::MutableHandle<JS::Value> aErrors) {
  AddressErrors errors;
  errors.Init(mShippingAddressErrors);
  if (!ToJSValue(aCx, errors, aErrors)) {
    return NS_ERROR_FAILURE;
  }
  return NS_OK;
}

NS_IMETHODIMP
PaymentDetails::GetPayerErrors(JSContext* aCx,
                               JS::MutableHandle<JS::Value> aErrors) {
  PayerErrors errors;
  errors.Init(mPayerErrors);
  if (!ToJSValue(aCx, errors, aErrors)) {
    return NS_ERROR_FAILURE;
  }
  return NS_OK;
}

NS_IMETHODIMP
PaymentDetails::GetPaymentMethodErrors(JSContext* aCx,
                                       JS::MutableHandle<JS::Value> aErrors) {
  if (mPaymentMethodErrors.IsEmpty()) {
    aErrors.set(JS::NullValue());
    return NS_OK;
  }
  nsresult rv = DeserializeToJSValue(mPaymentMethodErrors, aCx, aErrors);
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return rv;
  }
  return NS_OK;
}

nsresult PaymentDetails::Update(nsIPaymentDetails* aDetails,
                                const bool aRequestShipping) {
  MOZ_ASSERT(aDetails);
  /*
   * According to the spec [1], update the attributes if they present in new
   * details (i.e., PaymentDetailsUpdate); otherwise, keep original value.
   * Note |id| comes only from initial details (i.e., PaymentDetailsInit) and
   * |error| only from new details.
   *
   *   [1] https://www.w3.org/TR/payment-request/#updatewith-method
   */


  nsresult rv = aDetails->GetTotalItem(getter_AddRefs(mTotalItem));
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return rv;
  }

  nsCOMPtr<nsIArray> displayItems;
  rv = aDetails->GetDisplayItems(getter_AddRefs(displayItems));
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return rv;
  }
  if (displayItems) {
    mDisplayItems = displayItems;
  }

  if (aRequestShipping) {
    nsCOMPtr<nsIArray> shippingOptions;
    rv = aDetails->GetShippingOptions(getter_AddRefs(shippingOptions));
    if (NS_WARN_IF(NS_FAILED(rv))) {
      return rv;
    }
    mShippingOptions = shippingOptions;
  }

  nsCOMPtr<nsIArray> modifiers;
  rv = aDetails->GetModifiers(getter_AddRefs(modifiers));
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return rv;
  }
  if (modifiers) {
    mModifiers = modifiers;
  }

  rv = aDetails->GetError(mError);
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return rv;
  }

  PaymentDetails* rowDetails = static_cast<PaymentDetails*>(aDetails);
  MOZ_ASSERT(rowDetails);
  mShippingAddressErrors = rowDetails->GetShippingAddressErrors();
  mPayerErrors = rowDetails->GetPayerErrors();
  mPaymentMethodErrors = rowDetails->GetPaymentMethodErrors();

  return NS_OK;
}

const nsString& PaymentDetails::GetShippingAddressErrors() const {
  return mShippingAddressErrors;
}

const nsString& PaymentDetails::GetPayerErrors() const { return mPayerErrors; }

const nsString& PaymentDetails::GetPaymentMethodErrors() const {
  return mPaymentMethodErrors;
}

nsresult PaymentDetails::UpdateErrors(const nsAString& aError,
                                      const nsAString& aPayerErrors,
                                      const nsAString& aPaymentMethodErrors,
                                      const nsAString& aShippingAddressErrors) {
  mError = aError;
  mPayerErrors = aPayerErrors;
  mPaymentMethodErrors = aPaymentMethodErrors;
  mShippingAddressErrors = aShippingAddressErrors;
  return NS_OK;
}

/* PaymentOptions */

NS_IMPL_ISUPPORTS(PaymentOptions, nsIPaymentOptions)

PaymentOptions::PaymentOptions(const bool aRequestPayerName,
                               const bool aRequestPayerEmail,
                               const bool aRequestPayerPhone,
                               const bool aRequestShipping,
                               const bool aRequestBillingAddress,
                               const nsAString& aShippingType)
    : mRequestPayerName(aRequestPayerName),
      mRequestPayerEmail(aRequestPayerEmail),
      mRequestPayerPhone(aRequestPayerPhone),
      mRequestShipping(aRequestShipping),
      mRequestBillingAddress(aRequestBillingAddress),
      mShippingType(aShippingType) {}

nsresult PaymentOptions::Create(const IPCPaymentOptions& aIPCOptions,
                                nsIPaymentOptions** aOptions) {
  NS_ENSURE_ARG_POINTER(aOptions);

  nsCOMPtr<nsIPaymentOptions> options = new PaymentOptions(
      aIPCOptions.requestPayerName(), aIPCOptions.requestPayerEmail(),
      aIPCOptions.requestPayerPhone(), aIPCOptions.requestShipping(),
      aIPCOptions.requestBillingAddress(), aIPCOptions.shippingType());
  options.forget(aOptions);
  return NS_OK;
}

NS_IMETHODIMP
PaymentOptions::GetRequestPayerName(bool* aRequestPayerName) {
  NS_ENSURE_ARG_POINTER(aRequestPayerName);
  *aRequestPayerName = mRequestPayerName;
  return NS_OK;
}

NS_IMETHODIMP
PaymentOptions::GetRequestPayerEmail(bool* aRequestPayerEmail) {
  NS_ENSURE_ARG_POINTER(aRequestPayerEmail);
  *aRequestPayerEmail = mRequestPayerEmail;
  return NS_OK;
}

NS_IMETHODIMP
PaymentOptions::GetRequestPayerPhone(bool* aRequestPayerPhone) {
  NS_ENSURE_ARG_POINTER(aRequestPayerPhone);
  *aRequestPayerPhone = mRequestPayerPhone;
  return NS_OK;
}

NS_IMETHODIMP
PaymentOptions::GetRequestShipping(bool* aRequestShipping) {
  NS_ENSURE_ARG_POINTER(aRequestShipping);
  *aRequestShipping = mRequestShipping;
  return NS_OK;
}

NS_IMETHODIMP
PaymentOptions::GetRequestBillingAddress(bool* aRequestBillingAddress) {
  NS_ENSURE_ARG_POINTER(aRequestBillingAddress);
  *aRequestBillingAddress = mRequestBillingAddress;
  return NS_OK;
}

NS_IMETHODIMP
PaymentOptions::GetShippingType(nsAString& aShippingType) {
  aShippingType = mShippingType;
  return NS_OK;
}

/* PaymentReqeust */

NS_IMPL_ISUPPORTS(PaymentRequest, nsIPaymentRequest)

PaymentRequest::PaymentRequest(const uint64_t aTopOuterWindowId,
                               const nsAString& aRequestId,
                               nsIPrincipal* aTopLevelPrincipal,
                               nsIArray* aPaymentMethods,
                               nsIPaymentDetails* aPaymentDetails,
                               nsIPaymentOptions* aPaymentOptions,
                               const nsAString& aShippingOption)
    : mTopOuterWindowId(aTopOuterWindowId),
      mRequestId(aRequestId),
      mTopLevelPrincipal(aTopLevelPrincipal),
      mPaymentMethods(aPaymentMethods),
      mPaymentDetails(aPaymentDetails),
      mPaymentOptions(aPaymentOptions),
      mShippingOption(aShippingOption),
      mState(eCreated) {}

NS_IMETHODIMP
PaymentRequest::GetTopOuterWindowId(uint64_t* aTopOuterWindowId) {
  NS_ENSURE_ARG_POINTER(aTopOuterWindowId);
  *aTopOuterWindowId = mTopOuterWindowId;
  return NS_OK;
}

NS_IMETHODIMP
PaymentRequest::GetTopLevelPrincipal(nsIPrincipal** aTopLevelPrincipal) {
  NS_ENSURE_ARG_POINTER(aTopLevelPrincipal);
  MOZ_ASSERT(mTopLevelPrincipal);
  nsCOMPtr<nsIPrincipal> principal = mTopLevelPrincipal;
  principal.forget(aTopLevelPrincipal);
  return NS_OK;
}

NS_IMETHODIMP
PaymentRequest::GetRequestId(nsAString& aRequestId) {
  aRequestId = mRequestId;
  return NS_OK;
}

NS_IMETHODIMP
PaymentRequest::GetPaymentMethods(nsIArray** aPaymentMethods) {
  NS_ENSURE_ARG_POINTER(aPaymentMethods);
  MOZ_ASSERT(mPaymentMethods);
  nsCOMPtr<nsIArray> methods = mPaymentMethods;
  methods.forget(aPaymentMethods);
  return NS_OK;
}

NS_IMETHODIMP
PaymentRequest::GetPaymentDetails(nsIPaymentDetails** aPaymentDetails) {
  NS_ENSURE_ARG_POINTER(aPaymentDetails);
  MOZ_ASSERT(mPaymentDetails);
  nsCOMPtr<nsIPaymentDetails> details = mPaymentDetails;
  details.forget(aPaymentDetails);
  return NS_OK;
}

NS_IMETHODIMP
PaymentRequest::GetPaymentOptions(nsIPaymentOptions** aPaymentOptions) {
  NS_ENSURE_ARG_POINTER(aPaymentOptions);
  MOZ_ASSERT(mPaymentOptions);
  nsCOMPtr<nsIPaymentOptions> options = mPaymentOptions;
  options.forget(aPaymentOptions);
  return NS_OK;
}

NS_IMETHODIMP
PaymentRequest::GetShippingOption(nsAString& aShippingOption) {
  aShippingOption = mShippingOption;
  return NS_OK;
}

nsresult PaymentRequest::UpdatePaymentDetails(
    nsIPaymentDetails* aPaymentDetails, const nsAString& aShippingOption) {
  MOZ_ASSERT(aPaymentDetails);
  bool requestShipping;
  nsresult rv = mPaymentOptions->GetRequestShipping(&requestShipping);
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return rv;
  }
  mShippingOption = aShippingOption;

  PaymentDetails* rowDetails =
      static_cast<PaymentDetails*>(mPaymentDetails.get());
  MOZ_ASSERT(rowDetails);
  return rowDetails->Update(aPaymentDetails, requestShipping);
}

void PaymentRequest::SetCompleteStatus(const nsAString& aCompleteStatus) {
  mCompleteStatus = aCompleteStatus;
}

nsresult PaymentRequest::UpdateErrors(const nsAString& aError,
                                      const nsAString& aPayerErrors,
                                      const nsAString& aPaymentMethodErrors,
                                      const nsAString& aShippingAddressErrors) {
  PaymentDetails* rowDetails =
      static_cast<PaymentDetails*>(mPaymentDetails.get());
  MOZ_ASSERT(rowDetails);
  return rowDetails->UpdateErrors(aError, aPayerErrors, aPaymentMethodErrors,
                                  aShippingAddressErrors);
}

NS_IMETHODIMP
PaymentRequest::GetCompleteStatus(nsAString& aCompleteStatus) {
  aCompleteStatus = mCompleteStatus;
  return NS_OK;
}

/* PaymentAddress */

NS_IMPL_ISUPPORTS(PaymentAddress, nsIPaymentAddress)

NS_IMETHODIMP
PaymentAddress::Init(const nsAString& aCountry, nsIArray* aAddressLine,
                     const nsAString& aRegion, const nsAString& aRegionCode,
                     const nsAString& aCity,
                     const nsAString& aDependentLocality,
                     const nsAString& aPostalCode,
                     const nsAString& aSortingCode,
                     const nsAString& aOrganization,
                     const nsAString& aRecipient, const nsAString& aPhone) {
  mCountry = aCountry;
  mAddressLine = aAddressLine;
  mRegion = aRegion;
  mRegionCode = aRegionCode;
  mCity = aCity;
  mDependentLocality = aDependentLocality;
  mPostalCode = aPostalCode;
  mSortingCode = aSortingCode;
  mOrganization = aOrganization;
  mRecipient = aRecipient;
  mPhone = aPhone;
  return NS_OK;
}

NS_IMETHODIMP
PaymentAddress::GetCountry(nsAString& aCountry) {
  aCountry = mCountry;
  return NS_OK;
}

NS_IMETHODIMP
PaymentAddress::GetAddressLine(nsIArray** aAddressLine) {
  NS_ENSURE_ARG_POINTER(aAddressLine);
  nsCOMPtr<nsIArray> addressLine = mAddressLine;
  addressLine.forget(aAddressLine);
  return NS_OK;
}

NS_IMETHODIMP
PaymentAddress::GetRegion(nsAString& aRegion) {
  aRegion = mRegion;
  return NS_OK;
}

NS_IMETHODIMP
PaymentAddress::GetRegionCode(nsAString& aRegionCode) {
  aRegionCode = mRegionCode;
  return NS_OK;
}

NS_IMETHODIMP
PaymentAddress::GetCity(nsAString& aCity) {
  aCity = mCity;
  return NS_OK;
}

NS_IMETHODIMP
PaymentAddress::GetDependentLocality(nsAString& aDependentLocality) {
  aDependentLocality = mDependentLocality;
  return NS_OK;
}

NS_IMETHODIMP
PaymentAddress::GetPostalCode(nsAString& aPostalCode) {
  aPostalCode = mPostalCode;
  return NS_OK;
}

NS_IMETHODIMP
PaymentAddress::GetSortingCode(nsAString& aSortingCode) {
  aSortingCode = mSortingCode;
  return NS_OK;
}

NS_IMETHODIMP
PaymentAddress::GetOrganization(nsAString& aOrganization) {
  aOrganization = mOrganization;
  return NS_OK;
}

NS_IMETHODIMP
PaymentAddress::GetRecipient(nsAString& aRecipient) {
  aRecipient = mRecipient;
  return NS_OK;
}

NS_IMETHODIMP
PaymentAddress::GetPhone(nsAString& aPhone) {
  aPhone = mPhone;
  return NS_OK;
}

}  // namespace mozilla::dom::payments

Messung V0.5
C=99 H=99 G=98

¤ Dauer der Verarbeitung: 0.6 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.