/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM $SRCDIR/caps/nsIPrincipal.idl
 */

#ifndef __gen_nsIPrincipal_h__
#define __gen_nsIPrincipal_h__


#include "nsIContentSecurityPolicy.h"

#include "nsISerializable.h"

#include "nsIAboutModule.h"

#include "nsIReferrerInfo.h"

#include "mozIDOMWindow.h"

#include "js/Value.h"

#include "mozilla/AlreadyAddRefed.h"
#include "mozilla/Assertions.h"
#include "mozilla/DebugOnly.h"

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif
class nsIChannel; /* forward declaration */

// %{C++:15-40
struct JSPrincipals;
#include "nsCOMPtr.h"
#include "nsTArray.h"
#include "nsString.h"
#include "mozilla/DebugOnly.h"
namespace mozilla {
class OriginAttributes;
}

/**
 * Some methods have a fast path for the case when we're comparing a principal
 * to itself. The situation may happen for example with about:blank documents.
 */

#define DECL_FAST_INLINE_HELPER(method_)                       \
  inline bool method_(nsIPrincipal* aOther)                    \
  {                                                            \
    mozilla::DebugOnly<bool> val = false;                      \
    MOZ_ASSERT_IF(this == aOther,                              \
                  NS_SUCCEEDED(method_(aOther, &val)) && val); \
                                                               \
    bool retVal = false;                                       \
    return                                                     \
      this == aOther ||                                        \
      (NS_SUCCEEDED(method_(aOther, &retVal)) && retVal);      \
  }
// %}
class nsIURI; /* forward declaration */

namespace mozilla {
namespace extensions {
class WebExtensionPolicy; /* webidl WebExtensionPolicy */
} // namespace extensions
} // namespace mozilla


/* starting interface:    nsIPrincipal */
#define NS_IPRINCIPAL_IID_STR "f75f502d-79fd-48be-a079-e5a7b8f80c8b"

#define NS_IPRINCIPAL_IID \
  {0xf75f502d, 0x79fd, 0x48be, \
    { 0xa0, 0x79, 0xe5, 0xa7, 0xb8, 0xf8, 0x0c, 0x8b }}

class MOZ_BINDING(binding_to, idl, class, XPIDL_nsIPrincipal) nsIPrincipal : public nsISupports {
 public:

  NS_INLINE_DECL_STATIC_IID(NS_IPRINCIPAL_IID)

  /* Used by ToJSValue to check which scriptable interface is implemented. */
  using ScriptableInterfaceType = nsIPrincipal;

  /* boolean equals (in nsIPrincipal other); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_equals)
  NS_IMETHOD Equals(nsIPrincipal *other, bool *_retval) = 0;

  /* boolean equalsForPermission (in nsIPrincipal other, in boolean aExactHost); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_equalsForPermission)
  NS_IMETHOD EqualsForPermission(nsIPrincipal *other, bool aExactHost, bool *_retval) = 0;

  /* boolean equalsConsideringDomain (in nsIPrincipal other); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_equalsConsideringDomain)
  NS_IMETHOD EqualsConsideringDomain(nsIPrincipal *other, bool *_retval) = 0;

// %{C++:85-86
      DECL_FAST_INLINE_HELPER(Equals)
      DECL_FAST_INLINE_HELPER(EqualsConsideringDomain)
// %}
  /* boolean equalsURI (in nsIURI aOtherURI); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_equalsURI)
  NS_IMETHOD EqualsURI(nsIURI *aOtherURI, bool *_retval) = 0;

// %{C++:106-106
    uint32_t GetHashValue() const;
// %}
  /* [infallible] readonly attribute nsIURI URI; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_URI)
  NS_IMETHOD GetURI(nsIURI **aURI) = 0;
   inline already_AddRefed<nsIURI> GetURI()
  {
    nsIURI* result = nullptr;
    mozilla::DebugOnly<nsresult> rv = GetURI(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return already_AddRefed<nsIURI>(result);
  }

  /* [noscript] attribute nsIURI domain; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_domain)
  NS_IMETHOD GetDomain(nsIURI **aDomain) = 0;
  MOZ_BINDING(binding_to, idl, setter, XPIDL_nsIPrincipal_domain)
  NS_IMETHOD SetDomain(nsIURI *aDomain) = 0;

  /* boolean subsumes (in nsIPrincipal other); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_subsumes)
  NS_IMETHOD Subsumes(nsIPrincipal *other, bool *_retval) = 0;

  /* boolean subsumesConsideringDomain (in nsIPrincipal other); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_subsumesConsideringDomain)
  NS_IMETHOD SubsumesConsideringDomain(nsIPrincipal *other, bool *_retval) = 0;

  /* boolean subsumesConsideringDomainIgnoringFPD (in nsIPrincipal other); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_subsumesConsideringDomainIgnoringFPD)
  NS_IMETHOD SubsumesConsideringDomainIgnoringFPD(nsIPrincipal *other, bool *_retval) = 0;

// %{C++:165-168
      DECL_FAST_INLINE_HELPER(Subsumes)
      DECL_FAST_INLINE_HELPER(SubsumesConsideringDomain)
      DECL_FAST_INLINE_HELPER(SubsumesConsideringDomainIgnoringFPD)
#undef DECL_FAST_INLINE_HELPER
// %}
  /* void checkMayLoad (in nsIURI uri, in boolean allowIfInheritsPrincipal); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_checkMayLoad)
  NS_IMETHOD CheckMayLoad(nsIURI *uri, bool allowIfInheritsPrincipal) = 0;

  /* void checkMayLoadWithReporting (in nsIURI uri, in boolean allowIfInheritsPrincipal, in unsigned long long innerWindowID); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_checkMayLoadWithReporting)
  NS_IMETHOD CheckMayLoadWithReporting(nsIURI *uri, bool allowIfInheritsPrincipal, uint64_t innerWindowID) = 0;

  /* boolean isThirdPartyURI (in nsIURI uri); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isThirdPartyURI)
  NS_IMETHOD IsThirdPartyURI(nsIURI *uri, bool *_retval) = 0;

  /* boolean isThirdPartyPrincipal (in nsIPrincipal principal); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isThirdPartyPrincipal)
  NS_IMETHOD IsThirdPartyPrincipal(nsIPrincipal *principal, bool *_retval) = 0;

  /* boolean isThirdPartyChannel (in nsIChannel channel); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isThirdPartyChannel)
  NS_IMETHOD IsThirdPartyChannel(nsIChannel *channel, bool *_retval) = 0;

  /* [implicit_jscontext] readonly attribute jsval originAttributes; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_originAttributes)
  NS_IMETHOD GetOriginAttributes(JSContext* cx, JS::MutableHandle<JS::Value> aOriginAttributes) = 0;

  /* [binaryname(OriginAttributesRef),noscript,nostdcall,notxpcom] const_OriginAttributes OriginAttributesRef (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_OriginAttributesRef)
  virtual const mozilla::OriginAttributes & OriginAttributesRef(void) = 0;

  /* readonly attribute ACString origin; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_origin)
  NS_IMETHOD GetOrigin(nsACString& aOrigin) = 0;

  /* [noscript] readonly attribute ACString webExposedOriginSerialization; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_webExposedOriginSerialization)
  NS_IMETHOD GetWebExposedOriginSerialization(nsACString& aWebExposedOriginSerialization) = 0;

  /* readonly attribute ACString hostPort; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_hostPort)
  NS_IMETHOD GetHostPort(nsACString& aHostPort) = 0;

  /* readonly attribute ACString asciiHost; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_asciiHost)
  NS_IMETHOD GetAsciiHost(nsACString& aAsciiHost) = 0;

  /* readonly attribute ACString host; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_host)
  NS_IMETHOD GetHost(nsACString& aHost) = 0;

  /* readonly attribute ACString prePath; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_prePath)
  NS_IMETHOD GetPrePath(nsACString& aPrePath) = 0;

  /* readonly attribute ACString filePath; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_filePath)
  NS_IMETHOD GetFilePath(nsACString& aFilePath) = 0;

  /* readonly attribute ACString asciiSpec; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_asciiSpec)
  NS_IMETHOD GetAsciiSpec(nsACString& aAsciiSpec) = 0;

  /* readonly attribute ACString spec; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_spec)
  NS_IMETHOD GetSpec(nsACString& aSpec) = 0;

  /* readonly attribute AUTF8String exposablePrePath; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_exposablePrePath)
  NS_IMETHOD GetExposablePrePath(nsACString& aExposablePrePath) = 0;

  /* readonly attribute AUTF8String exposableSpec; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_exposableSpec)
  NS_IMETHOD GetExposableSpec(nsACString& aExposableSpec) = 0;

  /* readonly attribute ACString scheme; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_scheme)
  NS_IMETHOD GetScheme(nsACString& aScheme) = 0;

  /* [infallible] boolean schemeIs (in string scheme); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_schemeIs)
  NS_IMETHOD SchemeIs(const char * scheme, bool *_retval) = 0;

  inline bool  SchemeIs(const char * scheme)
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = SchemeIs(scheme, &result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }
  /* [infallible] boolean isURIInPrefList (in string pref); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isURIInPrefList)
  NS_IMETHOD IsURIInPrefList(const char * pref, bool *_retval) = 0;

  inline bool  IsURIInPrefList(const char * pref)
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = IsURIInPrefList(pref, &result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }
  /* [infallible] boolean isURIInList (in ACString list); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isURIInList)
  NS_IMETHOD IsURIInList(const nsACString& list, bool *_retval) = 0;

  inline bool  IsURIInList(const nsACString& list)
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = IsURIInList(list, &result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }
  /* [infallible] boolean isContentAccessibleAboutURI (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isContentAccessibleAboutURI)
  NS_IMETHOD IsContentAccessibleAboutURI(bool *_retval) = 0;

  inline bool  IsContentAccessibleAboutURI(void)
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = IsContentAccessibleAboutURI(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }
  /* [infallible] boolean isSameOrigin (in nsIURI otherURI); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isSameOrigin)
  NS_IMETHOD IsSameOrigin(nsIURI *otherURI, bool *_retval) = 0;

  inline bool  IsSameOrigin(nsIURI *otherURI)
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = IsSameOrigin(otherURI, &result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }
  /* [noscript] ACString getPrefLightCacheKey (in nsIURI aURI, in boolean aWithCredentials, in const_OriginAttributes aOriginAttributes); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_getPrefLightCacheKey)
  NS_IMETHOD GetPrefLightCacheKey(nsIURI *aURI, bool aWithCredentials, const mozilla::OriginAttributes & aOriginAttributes, nsACString& _retval) = 0;

  /* boolean hasFirstpartyStorageAccess (in mozIDOMWindow aWindow, out uint32_t rejectedReason); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_hasFirstpartyStorageAccess)
  NS_IMETHOD HasFirstpartyStorageAccess(mozIDOMWindow *aWindow, uint32_t *rejectedReason, bool *_retval) = 0;

  /* readonly attribute ACString localStorageQuotaKey; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_localStorageQuotaKey)
  NS_IMETHOD GetLocalStorageQuotaKey(nsACString& aLocalStorageQuotaKey) = 0;

  /* [infallible] readonly attribute boolean isOriginPotentiallyTrustworthy; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isOriginPotentiallyTrustworthy)
  NS_IMETHOD GetIsOriginPotentiallyTrustworthy(bool *aIsOriginPotentiallyTrustworthy) = 0;
  inline bool  GetIsOriginPotentiallyTrustworthy()
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = GetIsOriginPotentiallyTrustworthy(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* [infallible] readonly attribute boolean isLoopbackHost; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isLoopbackHost)
  NS_IMETHOD GetIsLoopbackHost(bool *aIsLoopbackHost) = 0;
  inline bool  GetIsLoopbackHost()
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = GetIsLoopbackHost(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* [infallible] readonly attribute boolean isSecureContextAllowlistedHost; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isSecureContextAllowlistedHost)
  NS_IMETHOD GetIsSecureContextAllowlistedHost(bool *aIsSecureContextAllowlistedHost) = 0;
  inline bool  GetIsSecureContextAllowlistedHost()
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = GetIsSecureContextAllowlistedHost(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* uint32_t getAboutModuleFlags (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_getAboutModuleFlags)
  NS_IMETHOD GetAboutModuleFlags(uint32_t *_retval) = 0;

  /* readonly attribute ACString storageOriginKey; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_storageOriginKey)
  NS_IMETHOD GetStorageOriginKey(nsACString& aStorageOriginKey) = 0;

  /* [noscript] nsIReferrerInfo createReferrerInfo (in ReferrerPolicy aReferrerPolicy); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_createReferrerInfo)
  NS_IMETHOD CreateReferrerInfo(mozilla::dom::ReferrerPolicy aReferrerPolicy, nsIReferrerInfo **_retval) = 0;

  /* readonly attribute ACString originNoSuffix; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_originNoSuffix)
  NS_IMETHOD GetOriginNoSuffix(nsACString& aOriginNoSuffix) = 0;

  /* readonly attribute AUTF8String originSuffix; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_originSuffix)
  NS_IMETHOD GetOriginSuffix(nsACString& aOriginSuffix) = 0;

  /* readonly attribute ACString siteOrigin; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_siteOrigin)
  NS_IMETHOD GetSiteOrigin(nsACString& aSiteOrigin) = 0;

  /* readonly attribute ACString siteOriginNoSuffix; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_siteOriginNoSuffix)
  NS_IMETHOD GetSiteOriginNoSuffix(nsACString& aSiteOriginNoSuffix) = 0;

  /* readonly attribute ACString baseDomain; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_baseDomain)
  NS_IMETHOD GetBaseDomain(nsACString& aBaseDomain) = 0;

  /* readonly attribute AString addonId; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_addonId)
  NS_IMETHOD GetAddonId(nsAString& aAddonId) = 0;

  /* readonly attribute WebExtensionPolicy addonPolicy; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_addonPolicy)
  NS_IMETHOD GetAddonPolicy(mozilla::extensions::WebExtensionPolicy **aAddonPolicy) = 0;

  /* readonly attribute WebExtensionPolicy contentScriptAddonPolicy; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_contentScriptAddonPolicy)
  NS_IMETHOD GetContentScriptAddonPolicy(mozilla::extensions::WebExtensionPolicy **aContentScriptAddonPolicy) = 0;

  /* [infallible] readonly attribute unsigned long userContextId; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_userContextId)
  NS_IMETHOD GetUserContextId(uint32_t *aUserContextId) = 0;
  inline uint32_t  GetUserContextId()
  {
    uint32_t result;
    mozilla::DebugOnly<nsresult> rv = GetUserContextId(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* [infallible] readonly attribute unsigned long privateBrowsingId; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_privateBrowsingId)
  NS_IMETHOD GetPrivateBrowsingId(uint32_t *aPrivateBrowsingId) = 0;
  inline uint32_t  GetPrivateBrowsingId()
  {
    uint32_t result;
    mozilla::DebugOnly<nsresult> rv = GetPrivateBrowsingId(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* [infallible] readonly attribute boolean isInPrivateBrowsing; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isInPrivateBrowsing)
  NS_IMETHOD GetIsInPrivateBrowsing(bool *aIsInPrivateBrowsing) = 0;
  inline bool  GetIsInPrivateBrowsing()
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = GetIsInPrivateBrowsing(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* [infallible] readonly attribute boolean isNullPrincipal; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isNullPrincipal)
  NS_IMETHOD GetIsNullPrincipal(bool *aIsNullPrincipal) = 0;
  inline bool  GetIsNullPrincipal()
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = GetIsNullPrincipal(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* [infallible] readonly attribute boolean isContentPrincipal; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isContentPrincipal)
  NS_IMETHOD GetIsContentPrincipal(bool *aIsContentPrincipal) = 0;
  inline bool  GetIsContentPrincipal()
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = GetIsContentPrincipal(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* [infallible] readonly attribute boolean isExpandedPrincipal; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isExpandedPrincipal)
  NS_IMETHOD GetIsExpandedPrincipal(bool *aIsExpandedPrincipal) = 0;
  inline bool  GetIsExpandedPrincipal()
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = GetIsExpandedPrincipal(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* readonly attribute boolean isSystemPrincipal; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isSystemPrincipal)
  NS_IMETHOD GetIsSystemPrincipal(bool *aIsSystemPrincipal) = 0;

// %{C++:642-642
      inline bool IsSystemPrincipal() const;
// %}
  /* [infallible] readonly attribute boolean isAddonPrincipal; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isAddonPrincipal)
  NS_IMETHOD GetIsAddonPrincipal(bool *aIsAddonPrincipal) = 0;
  inline bool  GetIsAddonPrincipal()
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = GetIsAddonPrincipal(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* [infallible] readonly attribute boolean isAddonOrExpandedAddonPrincipal; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isAddonOrExpandedAddonPrincipal)
  NS_IMETHOD GetIsAddonOrExpandedAddonPrincipal(bool *aIsAddonOrExpandedAddonPrincipal) = 0;
  inline bool  GetIsAddonOrExpandedAddonPrincipal()
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = GetIsAddonOrExpandedAddonPrincipal(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

// %{C++:661-668
    // MOZ_DBG support (threadsafe)
    friend std::ostream& operator<<(std::ostream& aOut, const nsIPrincipal& aPrincipal) {
      nsIPrincipal* principal = const_cast<nsIPrincipal*>(&aPrincipal);
      nsAutoCString origin;
      mozilla::DebugOnly<nsresult> rv = principal->GetOrigin(origin);
      MOZ_ASSERT(NS_SUCCEEDED(rv));
      return aOut << "nsIPrincipal { " << origin << " }";
    }
// %}
  /* [infallible] readonly attribute boolean isOnion; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isOnion)
  NS_IMETHOD GetIsOnion(bool *aIsOnion) = 0;
  inline bool  GetIsOnion()
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = GetIsOnion(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* readonly attribute boolean isScriptAllowedByPolicy; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isScriptAllowedByPolicy)
  NS_IMETHOD GetIsScriptAllowedByPolicy(bool *aIsScriptAllowedByPolicy) = 0;

  /* boolean isL10nAllowed (in nsIURI aDocumentURI); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isL10nAllowed)
  NS_IMETHOD IsL10nAllowed(nsIURI *aDocumentURI, bool *_retval) = 0;

  /* [infallible] readonly attribute nsIPrincipal nextSubDomainPrincipal; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_nextSubDomainPrincipal)
  NS_IMETHOD GetNextSubDomainPrincipal(nsIPrincipal **aNextSubDomainPrincipal) = 0;
   inline already_AddRefed<nsIPrincipal> GetNextSubDomainPrincipal()
  {
    nsIPrincipal* result = nullptr;
    mozilla::DebugOnly<nsresult> rv = GetNextSubDomainPrincipal(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return already_AddRefed<nsIPrincipal>(result);
  }

  /* [infallible] readonly attribute boolean isIpAddress; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isIpAddress)
  NS_IMETHOD GetIsIpAddress(bool *aIsIpAddress) = 0;
  inline bool  GetIsIpAddress()
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = GetIsIpAddress(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* [infallible] readonly attribute boolean isLocalIpAddress; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isLocalIpAddress)
  NS_IMETHOD GetIsLocalIpAddress(bool *aIsLocalIpAddress) = 0;
  inline bool  GetIsLocalIpAddress()
  {
    bool result;
    mozilla::DebugOnly<nsresult> rv = GetIsLocalIpAddress(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* [infallible] readonly attribute nsIPrincipal precursorPrincipal; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_precursorPrincipal)
  NS_IMETHOD GetPrecursorPrincipal(nsIPrincipal **aPrecursorPrincipal) = 0;
   inline already_AddRefed<nsIPrincipal> GetPrecursorPrincipal()
  {
    nsIPrincipal* result = nullptr;
    mozilla::DebugOnly<nsresult> rv = GetPrecursorPrincipal(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return already_AddRefed<nsIPrincipal>(result);
  }

};


/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIPRINCIPAL \
  NS_IMETHOD Equals(nsIPrincipal *other, bool *_retval) override; \
  NS_IMETHOD EqualsForPermission(nsIPrincipal *other, bool aExactHost, bool *_retval) override; \
  NS_IMETHOD EqualsConsideringDomain(nsIPrincipal *other, bool *_retval) override; \
  NS_IMETHOD EqualsURI(nsIURI *aOtherURI, bool *_retval) override; \
  using nsIPrincipal::GetURI; \
  NS_IMETHOD GetURI(nsIURI **aURI) override; \
  NS_IMETHOD GetDomain(nsIURI **aDomain) override; \
  NS_IMETHOD SetDomain(nsIURI *aDomain) override; \
  NS_IMETHOD Subsumes(nsIPrincipal *other, bool *_retval) override; \
  NS_IMETHOD SubsumesConsideringDomain(nsIPrincipal *other, bool *_retval) override; \
  NS_IMETHOD SubsumesConsideringDomainIgnoringFPD(nsIPrincipal *other, bool *_retval) override; \
  NS_IMETHOD CheckMayLoad(nsIURI *uri, bool allowIfInheritsPrincipal) override; \
  NS_IMETHOD CheckMayLoadWithReporting(nsIURI *uri, bool allowIfInheritsPrincipal, uint64_t innerWindowID) override; \
  NS_IMETHOD IsThirdPartyURI(nsIURI *uri, bool *_retval) override; \
  NS_IMETHOD IsThirdPartyPrincipal(nsIPrincipal *principal, bool *_retval) override; \
  NS_IMETHOD IsThirdPartyChannel(nsIChannel *channel, bool *_retval) override; \
  NS_IMETHOD GetOriginAttributes(JSContext* cx, JS::MutableHandle<JS::Value> aOriginAttributes) override; \
  virtual const mozilla::OriginAttributes & OriginAttributesRef(void) override; \
  NS_IMETHOD GetOrigin(nsACString& aOrigin) override; \
  NS_IMETHOD GetWebExposedOriginSerialization(nsACString& aWebExposedOriginSerialization) override; \
  NS_IMETHOD GetHostPort(nsACString& aHostPort) override; \
  NS_IMETHOD GetAsciiHost(nsACString& aAsciiHost) override; \
  NS_IMETHOD GetHost(nsACString& aHost) override; \
  NS_IMETHOD GetPrePath(nsACString& aPrePath) override; \
  NS_IMETHOD GetFilePath(nsACString& aFilePath) override; \
  NS_IMETHOD GetAsciiSpec(nsACString& aAsciiSpec) override; \
  NS_IMETHOD GetSpec(nsACString& aSpec) override; \
  NS_IMETHOD GetExposablePrePath(nsACString& aExposablePrePath) override; \
  NS_IMETHOD GetExposableSpec(nsACString& aExposableSpec) override; \
  NS_IMETHOD GetScheme(nsACString& aScheme) override; \
  NS_IMETHOD SchemeIs(const char * scheme, bool *_retval) override; \
  NS_IMETHOD IsURIInPrefList(const char * pref, bool *_retval) override; \
  NS_IMETHOD IsURIInList(const nsACString& list, bool *_retval) override; \
  NS_IMETHOD IsContentAccessibleAboutURI(bool *_retval) override; \
  NS_IMETHOD IsSameOrigin(nsIURI *otherURI, bool *_retval) override; \
  NS_IMETHOD GetPrefLightCacheKey(nsIURI *aURI, bool aWithCredentials, const mozilla::OriginAttributes & aOriginAttributes, nsACString& _retval) override; \
  NS_IMETHOD HasFirstpartyStorageAccess(mozIDOMWindow *aWindow, uint32_t *rejectedReason, bool *_retval) override; \
  NS_IMETHOD GetLocalStorageQuotaKey(nsACString& aLocalStorageQuotaKey) override; \
  using nsIPrincipal::GetIsOriginPotentiallyTrustworthy; \
  NS_IMETHOD GetIsOriginPotentiallyTrustworthy(bool *aIsOriginPotentiallyTrustworthy) override; \
  using nsIPrincipal::GetIsLoopbackHost; \
  NS_IMETHOD GetIsLoopbackHost(bool *aIsLoopbackHost) override; \
  using nsIPrincipal::GetIsSecureContextAllowlistedHost; \
  NS_IMETHOD GetIsSecureContextAllowlistedHost(bool *aIsSecureContextAllowlistedHost) override; \
  NS_IMETHOD GetAboutModuleFlags(uint32_t *_retval) override; \
  NS_IMETHOD GetStorageOriginKey(nsACString& aStorageOriginKey) override; \
  NS_IMETHOD CreateReferrerInfo(mozilla::dom::ReferrerPolicy aReferrerPolicy, nsIReferrerInfo **_retval) override; \
  NS_IMETHOD GetOriginNoSuffix(nsACString& aOriginNoSuffix) override; \
  NS_IMETHOD GetOriginSuffix(nsACString& aOriginSuffix) override; \
  NS_IMETHOD GetSiteOrigin(nsACString& aSiteOrigin) override; \
  NS_IMETHOD GetSiteOriginNoSuffix(nsACString& aSiteOriginNoSuffix) override; \
  NS_IMETHOD GetBaseDomain(nsACString& aBaseDomain) override; \
  NS_IMETHOD GetAddonId(nsAString& aAddonId) override; \
  NS_IMETHOD GetAddonPolicy(mozilla::extensions::WebExtensionPolicy **aAddonPolicy) override; \
  NS_IMETHOD GetContentScriptAddonPolicy(mozilla::extensions::WebExtensionPolicy **aContentScriptAddonPolicy) override; \
  using nsIPrincipal::GetUserContextId; \
  NS_IMETHOD GetUserContextId(uint32_t *aUserContextId) override; \
  using nsIPrincipal::GetPrivateBrowsingId; \
  NS_IMETHOD GetPrivateBrowsingId(uint32_t *aPrivateBrowsingId) override; \
  using nsIPrincipal::GetIsInPrivateBrowsing; \
  NS_IMETHOD GetIsInPrivateBrowsing(bool *aIsInPrivateBrowsing) override; \
  using nsIPrincipal::GetIsNullPrincipal; \
  NS_IMETHOD GetIsNullPrincipal(bool *aIsNullPrincipal) override; \
  using nsIPrincipal::GetIsContentPrincipal; \
  NS_IMETHOD GetIsContentPrincipal(bool *aIsContentPrincipal) override; \
  using nsIPrincipal::GetIsExpandedPrincipal; \
  NS_IMETHOD GetIsExpandedPrincipal(bool *aIsExpandedPrincipal) override; \
  NS_IMETHOD GetIsSystemPrincipal(bool *aIsSystemPrincipal) override; \
  using nsIPrincipal::GetIsAddonPrincipal; \
  NS_IMETHOD GetIsAddonPrincipal(bool *aIsAddonPrincipal) override; \
  using nsIPrincipal::GetIsAddonOrExpandedAddonPrincipal; \
  NS_IMETHOD GetIsAddonOrExpandedAddonPrincipal(bool *aIsAddonOrExpandedAddonPrincipal) override; \
  using nsIPrincipal::GetIsOnion; \
  NS_IMETHOD GetIsOnion(bool *aIsOnion) override; \
  NS_IMETHOD GetIsScriptAllowedByPolicy(bool *aIsScriptAllowedByPolicy) override; \
  NS_IMETHOD IsL10nAllowed(nsIURI *aDocumentURI, bool *_retval) override; \
  using nsIPrincipal::GetNextSubDomainPrincipal; \
  NS_IMETHOD GetNextSubDomainPrincipal(nsIPrincipal **aNextSubDomainPrincipal) override; \
  using nsIPrincipal::GetIsIpAddress; \
  NS_IMETHOD GetIsIpAddress(bool *aIsIpAddress) override; \
  using nsIPrincipal::GetIsLocalIpAddress; \
  NS_IMETHOD GetIsLocalIpAddress(bool *aIsLocalIpAddress) override; \
  using nsIPrincipal::GetPrecursorPrincipal; \
  NS_IMETHOD GetPrecursorPrincipal(nsIPrincipal **aPrecursorPrincipal) override; 

/* Use this macro when declaring the members of this interface when the
   class doesn't implement the interface. This is useful for forwarding. */
#define NS_DECL_NON_VIRTUAL_NSIPRINCIPAL \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_equals)\
  nsresult Equals(nsIPrincipal *other, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_equalsForPermission)\
  nsresult EqualsForPermission(nsIPrincipal *other, bool aExactHost, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_equalsConsideringDomain)\
  nsresult EqualsConsideringDomain(nsIPrincipal *other, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_equalsURI)\
  nsresult EqualsURI(nsIURI *aOtherURI, bool *_retval); \
  using nsIPrincipal::GetURI; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_URI)\
  nsresult GetURI(nsIURI **aURI); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_domain)\
  nsresult GetDomain(nsIURI **aDomain); \
  MOZ_BINDING(binding_to, idl, setter, XPIDL_nsIPrincipal_domain)\
  nsresult SetDomain(nsIURI *aDomain); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_subsumes)\
  nsresult Subsumes(nsIPrincipal *other, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_subsumesConsideringDomain)\
  nsresult SubsumesConsideringDomain(nsIPrincipal *other, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_subsumesConsideringDomainIgnoringFPD)\
  nsresult SubsumesConsideringDomainIgnoringFPD(nsIPrincipal *other, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_checkMayLoad)\
  nsresult CheckMayLoad(nsIURI *uri, bool allowIfInheritsPrincipal); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_checkMayLoadWithReporting)\
  nsresult CheckMayLoadWithReporting(nsIURI *uri, bool allowIfInheritsPrincipal, uint64_t innerWindowID); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isThirdPartyURI)\
  nsresult IsThirdPartyURI(nsIURI *uri, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isThirdPartyPrincipal)\
  nsresult IsThirdPartyPrincipal(nsIPrincipal *principal, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isThirdPartyChannel)\
  nsresult IsThirdPartyChannel(nsIChannel *channel, bool *_retval); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_originAttributes)\
  nsresult GetOriginAttributes(JSContext* cx, JS::MutableHandle<JS::Value> aOriginAttributes); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_OriginAttributesRef)\
  const mozilla::OriginAttributes & OriginAttributesRef(void); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_origin)\
  nsresult GetOrigin(nsACString& aOrigin); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_webExposedOriginSerialization)\
  nsresult GetWebExposedOriginSerialization(nsACString& aWebExposedOriginSerialization); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_hostPort)\
  nsresult GetHostPort(nsACString& aHostPort); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_asciiHost)\
  nsresult GetAsciiHost(nsACString& aAsciiHost); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_host)\
  nsresult GetHost(nsACString& aHost); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_prePath)\
  nsresult GetPrePath(nsACString& aPrePath); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_filePath)\
  nsresult GetFilePath(nsACString& aFilePath); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_asciiSpec)\
  nsresult GetAsciiSpec(nsACString& aAsciiSpec); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_spec)\
  nsresult GetSpec(nsACString& aSpec); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_exposablePrePath)\
  nsresult GetExposablePrePath(nsACString& aExposablePrePath); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_exposableSpec)\
  nsresult GetExposableSpec(nsACString& aExposableSpec); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_scheme)\
  nsresult GetScheme(nsACString& aScheme); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_schemeIs)\
  nsresult SchemeIs(const char * scheme, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isURIInPrefList)\
  nsresult IsURIInPrefList(const char * pref, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isURIInList)\
  nsresult IsURIInList(const nsACString& list, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isContentAccessibleAboutURI)\
  nsresult IsContentAccessibleAboutURI(bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isSameOrigin)\
  nsresult IsSameOrigin(nsIURI *otherURI, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_getPrefLightCacheKey)\
  nsresult GetPrefLightCacheKey(nsIURI *aURI, bool aWithCredentials, const mozilla::OriginAttributes & aOriginAttributes, nsACString& _retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_hasFirstpartyStorageAccess)\
  nsresult HasFirstpartyStorageAccess(mozIDOMWindow *aWindow, uint32_t *rejectedReason, bool *_retval); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_localStorageQuotaKey)\
  nsresult GetLocalStorageQuotaKey(nsACString& aLocalStorageQuotaKey); \
  using nsIPrincipal::GetIsOriginPotentiallyTrustworthy; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isOriginPotentiallyTrustworthy)\
  nsresult GetIsOriginPotentiallyTrustworthy(bool *aIsOriginPotentiallyTrustworthy); \
  using nsIPrincipal::GetIsLoopbackHost; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isLoopbackHost)\
  nsresult GetIsLoopbackHost(bool *aIsLoopbackHost); \
  using nsIPrincipal::GetIsSecureContextAllowlistedHost; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isSecureContextAllowlistedHost)\
  nsresult GetIsSecureContextAllowlistedHost(bool *aIsSecureContextAllowlistedHost); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_getAboutModuleFlags)\
  nsresult GetAboutModuleFlags(uint32_t *_retval); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_storageOriginKey)\
  nsresult GetStorageOriginKey(nsACString& aStorageOriginKey); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_createReferrerInfo)\
  nsresult CreateReferrerInfo(mozilla::dom::ReferrerPolicy aReferrerPolicy, nsIReferrerInfo **_retval); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_originNoSuffix)\
  nsresult GetOriginNoSuffix(nsACString& aOriginNoSuffix); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_originSuffix)\
  nsresult GetOriginSuffix(nsACString& aOriginSuffix); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_siteOrigin)\
  nsresult GetSiteOrigin(nsACString& aSiteOrigin); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_siteOriginNoSuffix)\
  nsresult GetSiteOriginNoSuffix(nsACString& aSiteOriginNoSuffix); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_baseDomain)\
  nsresult GetBaseDomain(nsACString& aBaseDomain); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_addonId)\
  nsresult GetAddonId(nsAString& aAddonId); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_addonPolicy)\
  nsresult GetAddonPolicy(mozilla::extensions::WebExtensionPolicy **aAddonPolicy); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_contentScriptAddonPolicy)\
  nsresult GetContentScriptAddonPolicy(mozilla::extensions::WebExtensionPolicy **aContentScriptAddonPolicy); \
  using nsIPrincipal::GetUserContextId; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_userContextId)\
  nsresult GetUserContextId(uint32_t *aUserContextId); \
  using nsIPrincipal::GetPrivateBrowsingId; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_privateBrowsingId)\
  nsresult GetPrivateBrowsingId(uint32_t *aPrivateBrowsingId); \
  using nsIPrincipal::GetIsInPrivateBrowsing; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isInPrivateBrowsing)\
  nsresult GetIsInPrivateBrowsing(bool *aIsInPrivateBrowsing); \
  using nsIPrincipal::GetIsNullPrincipal; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isNullPrincipal)\
  nsresult GetIsNullPrincipal(bool *aIsNullPrincipal); \
  using nsIPrincipal::GetIsContentPrincipal; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isContentPrincipal)\
  nsresult GetIsContentPrincipal(bool *aIsContentPrincipal); \
  using nsIPrincipal::GetIsExpandedPrincipal; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isExpandedPrincipal)\
  nsresult GetIsExpandedPrincipal(bool *aIsExpandedPrincipal); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isSystemPrincipal)\
  nsresult GetIsSystemPrincipal(bool *aIsSystemPrincipal); \
  using nsIPrincipal::GetIsAddonPrincipal; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isAddonPrincipal)\
  nsresult GetIsAddonPrincipal(bool *aIsAddonPrincipal); \
  using nsIPrincipal::GetIsAddonOrExpandedAddonPrincipal; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isAddonOrExpandedAddonPrincipal)\
  nsresult GetIsAddonOrExpandedAddonPrincipal(bool *aIsAddonOrExpandedAddonPrincipal); \
  using nsIPrincipal::GetIsOnion; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isOnion)\
  nsresult GetIsOnion(bool *aIsOnion); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isScriptAllowedByPolicy)\
  nsresult GetIsScriptAllowedByPolicy(bool *aIsScriptAllowedByPolicy); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIPrincipal_isL10nAllowed)\
  nsresult IsL10nAllowed(nsIURI *aDocumentURI, bool *_retval); \
  using nsIPrincipal::GetNextSubDomainPrincipal; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_nextSubDomainPrincipal)\
  nsresult GetNextSubDomainPrincipal(nsIPrincipal **aNextSubDomainPrincipal); \
  using nsIPrincipal::GetIsIpAddress; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isIpAddress)\
  nsresult GetIsIpAddress(bool *aIsIpAddress); \
  using nsIPrincipal::GetIsLocalIpAddress; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_isLocalIpAddress)\
  nsresult GetIsLocalIpAddress(bool *aIsLocalIpAddress); \
  using nsIPrincipal::GetPrecursorPrincipal; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIPrincipal_precursorPrincipal)\
  nsresult GetPrecursorPrincipal(nsIPrincipal **aPrecursorPrincipal); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIPRINCIPAL(_to) \
  NS_IMETHOD Equals(nsIPrincipal *other, bool *_retval) override { return _to Equals(other, _retval); } \
  NS_IMETHOD EqualsForPermission(nsIPrincipal *other, bool aExactHost, bool *_retval) override { return _to EqualsForPermission(other, aExactHost, _retval); } \
  NS_IMETHOD EqualsConsideringDomain(nsIPrincipal *other, bool *_retval) override { return _to EqualsConsideringDomain(other, _retval); } \
  NS_IMETHOD EqualsURI(nsIURI *aOtherURI, bool *_retval) override { return _to EqualsURI(aOtherURI, _retval); } \
  using nsIPrincipal::GetURI; \
  NS_IMETHOD GetURI(nsIURI **aURI) override { return _to GetURI(aURI); } \
  NS_IMETHOD GetDomain(nsIURI **aDomain) override { return _to GetDomain(aDomain); } \
  NS_IMETHOD SetDomain(nsIURI *aDomain) override { return _to SetDomain(aDomain); } \
  NS_IMETHOD Subsumes(nsIPrincipal *other, bool *_retval) override { return _to Subsumes(other, _retval); } \
  NS_IMETHOD SubsumesConsideringDomain(nsIPrincipal *other, bool *_retval) override { return _to SubsumesConsideringDomain(other, _retval); } \
  NS_IMETHOD SubsumesConsideringDomainIgnoringFPD(nsIPrincipal *other, bool *_retval) override { return _to SubsumesConsideringDomainIgnoringFPD(other, _retval); } \
  NS_IMETHOD CheckMayLoad(nsIURI *uri, bool allowIfInheritsPrincipal) override { return _to CheckMayLoad(uri, allowIfInheritsPrincipal); } \
  NS_IMETHOD CheckMayLoadWithReporting(nsIURI *uri, bool allowIfInheritsPrincipal, uint64_t innerWindowID) override { return _to CheckMayLoadWithReporting(uri, allowIfInheritsPrincipal, innerWindowID); } \
  NS_IMETHOD IsThirdPartyURI(nsIURI *uri, bool *_retval) override { return _to IsThirdPartyURI(uri, _retval); } \
  NS_IMETHOD IsThirdPartyPrincipal(nsIPrincipal *principal, bool *_retval) override { return _to IsThirdPartyPrincipal(principal, _retval); } \
  NS_IMETHOD IsThirdPartyChannel(nsIChannel *channel, bool *_retval) override { return _to IsThirdPartyChannel(channel, _retval); } \
  NS_IMETHOD GetOriginAttributes(JSContext* cx, JS::MutableHandle<JS::Value> aOriginAttributes) override { return _to GetOriginAttributes(cx, aOriginAttributes); } \
  virtual const mozilla::OriginAttributes & OriginAttributesRef(void) override { return _to OriginAttributesRef(); } \
  NS_IMETHOD GetOrigin(nsACString& aOrigin) override { return _to GetOrigin(aOrigin); } \
  NS_IMETHOD GetWebExposedOriginSerialization(nsACString& aWebExposedOriginSerialization) override { return _to GetWebExposedOriginSerialization(aWebExposedOriginSerialization); } \
  NS_IMETHOD GetHostPort(nsACString& aHostPort) override { return _to GetHostPort(aHostPort); } \
  NS_IMETHOD GetAsciiHost(nsACString& aAsciiHost) override { return _to GetAsciiHost(aAsciiHost); } \
  NS_IMETHOD GetHost(nsACString& aHost) override { return _to GetHost(aHost); } \
  NS_IMETHOD GetPrePath(nsACString& aPrePath) override { return _to GetPrePath(aPrePath); } \
  NS_IMETHOD GetFilePath(nsACString& aFilePath) override { return _to GetFilePath(aFilePath); } \
  NS_IMETHOD GetAsciiSpec(nsACString& aAsciiSpec) override { return _to GetAsciiSpec(aAsciiSpec); } \
  NS_IMETHOD GetSpec(nsACString& aSpec) override { return _to GetSpec(aSpec); } \
  NS_IMETHOD GetExposablePrePath(nsACString& aExposablePrePath) override { return _to GetExposablePrePath(aExposablePrePath); } \
  NS_IMETHOD GetExposableSpec(nsACString& aExposableSpec) override { return _to GetExposableSpec(aExposableSpec); } \
  NS_IMETHOD GetScheme(nsACString& aScheme) override { return _to GetScheme(aScheme); } \
  NS_IMETHOD SchemeIs(const char * scheme, bool *_retval) override { return _to SchemeIs(scheme, _retval); } \
  NS_IMETHOD IsURIInPrefList(const char * pref, bool *_retval) override { return _to IsURIInPrefList(pref, _retval); } \
  NS_IMETHOD IsURIInList(const nsACString& list, bool *_retval) override { return _to IsURIInList(list, _retval); } \
  NS_IMETHOD IsContentAccessibleAboutURI(bool *_retval) override { return _to IsContentAccessibleAboutURI(_retval); } \
  NS_IMETHOD IsSameOrigin(nsIURI *otherURI, bool *_retval) override { return _to IsSameOrigin(otherURI, _retval); } \
  NS_IMETHOD GetPrefLightCacheKey(nsIURI *aURI, bool aWithCredentials, const mozilla::OriginAttributes & aOriginAttributes, nsACString& _retval) override { return _to GetPrefLightCacheKey(aURI, aWithCredentials, aOriginAttributes, _retval); } \
  NS_IMETHOD HasFirstpartyStorageAccess(mozIDOMWindow *aWindow, uint32_t *rejectedReason, bool *_retval) override { return _to HasFirstpartyStorageAccess(aWindow, rejectedReason, _retval); } \
  NS_IMETHOD GetLocalStorageQuotaKey(nsACString& aLocalStorageQuotaKey) override { return _to GetLocalStorageQuotaKey(aLocalStorageQuotaKey); } \
  using nsIPrincipal::GetIsOriginPotentiallyTrustworthy; \
  NS_IMETHOD GetIsOriginPotentiallyTrustworthy(bool *aIsOriginPotentiallyTrustworthy) override { return _to GetIsOriginPotentiallyTrustworthy(aIsOriginPotentiallyTrustworthy); } \
  using nsIPrincipal::GetIsLoopbackHost; \
  NS_IMETHOD GetIsLoopbackHost(bool *aIsLoopbackHost) override { return _to GetIsLoopbackHost(aIsLoopbackHost); } \
  using nsIPrincipal::GetIsSecureContextAllowlistedHost; \
  NS_IMETHOD GetIsSecureContextAllowlistedHost(bool *aIsSecureContextAllowlistedHost) override { return _to GetIsSecureContextAllowlistedHost(aIsSecureContextAllowlistedHost); } \
  NS_IMETHOD GetAboutModuleFlags(uint32_t *_retval) override { return _to GetAboutModuleFlags(_retval); } \
  NS_IMETHOD GetStorageOriginKey(nsACString& aStorageOriginKey) override { return _to GetStorageOriginKey(aStorageOriginKey); } \
  NS_IMETHOD CreateReferrerInfo(mozilla::dom::ReferrerPolicy aReferrerPolicy, nsIReferrerInfo **_retval) override { return _to CreateReferrerInfo(aReferrerPolicy, _retval); } \
  NS_IMETHOD GetOriginNoSuffix(nsACString& aOriginNoSuffix) override { return _to GetOriginNoSuffix(aOriginNoSuffix); } \
  NS_IMETHOD GetOriginSuffix(nsACString& aOriginSuffix) override { return _to GetOriginSuffix(aOriginSuffix); } \
  NS_IMETHOD GetSiteOrigin(nsACString& aSiteOrigin) override { return _to GetSiteOrigin(aSiteOrigin); } \
  NS_IMETHOD GetSiteOriginNoSuffix(nsACString& aSiteOriginNoSuffix) override { return _to GetSiteOriginNoSuffix(aSiteOriginNoSuffix); } \
  NS_IMETHOD GetBaseDomain(nsACString& aBaseDomain) override { return _to GetBaseDomain(aBaseDomain); } \
  NS_IMETHOD GetAddonId(nsAString& aAddonId) override { return _to GetAddonId(aAddonId); } \
  NS_IMETHOD GetAddonPolicy(mozilla::extensions::WebExtensionPolicy **aAddonPolicy) override { return _to GetAddonPolicy(aAddonPolicy); } \
  NS_IMETHOD GetContentScriptAddonPolicy(mozilla::extensions::WebExtensionPolicy **aContentScriptAddonPolicy) override { return _to GetContentScriptAddonPolicy(aContentScriptAddonPolicy); } \
  using nsIPrincipal::GetUserContextId; \
  NS_IMETHOD GetUserContextId(uint32_t *aUserContextId) override { return _to GetUserContextId(aUserContextId); } \
  using nsIPrincipal::GetPrivateBrowsingId; \
  NS_IMETHOD GetPrivateBrowsingId(uint32_t *aPrivateBrowsingId) override { return _to GetPrivateBrowsingId(aPrivateBrowsingId); } \
  using nsIPrincipal::GetIsInPrivateBrowsing; \
  NS_IMETHOD GetIsInPrivateBrowsing(bool *aIsInPrivateBrowsing) override { return _to GetIsInPrivateBrowsing(aIsInPrivateBrowsing); } \
  using nsIPrincipal::GetIsNullPrincipal; \
  NS_IMETHOD GetIsNullPrincipal(bool *aIsNullPrincipal) override { return _to GetIsNullPrincipal(aIsNullPrincipal); } \
  using nsIPrincipal::GetIsContentPrincipal; \
  NS_IMETHOD GetIsContentPrincipal(bool *aIsContentPrincipal) override { return _to GetIsContentPrincipal(aIsContentPrincipal); } \
  using nsIPrincipal::GetIsExpandedPrincipal; \
  NS_IMETHOD GetIsExpandedPrincipal(bool *aIsExpandedPrincipal) override { return _to GetIsExpandedPrincipal(aIsExpandedPrincipal); } \
  NS_IMETHOD GetIsSystemPrincipal(bool *aIsSystemPrincipal) override { return _to GetIsSystemPrincipal(aIsSystemPrincipal); } \
  using nsIPrincipal::GetIsAddonPrincipal; \
  NS_IMETHOD GetIsAddonPrincipal(bool *aIsAddonPrincipal) override { return _to GetIsAddonPrincipal(aIsAddonPrincipal); } \
  using nsIPrincipal::GetIsAddonOrExpandedAddonPrincipal; \
  NS_IMETHOD GetIsAddonOrExpandedAddonPrincipal(bool *aIsAddonOrExpandedAddonPrincipal) override { return _to GetIsAddonOrExpandedAddonPrincipal(aIsAddonOrExpandedAddonPrincipal); } \
  using nsIPrincipal::GetIsOnion; \
  NS_IMETHOD GetIsOnion(bool *aIsOnion) override { return _to GetIsOnion(aIsOnion); } \
  NS_IMETHOD GetIsScriptAllowedByPolicy(bool *aIsScriptAllowedByPolicy) override { return _to GetIsScriptAllowedByPolicy(aIsScriptAllowedByPolicy); } \
  NS_IMETHOD IsL10nAllowed(nsIURI *aDocumentURI, bool *_retval) override { return _to IsL10nAllowed(aDocumentURI, _retval); } \
  using nsIPrincipal::GetNextSubDomainPrincipal; \
  NS_IMETHOD GetNextSubDomainPrincipal(nsIPrincipal **aNextSubDomainPrincipal) override { return _to GetNextSubDomainPrincipal(aNextSubDomainPrincipal); } \
  using nsIPrincipal::GetIsIpAddress; \
  NS_IMETHOD GetIsIpAddress(bool *aIsIpAddress) override { return _to GetIsIpAddress(aIsIpAddress); } \
  using nsIPrincipal::GetIsLocalIpAddress; \
  NS_IMETHOD GetIsLocalIpAddress(bool *aIsLocalIpAddress) override { return _to GetIsLocalIpAddress(aIsLocalIpAddress); } \
  using nsIPrincipal::GetPrecursorPrincipal; \
  NS_IMETHOD GetPrecursorPrincipal(nsIPrincipal **aPrecursorPrincipal) override { return _to GetPrecursorPrincipal(aPrecursorPrincipal); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIPRINCIPAL(_to) \
  NS_IMETHOD Equals(nsIPrincipal *other, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->Equals(other, _retval); } \
  NS_IMETHOD EqualsForPermission(nsIPrincipal *other, bool aExactHost, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->EqualsForPermission(other, aExactHost, _retval); } \
  NS_IMETHOD EqualsConsideringDomain(nsIPrincipal *other, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->EqualsConsideringDomain(other, _retval); } \
  NS_IMETHOD EqualsURI(nsIURI *aOtherURI, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->EqualsURI(aOtherURI, _retval); } \
  NS_IMETHOD GetURI(nsIURI **aURI) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetURI(aURI); } \
  NS_IMETHOD GetDomain(nsIURI **aDomain) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDomain(aDomain); } \
  NS_IMETHOD SetDomain(nsIURI *aDomain) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDomain(aDomain); } \
  NS_IMETHOD Subsumes(nsIPrincipal *other, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->Subsumes(other, _retval); } \
  NS_IMETHOD SubsumesConsideringDomain(nsIPrincipal *other, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SubsumesConsideringDomain(other, _retval); } \
  NS_IMETHOD SubsumesConsideringDomainIgnoringFPD(nsIPrincipal *other, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SubsumesConsideringDomainIgnoringFPD(other, _retval); } \
  NS_IMETHOD CheckMayLoad(nsIURI *uri, bool allowIfInheritsPrincipal) override { return !_to ? NS_ERROR_NULL_POINTER : _to->CheckMayLoad(uri, allowIfInheritsPrincipal); } \
  NS_IMETHOD CheckMayLoadWithReporting(nsIURI *uri, bool allowIfInheritsPrincipal, uint64_t innerWindowID) override { return !_to ? NS_ERROR_NULL_POINTER : _to->CheckMayLoadWithReporting(uri, allowIfInheritsPrincipal, innerWindowID); } \
  NS_IMETHOD IsThirdPartyURI(nsIURI *uri, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->IsThirdPartyURI(uri, _retval); } \
  NS_IMETHOD IsThirdPartyPrincipal(nsIPrincipal *principal, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->IsThirdPartyPrincipal(principal, _retval); } \
  NS_IMETHOD IsThirdPartyChannel(nsIChannel *channel, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->IsThirdPartyChannel(channel, _retval); } \
  NS_IMETHOD GetOriginAttributes(JSContext* cx, JS::MutableHandle<JS::Value> aOriginAttributes) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetOriginAttributes(cx, aOriginAttributes); } \
  virtual const mozilla::OriginAttributes & OriginAttributesRef(void) override; \
  NS_IMETHOD GetOrigin(nsACString& aOrigin) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetOrigin(aOrigin); } \
  NS_IMETHOD GetWebExposedOriginSerialization(nsACString& aWebExposedOriginSerialization) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetWebExposedOriginSerialization(aWebExposedOriginSerialization); } \
  NS_IMETHOD GetHostPort(nsACString& aHostPort) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetHostPort(aHostPort); } \
  NS_IMETHOD GetAsciiHost(nsACString& aAsciiHost) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsciiHost(aAsciiHost); } \
  NS_IMETHOD GetHost(nsACString& aHost) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetHost(aHost); } \
  NS_IMETHOD GetPrePath(nsACString& aPrePath) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetPrePath(aPrePath); } \
  NS_IMETHOD GetFilePath(nsACString& aFilePath) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFilePath(aFilePath); } \
  NS_IMETHOD GetAsciiSpec(nsACString& aAsciiSpec) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsciiSpec(aAsciiSpec); } \
  NS_IMETHOD GetSpec(nsACString& aSpec) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSpec(aSpec); } \
  NS_IMETHOD GetExposablePrePath(nsACString& aExposablePrePath) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetExposablePrePath(aExposablePrePath); } \
  NS_IMETHOD GetExposableSpec(nsACString& aExposableSpec) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetExposableSpec(aExposableSpec); } \
  NS_IMETHOD GetScheme(nsACString& aScheme) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetScheme(aScheme); } \
  NS_IMETHOD SchemeIs(const char * scheme, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SchemeIs(scheme, _retval); } \
  NS_IMETHOD IsURIInPrefList(const char * pref, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->IsURIInPrefList(pref, _retval); } \
  NS_IMETHOD IsURIInList(const nsACString& list, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->IsURIInList(list, _retval); } \
  NS_IMETHOD IsContentAccessibleAboutURI(bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->IsContentAccessibleAboutURI(_retval); } \
  NS_IMETHOD IsSameOrigin(nsIURI *otherURI, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->IsSameOrigin(otherURI, _retval); } \
  NS_IMETHOD GetPrefLightCacheKey(nsIURI *aURI, bool aWithCredentials, const mozilla::OriginAttributes & aOriginAttributes, nsACString& _retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetPrefLightCacheKey(aURI, aWithCredentials, aOriginAttributes, _retval); } \
  NS_IMETHOD HasFirstpartyStorageAccess(mozIDOMWindow *aWindow, uint32_t *rejectedReason, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->HasFirstpartyStorageAccess(aWindow, rejectedReason, _retval); } \
  NS_IMETHOD GetLocalStorageQuotaKey(nsACString& aLocalStorageQuotaKey) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetLocalStorageQuotaKey(aLocalStorageQuotaKey); } \
  NS_IMETHOD GetIsOriginPotentiallyTrustworthy(bool *aIsOriginPotentiallyTrustworthy) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsOriginPotentiallyTrustworthy(aIsOriginPotentiallyTrustworthy); } \
  NS_IMETHOD GetIsLoopbackHost(bool *aIsLoopbackHost) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsLoopbackHost(aIsLoopbackHost); } \
  NS_IMETHOD GetIsSecureContextAllowlistedHost(bool *aIsSecureContextAllowlistedHost) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsSecureContextAllowlistedHost(aIsSecureContextAllowlistedHost); } \
  NS_IMETHOD GetAboutModuleFlags(uint32_t *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAboutModuleFlags(_retval); } \
  NS_IMETHOD GetStorageOriginKey(nsACString& aStorageOriginKey) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetStorageOriginKey(aStorageOriginKey); } \
  NS_IMETHOD CreateReferrerInfo(mozilla::dom::ReferrerPolicy aReferrerPolicy, nsIReferrerInfo **_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->CreateReferrerInfo(aReferrerPolicy, _retval); } \
  NS_IMETHOD GetOriginNoSuffix(nsACString& aOriginNoSuffix) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetOriginNoSuffix(aOriginNoSuffix); } \
  NS_IMETHOD GetOriginSuffix(nsACString& aOriginSuffix) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetOriginSuffix(aOriginSuffix); } \
  NS_IMETHOD GetSiteOrigin(nsACString& aSiteOrigin) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSiteOrigin(aSiteOrigin); } \
  NS_IMETHOD GetSiteOriginNoSuffix(nsACString& aSiteOriginNoSuffix) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSiteOriginNoSuffix(aSiteOriginNoSuffix); } \
  NS_IMETHOD GetBaseDomain(nsACString& aBaseDomain) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetBaseDomain(aBaseDomain); } \
  NS_IMETHOD GetAddonId(nsAString& aAddonId) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAddonId(aAddonId); } \
  NS_IMETHOD GetAddonPolicy(mozilla::extensions::WebExtensionPolicy **aAddonPolicy) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAddonPolicy(aAddonPolicy); } \
  NS_IMETHOD GetContentScriptAddonPolicy(mozilla::extensions::WebExtensionPolicy **aContentScriptAddonPolicy) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetContentScriptAddonPolicy(aContentScriptAddonPolicy); } \
  NS_IMETHOD GetUserContextId(uint32_t *aUserContextId) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetUserContextId(aUserContextId); } \
  NS_IMETHOD GetPrivateBrowsingId(uint32_t *aPrivateBrowsingId) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetPrivateBrowsingId(aPrivateBrowsingId); } \
  NS_IMETHOD GetIsInPrivateBrowsing(bool *aIsInPrivateBrowsing) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsInPrivateBrowsing(aIsInPrivateBrowsing); } \
  NS_IMETHOD GetIsNullPrincipal(bool *aIsNullPrincipal) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsNullPrincipal(aIsNullPrincipal); } \
  NS_IMETHOD GetIsContentPrincipal(bool *aIsContentPrincipal) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsContentPrincipal(aIsContentPrincipal); } \
  NS_IMETHOD GetIsExpandedPrincipal(bool *aIsExpandedPrincipal) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsExpandedPrincipal(aIsExpandedPrincipal); } \
  NS_IMETHOD GetIsSystemPrincipal(bool *aIsSystemPrincipal) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsSystemPrincipal(aIsSystemPrincipal); } \
  NS_IMETHOD GetIsAddonPrincipal(bool *aIsAddonPrincipal) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsAddonPrincipal(aIsAddonPrincipal); } \
  NS_IMETHOD GetIsAddonOrExpandedAddonPrincipal(bool *aIsAddonOrExpandedAddonPrincipal) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsAddonOrExpandedAddonPrincipal(aIsAddonOrExpandedAddonPrincipal); } \
  NS_IMETHOD GetIsOnion(bool *aIsOnion) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsOnion(aIsOnion); } \
  NS_IMETHOD GetIsScriptAllowedByPolicy(bool *aIsScriptAllowedByPolicy) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsScriptAllowedByPolicy(aIsScriptAllowedByPolicy); } \
  NS_IMETHOD IsL10nAllowed(nsIURI *aDocumentURI, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->IsL10nAllowed(aDocumentURI, _retval); } \
  NS_IMETHOD GetNextSubDomainPrincipal(nsIPrincipal **aNextSubDomainPrincipal) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNextSubDomainPrincipal(aNextSubDomainPrincipal); } \
  NS_IMETHOD GetIsIpAddress(bool *aIsIpAddress) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsIpAddress(aIsIpAddress); } \
  NS_IMETHOD GetIsLocalIpAddress(bool *aIsLocalIpAddress) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsLocalIpAddress(aIsLocalIpAddress); } \
  NS_IMETHOD GetPrecursorPrincipal(nsIPrincipal **aPrecursorPrincipal) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetPrecursorPrincipal(aPrecursorPrincipal); } 


/* starting interface:    nsIExpandedPrincipal */
#define NS_IEXPANDEDPRINCIPAL_IID_STR "f3e177df-6a5e-489f-80a7-2dd1481471d8"

#define NS_IEXPANDEDPRINCIPAL_IID \
  {0xf3e177df, 0x6a5e, 0x489f, \
    { 0x80, 0xa7, 0x2d, 0xd1, 0x48, 0x14, 0x71, 0xd8 }}

class MOZ_BINDING(binding_to, idl, class, XPIDL_nsIExpandedPrincipal) nsIExpandedPrincipal : public nsISupports {
 public:

  NS_INLINE_DECL_STATIC_IID(NS_IEXPANDEDPRINCIPAL_IID)

  /* [noscript,nostdcall,notxpcom] PrincipalArray AllowList (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIExpandedPrincipal_AllowList)
  virtual const nsTArray<nsCOMPtr<nsIPrincipal>> & AllowList(void) = 0;

  /* readonly attribute nsIContentSecurityPolicy csp; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIExpandedPrincipal_csp)
  NS_IMETHOD GetCsp(nsIContentSecurityPolicy **aCsp) = 0;

// %{C++:777-783
  inline already_AddRefed<nsIContentSecurityPolicy> GetCsp()
  {
    nsCOMPtr<nsIContentSecurityPolicy> result;
    mozilla::DebugOnly<nsresult> rv = GetCsp(getter_AddRefs(result));
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result.forget();
  }
// %}
};


/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIEXPANDEDPRINCIPAL \
  virtual const nsTArray<nsCOMPtr<nsIPrincipal>> & AllowList(void) override; \
  NS_IMETHOD GetCsp(nsIContentSecurityPolicy **aCsp) override; \

/* Use this macro when declaring the members of this interface when the
   class doesn't implement the interface. This is useful for forwarding. */
#define NS_DECL_NON_VIRTUAL_NSIEXPANDEDPRINCIPAL \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIExpandedPrincipal_AllowList)\
  const nsTArray<nsCOMPtr<nsIPrincipal>> & AllowList(void); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIExpandedPrincipal_csp)\
  nsresult GetCsp(nsIContentSecurityPolicy **aCsp); \

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIEXPANDEDPRINCIPAL(_to) \
  virtual const nsTArray<nsCOMPtr<nsIPrincipal>> & AllowList(void) override { return _to AllowList(); } \
  NS_IMETHOD GetCsp(nsIContentSecurityPolicy **aCsp) override { return _to GetCsp(aCsp); } \

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIEXPANDEDPRINCIPAL(_to) \
  virtual const nsTArray<nsCOMPtr<nsIPrincipal>> & AllowList(void) override; \
  NS_IMETHOD GetCsp(nsIContentSecurityPolicy **aCsp) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCsp(aCsp); } \


#endif /* __gen_nsIPrincipal_h__ */
