Commit 34196fb8 authored by Eden Chuang's avatar Eden Chuang
Browse files

Bug 1383293 - Add a new readonly attribute topLevelPrincipal in...

Bug 1383293 - Add a new readonly attribute topLevelPrincipal in nsIPaymentRequest for UI support. r=baku

Getting the top level document's principal when constructing PaymentRequest,
then sending it to chrome process and saving it in nsIPaymentRequest.
Creating a new readonly attribute nsIPrincipal topLevelPrincipal in
nsIPaymentRequest for UI to query the top level document's principal
information.
parent a1974f12
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -61,6 +61,11 @@ interface nsIPaymentCreateActionRequest : nsIPaymentActionRequest
   */
  readonly attribute uint64_t tabId;

  /*
   *  The top level document's principal
   */
  readonly attribute nsIPrincipal topLevelPrincipal;

  /*
   *  The methodData information of the payment request.
   */
@@ -82,6 +87,7 @@ interface nsIPaymentCreateActionRequest : nsIPaymentActionRequest
  void initRequest(in AString aRequestId,
                   in nsIPaymentActionCallback aCallback,
                   in uint64_t aTabId,
                   in nsIPrincipal aPrincipal,
                   in nsIArray aMethodData,
                   in nsIPaymentDetails aDetails,
                   in nsIPaymentOptions aOptions);
+2 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@

#include "nsISupports.idl"
#include "nsIVariant.idl"
#include "nsIPrincipal.idl"

interface nsIArray;

@@ -77,6 +78,7 @@ interface nsIPaymentOptions : nsISupports
interface nsIPaymentRequest : nsISupports
{
  readonly attribute uint64_t tabId;
  readonly attribute nsIPrincipal topLevelPrincipal;
  readonly attribute AString requestId;
  readonly attribute nsIArray paymentMethods;
  readonly attribute nsIPaymentDetails paymentDetails;
+13 −0
Original line number Diff line number Diff line
@@ -74,11 +74,13 @@ NS_IMETHODIMP
PaymentCreateActionRequest::InitRequest(const nsAString& aRequestId,
                                        nsIPaymentActionCallback* aCallback,
                                        const uint64_t aTabId,
                                        nsIPrincipal* aTopLevelPrincipal,
                                        nsIArray* aMethodData,
                                        nsIPaymentDetails* aDetails,
                                        nsIPaymentOptions* aOptions)
{
  NS_ENSURE_ARG_POINTER(aCallback);
  NS_ENSURE_ARG_POINTER(aTopLevelPrincipal);
  NS_ENSURE_ARG_POINTER(aMethodData);
  NS_ENSURE_ARG_POINTER(aDetails);
  NS_ENSURE_ARG_POINTER(aOptions);
@@ -87,6 +89,7 @@ PaymentCreateActionRequest::InitRequest(const nsAString& aRequestId,
    return rv;
  }
  mTabId = aTabId;
  mTopLevelPrincipal = aTopLevelPrincipal;
  mMethodData = aMethodData;
  mDetails = aDetails;
  mOptions = aOptions;
@@ -101,6 +104,16 @@ PaymentCreateActionRequest::GetTabId(uint64_t* aTabId)
  return NS_OK;
}

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

NS_IMETHODIMP
PaymentCreateActionRequest::GetMethodData(nsIArray** aMethodData)
{
+1 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ private:
  ~PaymentCreateActionRequest() = default;

  uint64_t mTabId;
  nsCOMPtr<nsIPrincipal> mTopLevelPrincipal;
  nsCOMPtr<nsIArray> mMethodData;
  nsCOMPtr<nsIPaymentDetails> mDetails;
  nsCOMPtr<nsIPaymentOptions> mOptions;
+5 −2
Original line number Diff line number Diff line
@@ -256,6 +256,8 @@ PaymentRequest::Constructor(const GlobalObject& aGlobal,
    aRv.Throw(NS_ERROR_UNEXPECTED);
    return nullptr;
  }

  nsCOMPtr<nsIPrincipal> topLevelPrincipal;
  do {
    nsINode* parentNode = nsContentUtils::GetCrossDocParentNode(node);
    if (parentNode) {
@@ -269,6 +271,7 @@ PaymentRequest::Constructor(const GlobalObject& aGlobal,
        }
      }
    }
    topLevelPrincipal = node->NodePrincipal();
    node = parentNode;
  } while (node);

@@ -289,8 +292,8 @@ PaymentRequest::Constructor(const GlobalObject& aGlobal,

  // Create PaymentRequest and set its |mId|
  RefPtr<PaymentRequest> request;
  nsresult rv = manager->CreatePayment(window, aMethodData, aDetails,
                                       aOptions, getter_AddRefs(request));
  nsresult rv = manager->CreatePayment(window, topLevelPrincipal, aMethodData,
                                       aDetails, aOptions, getter_AddRefs(request));
  if (NS_WARN_IF(NS_FAILED(rv))) {
    aRv.Throw(NS_ERROR_DOM_TYPE_ERR);
    return nullptr;
Loading