/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM $SRCDIR/dom/interfaces/security/nsIContentSecurityPolicy.idl
 */

#ifndef __gen_nsIContentSecurityPolicy_h__
#define __gen_nsIContentSecurityPolicy_h__


#include "nsISerializable.h"

#include "nsIContentPolicy.h"

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

#include "js/GCAnnotations.h"

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

class nsIEventTarget; /* forward declaration */

class nsILoadInfo; /* forward declaration */

class nsIPrincipal; /* forward declaration */

class nsICSPEventListener; /* forward declaration */

namespace mozilla {
namespace dom {
class Element; /* webidl Element */
} // namespace dom
} // namespace mozilla

namespace mozilla {
namespace dom {
class Document; /* webidl Document */
} // namespace dom
} // namespace mozilla

// %{C++:25-28
class nsCSPPolicy;
namespace mozilla::dom {
struct CSPViolationData;
}
// %}

/* starting interface:    nsIContentSecurityPolicy */
#define NS_ICONTENTSECURITYPOLICY_IID_STR "1d632008-6c97-48ae-a51c-16e2daa0f4f6"

#define NS_ICONTENTSECURITYPOLICY_IID \
  {0x1d632008, 0x6c97, 0x48ae, \
    { 0xa5, 0x1c, 0x16, 0xe2, 0xda, 0xa0, 0xf4, 0xf6 }}

class MOZ_BINDING(binding_to, idl, class, XPIDL_nsIContentSecurityPolicy) nsIContentSecurityPolicy : public nsISerializable {
 public:

  NS_INLINE_DECL_STATIC_IID(NS_ICONTENTSECURITYPOLICY_IID)

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

  enum MOZ_BINDING(binding_to, idl, class, XPIDL_nsIContentSecurityPolicy_CSPDirective) CSPDirective : uint8_t {
    NO_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_NO_DIRECTIVE) = 0,
    DEFAULT_SRC_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_DEFAULT_SRC_DIRECTIVE) = 1,
    SCRIPT_SRC_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_SCRIPT_SRC_DIRECTIVE) = 2,
    OBJECT_SRC_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_OBJECT_SRC_DIRECTIVE) = 3,
    STYLE_SRC_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_STYLE_SRC_DIRECTIVE) = 4,
    IMG_SRC_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_IMG_SRC_DIRECTIVE) = 5,
    MEDIA_SRC_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_MEDIA_SRC_DIRECTIVE) = 6,
    FRAME_SRC_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_FRAME_SRC_DIRECTIVE) = 7,
    FONT_SRC_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_FONT_SRC_DIRECTIVE) = 8,
    CONNECT_SRC_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_CONNECT_SRC_DIRECTIVE) = 9,
    REPORT_URI_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_REPORT_URI_DIRECTIVE) = 10,
    FRAME_ANCESTORS_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_FRAME_ANCESTORS_DIRECTIVE) = 11,
    REFLECTED_XSS_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_REFLECTED_XSS_DIRECTIVE) = 12,
    BASE_URI_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_BASE_URI_DIRECTIVE) = 13,
    FORM_ACTION_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_FORM_ACTION_DIRECTIVE) = 14,
    WEB_MANIFEST_SRC_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_WEB_MANIFEST_SRC_DIRECTIVE) = 15,
    UPGRADE_IF_INSECURE_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_UPGRADE_IF_INSECURE_DIRECTIVE) = 16,
    CHILD_SRC_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_CHILD_SRC_DIRECTIVE) = 17,
    BLOCK_ALL_MIXED_CONTENT MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_BLOCK_ALL_MIXED_CONTENT) = 18,
    SANDBOX_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_SANDBOX_DIRECTIVE) = 19,
    WORKER_SRC_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_WORKER_SRC_DIRECTIVE) = 20,
    SCRIPT_SRC_ELEM_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_SCRIPT_SRC_ELEM_DIRECTIVE) = 21,
    SCRIPT_SRC_ATTR_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_SCRIPT_SRC_ATTR_DIRECTIVE) = 22,
    STYLE_SRC_ELEM_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_STYLE_SRC_ELEM_DIRECTIVE) = 23,
    STYLE_SRC_ATTR_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_STYLE_SRC_ATTR_DIRECTIVE) = 24,
    REQUIRE_TRUSTED_TYPES_FOR_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_REQUIRE_TRUSTED_TYPES_FOR_DIRECTIVE) = 25,
    TRUSTED_TYPES_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_TRUSTED_TYPES_DIRECTIVE) = 26,
    REPORT_TO_DIRECTIVE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_CSPDirective_REPORT_TO_DIRECTIVE) = 27,
  };

  enum MOZ_BINDING(binding_to, idl, class, XPIDL_nsIContentSecurityPolicy_RequireTrustedTypesForDirectiveState) RequireTrustedTypesForDirectiveState : uint8_t {
    NONE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_RequireTrustedTypesForDirectiveState_NONE) = 0,
    REPORT_ONLY MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_RequireTrustedTypesForDirectiveState_REPORT_ONLY) = 1,
    ENFORCE MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_RequireTrustedTypesForDirectiveState_ENFORCE) = 2,
  };

  /* [binaryname(GetPolicyString)] AString getPolicy (in unsigned long index); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_getPolicy)
  NS_IMETHOD GetPolicyString(uint32_t index, nsAString& _retval) = 0;

  /* [noscript,nostdcall,notxpcom] CSPPolicyPtr GetPolicy (in unsigned long index); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_GetPolicy)
  virtual const nsCSPPolicy * GetPolicy(uint32_t index) = 0;

  /* readonly attribute unsigned long policyCount; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_policyCount)
  NS_IMETHOD GetPolicyCount(uint32_t *aPolicyCount) = 0;

  /* readonly attribute boolean upgradeInsecureRequests; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_upgradeInsecureRequests)
  NS_IMETHOD GetUpgradeInsecureRequests(bool *aUpgradeInsecureRequests) = 0;

  /* readonly attribute boolean blockAllMixedContent; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_blockAllMixedContent)
  NS_IMETHOD GetBlockAllMixedContent(bool *aBlockAllMixedContent) = 0;

  /* readonly attribute boolean enforcesFrameAncestors; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_enforcesFrameAncestors)
  NS_IMETHOD GetEnforcesFrameAncestors(bool *aEnforcesFrameAncestors) = 0;

  /* void appendPolicy (in AString policyString, in boolean reportOnly, in boolean deliveredViaMetaTag); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_appendPolicy)
  NS_IMETHOD AppendPolicy(const nsAString& policyString, bool reportOnly, bool deliveredViaMetaTag) = 0;

  /* [infallible] readonly attribute nsIContentSecurityPolicy_RequireTrustedTypesForDirectiveState requireTrustedTypesForDirectiveState; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_requireTrustedTypesForDirectiveState)
  NS_IMETHOD GetRequireTrustedTypesForDirectiveState(nsIContentSecurityPolicy::RequireTrustedTypesForDirectiveState *aRequireTrustedTypesForDirectiveState) = 0;
  inline nsIContentSecurityPolicy::RequireTrustedTypesForDirectiveState  GetRequireTrustedTypesForDirectiveState()
  {
    nsIContentSecurityPolicy::RequireTrustedTypesForDirectiveState result;
    mozilla::DebugOnly<nsresult> rv = GetRequireTrustedTypesForDirectiveState(&result);
    MOZ_ASSERT(NS_SUCCEEDED(rv));
    return result;
  }

  /* boolean getAllowsInline (in nsIContentSecurityPolicy_CSPDirective aDirective, in boolean aHasUnsafeHash, in AString aNonce, in boolean aParserCreated, in Element aTriggeringElement, in nsICSPEventListener aCSPEventListener, in AString aSourceText, in unsigned long aLineNumber, in unsigned long aColumnNumber); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_getAllowsInline)
  NS_IMETHOD GetAllowsInline(nsIContentSecurityPolicy::CSPDirective aDirective, bool aHasUnsafeHash, const nsAString& aNonce, bool aParserCreated, mozilla::dom::Element *aTriggeringElement, nsICSPEventListener *aCSPEventListener, const nsAString& aSourceText, uint32_t aLineNumber, uint32_t aColumnNumber, bool *_retval) = 0;

  /* boolean getAllowsEval (out boolean shouldReportViolations); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_getAllowsEval)
  NS_IMETHOD GetAllowsEval(bool *shouldReportViolations, bool *_retval) = 0;

  /* boolean getAllowsWasmEval (out boolean shouldReportViolations); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_getAllowsWasmEval)
  NS_IMETHOD GetAllowsWasmEval(bool *shouldReportViolations, bool *_retval) = 0;

  /* uint32_t getCSPSandboxFlags (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_getCSPSandboxFlags)
  NS_IMETHOD GetCSPSandboxFlags(uint32_t *_retval) = 0;

  /* void logViolationDetails (in unsigned short violationType, in Element triggeringElement, in nsICSPEventListener aCSPEventListener, in ACString sourceFile, in AString scriptSample, in int32_t lineNum, in int32_t columnNum, [optional] in AString nonce, [optional] in AString content); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_logViolationDetails)
  NS_IMETHOD LogViolationDetails(uint16_t violationType, mozilla::dom::Element *triggeringElement, nsICSPEventListener *aCSPEventListener, const nsACString& sourceFile, const nsAString& scriptSample, int32_t lineNum, int32_t columnNum, const nsAString& nonce, const nsAString& content) = 0;

  enum {
    VIOLATION_TYPE_EVAL MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_VIOLATION_TYPE_EVAL) = 1U,
    VIOLATION_TYPE_WASM_EVAL MOZ_BINDING(binding_to, idl, const, XPIDL_nsIContentSecurityPolicy_VIOLATION_TYPE_WASM_EVAL) = 2U
  };

  /* [noscript] void logTrustedTypesViolationDetailsUnchecked (in CSPViolationData aCSPViolationData, in AString aObserverSubject, in nsICSPEventListener aCSPEventListener); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_logTrustedTypesViolationDetailsUnchecked)
  NS_IMETHOD LogTrustedTypesViolationDetailsUnchecked(mozilla::dom::CSPViolationData&& aCSPViolationData, const nsAString& aObserverSubject, nsICSPEventListener *aCSPEventListener) = 0;

  /* [must_use] void setRequestContextWithDocument (in Document aDocument); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_setRequestContextWithDocument)
  [[nodiscard]] NS_IMETHOD SetRequestContextWithDocument(mozilla::dom::Document *aDocument) = 0;

  /* [must_use] void setRequestContextWithPrincipal (in nsIPrincipal aRequestPrincipal, in nsIURI aSelfURI, in ACString aReferrer, in unsigned long long aInnerWindowId); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_setRequestContextWithPrincipal)
  [[nodiscard]] NS_IMETHOD SetRequestContextWithPrincipal(nsIPrincipal *aRequestPrincipal, nsIURI *aSelfURI, const nsACString& aReferrer, uint64_t aInnerWindowId) = 0;

  /* [noscript,nostdcall,notxpcom] readonly attribute nsIPrincipal requestPrincipal; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_requestPrincipal)
  virtual nsIPrincipal * GetRequestPrincipal() = 0;

  /* [noscript,nostdcall,notxpcom] readonly attribute nsIURI selfURI; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_selfURI)
  virtual nsIURI * GetSelfURI() = 0;

  /* [noscript] readonly attribute ACString referrer; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_referrer)
  NS_IMETHOD GetReferrer(nsACString& aReferrer) = 0;

  /* [noscript,nostdcall,notxpcom] readonly attribute unsigned long long innerWindowID; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_innerWindowID)
  virtual uint64_t GetInnerWindowID() = 0;

  /* [noscript,nostdcall,notxpcom] attribute boolean skipAllowInlineStyleCheck; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_skipAllowInlineStyleCheck)
  virtual bool GetSkipAllowInlineStyleCheck() = 0;
  MOZ_BINDING(binding_to, idl, setter, XPIDL_nsIContentSecurityPolicy_skipAllowInlineStyleCheck)
  virtual void SetSkipAllowInlineStyleCheck(bool aSkipAllowInlineStyleCheck) = 0;

  /* [noscript] void ensureEventTarget (in nsIEventTarget aEventTarget); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_ensureEventTarget)
  NS_IMETHOD EnsureEventTarget(nsIEventTarget *aEventTarget) = 0;

  /* boolean permitsAncestry (in nsILoadInfo aLoadInfo); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_permitsAncestry)
  NS_IMETHOD PermitsAncestry(nsILoadInfo *aLoadInfo, bool *_retval) = 0;

  /* boolean permits (in Element aTriggeringElement, in nsICSPEventListener aCSPEventListener, in nsIURI aURI, in nsIContentSecurityPolicy_CSPDirective aDir, in boolean aSpecific, in boolean aSendViolationReports); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_permits)
  NS_IMETHOD Permits(mozilla::dom::Element *aTriggeringElement, nsICSPEventListener *aCSPEventListener, nsIURI *aURI, nsIContentSecurityPolicy::CSPDirective aDir, bool aSpecific, bool aSendViolationReports, bool *_retval) = 0;

  /* short shouldLoad (in nsContentPolicyType aContentType, in nsICSPEventListener aCSPEventListener, in nsILoadInfo aLoadInfo, in nsIURI aContentLocation, in nsIURI aOriginalURIIfRedirect, in boolean aSendViolationReports); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_shouldLoad)
  NS_IMETHOD ShouldLoad(nsContentPolicyType aContentType, nsICSPEventListener *aCSPEventListener, nsILoadInfo *aLoadInfo, nsIURI *aContentLocation, nsIURI *aOriginalURIIfRedirect, bool aSendViolationReports, int16_t *_retval) = 0;

// %{C++:384-385
// nsIObserver topic to fire when the policy encounters a violation.
#define CSP_VIOLATION_TOPIC "csp-on-violate-policy"
// %}
  /* AString toJSON (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_toJSON)
  NS_IMETHOD ToJSON(nsAString& _retval) = 0;

  /* [noscript] void EnsureIPCPoliciesRead (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_EnsureIPCPoliciesRead)
  NS_IMETHOD EnsureIPCPoliciesRead(void) = 0;

};


/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSICONTENTSECURITYPOLICY \
  NS_IMETHOD GetPolicyString(uint32_t index, nsAString& _retval) override; \
  virtual const nsCSPPolicy * GetPolicy(uint32_t index) override; \
  NS_IMETHOD GetPolicyCount(uint32_t *aPolicyCount) override; \
  NS_IMETHOD GetUpgradeInsecureRequests(bool *aUpgradeInsecureRequests) override; \
  NS_IMETHOD GetBlockAllMixedContent(bool *aBlockAllMixedContent) override; \
  NS_IMETHOD GetEnforcesFrameAncestors(bool *aEnforcesFrameAncestors) override; \
  NS_IMETHOD AppendPolicy(const nsAString& policyString, bool reportOnly, bool deliveredViaMetaTag) override; \
  using nsIContentSecurityPolicy::GetRequireTrustedTypesForDirectiveState; \
  NS_IMETHOD GetRequireTrustedTypesForDirectiveState(nsIContentSecurityPolicy::RequireTrustedTypesForDirectiveState *aRequireTrustedTypesForDirectiveState) override; \
  NS_IMETHOD GetAllowsInline(nsIContentSecurityPolicy::CSPDirective aDirective, bool aHasUnsafeHash, const nsAString& aNonce, bool aParserCreated, mozilla::dom::Element *aTriggeringElement, nsICSPEventListener *aCSPEventListener, const nsAString& aSourceText, uint32_t aLineNumber, uint32_t aColumnNumber, bool *_retval) override; \
  NS_IMETHOD GetAllowsEval(bool *shouldReportViolations, bool *_retval) override; \
  NS_IMETHOD GetAllowsWasmEval(bool *shouldReportViolations, bool *_retval) override; \
  NS_IMETHOD GetCSPSandboxFlags(uint32_t *_retval) override; \
  NS_IMETHOD LogViolationDetails(uint16_t violationType, mozilla::dom::Element *triggeringElement, nsICSPEventListener *aCSPEventListener, const nsACString& sourceFile, const nsAString& scriptSample, int32_t lineNum, int32_t columnNum, const nsAString& nonce, const nsAString& content) override; \
  NS_IMETHOD LogTrustedTypesViolationDetailsUnchecked(mozilla::dom::CSPViolationData&& aCSPViolationData, const nsAString& aObserverSubject, nsICSPEventListener *aCSPEventListener) override; \
  [[nodiscard]] NS_IMETHOD SetRequestContextWithDocument(mozilla::dom::Document *aDocument) override; \
  [[nodiscard]] NS_IMETHOD SetRequestContextWithPrincipal(nsIPrincipal *aRequestPrincipal, nsIURI *aSelfURI, const nsACString& aReferrer, uint64_t aInnerWindowId) override; \
  virtual nsIPrincipal * GetRequestPrincipal() override; \
  virtual nsIURI * GetSelfURI() override; \
  NS_IMETHOD GetReferrer(nsACString& aReferrer) override; \
  virtual uint64_t GetInnerWindowID() override; \
  virtual bool GetSkipAllowInlineStyleCheck() override; \
  virtual void SetSkipAllowInlineStyleCheck(bool aSkipAllowInlineStyleCheck) override; \
  NS_IMETHOD EnsureEventTarget(nsIEventTarget *aEventTarget) override; \
  NS_IMETHOD PermitsAncestry(nsILoadInfo *aLoadInfo, bool *_retval) override; \
  NS_IMETHOD Permits(mozilla::dom::Element *aTriggeringElement, nsICSPEventListener *aCSPEventListener, nsIURI *aURI, nsIContentSecurityPolicy::CSPDirective aDir, bool aSpecific, bool aSendViolationReports, bool *_retval) override; \
  NS_IMETHOD ShouldLoad(nsContentPolicyType aContentType, nsICSPEventListener *aCSPEventListener, nsILoadInfo *aLoadInfo, nsIURI *aContentLocation, nsIURI *aOriginalURIIfRedirect, bool aSendViolationReports, int16_t *_retval) override; \
  NS_IMETHOD ToJSON(nsAString& _retval) override; \
  NS_IMETHOD EnsureIPCPoliciesRead(void) 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_NSICONTENTSECURITYPOLICY \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_getPolicy)\
  nsresult GetPolicyString(uint32_t index, nsAString& _retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_GetPolicy)\
  const nsCSPPolicy * GetPolicy(uint32_t index); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_policyCount)\
  nsresult GetPolicyCount(uint32_t *aPolicyCount); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_upgradeInsecureRequests)\
  nsresult GetUpgradeInsecureRequests(bool *aUpgradeInsecureRequests); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_blockAllMixedContent)\
  nsresult GetBlockAllMixedContent(bool *aBlockAllMixedContent); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_enforcesFrameAncestors)\
  nsresult GetEnforcesFrameAncestors(bool *aEnforcesFrameAncestors); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_appendPolicy)\
  nsresult AppendPolicy(const nsAString& policyString, bool reportOnly, bool deliveredViaMetaTag); \
  using nsIContentSecurityPolicy::GetRequireTrustedTypesForDirectiveState; \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_requireTrustedTypesForDirectiveState)\
  nsresult GetRequireTrustedTypesForDirectiveState(nsIContentSecurityPolicy::RequireTrustedTypesForDirectiveState *aRequireTrustedTypesForDirectiveState); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_getAllowsInline)\
  nsresult GetAllowsInline(nsIContentSecurityPolicy::CSPDirective aDirective, bool aHasUnsafeHash, const nsAString& aNonce, bool aParserCreated, mozilla::dom::Element *aTriggeringElement, nsICSPEventListener *aCSPEventListener, const nsAString& aSourceText, uint32_t aLineNumber, uint32_t aColumnNumber, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_getAllowsEval)\
  nsresult GetAllowsEval(bool *shouldReportViolations, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_getAllowsWasmEval)\
  nsresult GetAllowsWasmEval(bool *shouldReportViolations, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_getCSPSandboxFlags)\
  nsresult GetCSPSandboxFlags(uint32_t *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_logViolationDetails)\
  nsresult LogViolationDetails(uint16_t violationType, mozilla::dom::Element *triggeringElement, nsICSPEventListener *aCSPEventListener, const nsACString& sourceFile, const nsAString& scriptSample, int32_t lineNum, int32_t columnNum, const nsAString& nonce, const nsAString& content); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_logTrustedTypesViolationDetailsUnchecked)\
  nsresult LogTrustedTypesViolationDetailsUnchecked(mozilla::dom::CSPViolationData&& aCSPViolationData, const nsAString& aObserverSubject, nsICSPEventListener *aCSPEventListener); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_setRequestContextWithDocument)\
  [[nodiscard]] nsresult SetRequestContextWithDocument(mozilla::dom::Document *aDocument); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_setRequestContextWithPrincipal)\
  [[nodiscard]] nsresult SetRequestContextWithPrincipal(nsIPrincipal *aRequestPrincipal, nsIURI *aSelfURI, const nsACString& aReferrer, uint64_t aInnerWindowId); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_requestPrincipal)\
  nsIPrincipal * GetRequestPrincipal(); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_selfURI)\
  nsIURI * GetSelfURI(); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_referrer)\
  nsresult GetReferrer(nsACString& aReferrer); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_innerWindowID)\
  uint64_t GetInnerWindowID(); \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIContentSecurityPolicy_skipAllowInlineStyleCheck)\
  bool GetSkipAllowInlineStyleCheck(); \
  MOZ_BINDING(binding_to, idl, setter, XPIDL_nsIContentSecurityPolicy_skipAllowInlineStyleCheck)\
  void SetSkipAllowInlineStyleCheck(bool aSkipAllowInlineStyleCheck); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_ensureEventTarget)\
  nsresult EnsureEventTarget(nsIEventTarget *aEventTarget); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_permitsAncestry)\
  nsresult PermitsAncestry(nsILoadInfo *aLoadInfo, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_permits)\
  nsresult Permits(mozilla::dom::Element *aTriggeringElement, nsICSPEventListener *aCSPEventListener, nsIURI *aURI, nsIContentSecurityPolicy::CSPDirective aDir, bool aSpecific, bool aSendViolationReports, bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_shouldLoad)\
  nsresult ShouldLoad(nsContentPolicyType aContentType, nsICSPEventListener *aCSPEventListener, nsILoadInfo *aLoadInfo, nsIURI *aContentLocation, nsIURI *aOriginalURIIfRedirect, bool aSendViolationReports, int16_t *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_toJSON)\
  nsresult ToJSON(nsAString& _retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIContentSecurityPolicy_EnsureIPCPoliciesRead)\
  nsresult EnsureIPCPoliciesRead(void); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSICONTENTSECURITYPOLICY(_to) \
  NS_IMETHOD GetPolicyString(uint32_t index, nsAString& _retval) override { return _to GetPolicyString(index, _retval); } \
  virtual const nsCSPPolicy * GetPolicy(uint32_t index) override { return _to GetPolicy(index); } \
  NS_IMETHOD GetPolicyCount(uint32_t *aPolicyCount) override { return _to GetPolicyCount(aPolicyCount); } \
  NS_IMETHOD GetUpgradeInsecureRequests(bool *aUpgradeInsecureRequests) override { return _to GetUpgradeInsecureRequests(aUpgradeInsecureRequests); } \
  NS_IMETHOD GetBlockAllMixedContent(bool *aBlockAllMixedContent) override { return _to GetBlockAllMixedContent(aBlockAllMixedContent); } \
  NS_IMETHOD GetEnforcesFrameAncestors(bool *aEnforcesFrameAncestors) override { return _to GetEnforcesFrameAncestors(aEnforcesFrameAncestors); } \
  NS_IMETHOD AppendPolicy(const nsAString& policyString, bool reportOnly, bool deliveredViaMetaTag) override { return _to AppendPolicy(policyString, reportOnly, deliveredViaMetaTag); } \
  using nsIContentSecurityPolicy::GetRequireTrustedTypesForDirectiveState; \
  NS_IMETHOD GetRequireTrustedTypesForDirectiveState(nsIContentSecurityPolicy::RequireTrustedTypesForDirectiveState *aRequireTrustedTypesForDirectiveState) override { return _to GetRequireTrustedTypesForDirectiveState(aRequireTrustedTypesForDirectiveState); } \
  NS_IMETHOD GetAllowsInline(nsIContentSecurityPolicy::CSPDirective aDirective, bool aHasUnsafeHash, const nsAString& aNonce, bool aParserCreated, mozilla::dom::Element *aTriggeringElement, nsICSPEventListener *aCSPEventListener, const nsAString& aSourceText, uint32_t aLineNumber, uint32_t aColumnNumber, bool *_retval) override { return _to GetAllowsInline(aDirective, aHasUnsafeHash, aNonce, aParserCreated, aTriggeringElement, aCSPEventListener, aSourceText, aLineNumber, aColumnNumber, _retval); } \
  NS_IMETHOD GetAllowsEval(bool *shouldReportViolations, bool *_retval) override { return _to GetAllowsEval(shouldReportViolations, _retval); } \
  NS_IMETHOD GetAllowsWasmEval(bool *shouldReportViolations, bool *_retval) override { return _to GetAllowsWasmEval(shouldReportViolations, _retval); } \
  NS_IMETHOD GetCSPSandboxFlags(uint32_t *_retval) override { return _to GetCSPSandboxFlags(_retval); } \
  NS_IMETHOD LogViolationDetails(uint16_t violationType, mozilla::dom::Element *triggeringElement, nsICSPEventListener *aCSPEventListener, const nsACString& sourceFile, const nsAString& scriptSample, int32_t lineNum, int32_t columnNum, const nsAString& nonce, const nsAString& content) override { return _to LogViolationDetails(violationType, triggeringElement, aCSPEventListener, sourceFile, scriptSample, lineNum, columnNum, nonce, content); } \
  NS_IMETHOD LogTrustedTypesViolationDetailsUnchecked(mozilla::dom::CSPViolationData&& aCSPViolationData, const nsAString& aObserverSubject, nsICSPEventListener *aCSPEventListener) override { return _to LogTrustedTypesViolationDetailsUnchecked(aCSPViolationData, aObserverSubject, aCSPEventListener); } \
  [[nodiscard]] NS_IMETHOD SetRequestContextWithDocument(mozilla::dom::Document *aDocument) override { return _to SetRequestContextWithDocument(aDocument); } \
  [[nodiscard]] NS_IMETHOD SetRequestContextWithPrincipal(nsIPrincipal *aRequestPrincipal, nsIURI *aSelfURI, const nsACString& aReferrer, uint64_t aInnerWindowId) override { return _to SetRequestContextWithPrincipal(aRequestPrincipal, aSelfURI, aReferrer, aInnerWindowId); } \
  virtual nsIPrincipal * GetRequestPrincipal() override { return _to GetRequestPrincipal(); } \
  virtual nsIURI * GetSelfURI() override { return _to GetSelfURI(); } \
  NS_IMETHOD GetReferrer(nsACString& aReferrer) override { return _to GetReferrer(aReferrer); } \
  virtual uint64_t GetInnerWindowID() override { return _to GetInnerWindowID(); } \
  virtual bool GetSkipAllowInlineStyleCheck() override { return _to GetSkipAllowInlineStyleCheck(); } \
  virtual void SetSkipAllowInlineStyleCheck(bool aSkipAllowInlineStyleCheck) override { return _to SetSkipAllowInlineStyleCheck(aSkipAllowInlineStyleCheck); } \
  NS_IMETHOD EnsureEventTarget(nsIEventTarget *aEventTarget) override { return _to EnsureEventTarget(aEventTarget); } \
  NS_IMETHOD PermitsAncestry(nsILoadInfo *aLoadInfo, bool *_retval) override { return _to PermitsAncestry(aLoadInfo, _retval); } \
  NS_IMETHOD Permits(mozilla::dom::Element *aTriggeringElement, nsICSPEventListener *aCSPEventListener, nsIURI *aURI, nsIContentSecurityPolicy::CSPDirective aDir, bool aSpecific, bool aSendViolationReports, bool *_retval) override { return _to Permits(aTriggeringElement, aCSPEventListener, aURI, aDir, aSpecific, aSendViolationReports, _retval); } \
  NS_IMETHOD ShouldLoad(nsContentPolicyType aContentType, nsICSPEventListener *aCSPEventListener, nsILoadInfo *aLoadInfo, nsIURI *aContentLocation, nsIURI *aOriginalURIIfRedirect, bool aSendViolationReports, int16_t *_retval) override { return _to ShouldLoad(aContentType, aCSPEventListener, aLoadInfo, aContentLocation, aOriginalURIIfRedirect, aSendViolationReports, _retval); } \
  NS_IMETHOD ToJSON(nsAString& _retval) override { return _to ToJSON(_retval); } \
  NS_IMETHOD EnsureIPCPoliciesRead(void) override { return _to EnsureIPCPoliciesRead(); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSICONTENTSECURITYPOLICY(_to) \
  NS_IMETHOD GetPolicyString(uint32_t index, nsAString& _retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetPolicyString(index, _retval); } \
  virtual const nsCSPPolicy * GetPolicy(uint32_t index) override; \
  NS_IMETHOD GetPolicyCount(uint32_t *aPolicyCount) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetPolicyCount(aPolicyCount); } \
  NS_IMETHOD GetUpgradeInsecureRequests(bool *aUpgradeInsecureRequests) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetUpgradeInsecureRequests(aUpgradeInsecureRequests); } \
  NS_IMETHOD GetBlockAllMixedContent(bool *aBlockAllMixedContent) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetBlockAllMixedContent(aBlockAllMixedContent); } \
  NS_IMETHOD GetEnforcesFrameAncestors(bool *aEnforcesFrameAncestors) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetEnforcesFrameAncestors(aEnforcesFrameAncestors); } \
  NS_IMETHOD AppendPolicy(const nsAString& policyString, bool reportOnly, bool deliveredViaMetaTag) override { return !_to ? NS_ERROR_NULL_POINTER : _to->AppendPolicy(policyString, reportOnly, deliveredViaMetaTag); } \
  NS_IMETHOD GetRequireTrustedTypesForDirectiveState(nsIContentSecurityPolicy::RequireTrustedTypesForDirectiveState *aRequireTrustedTypesForDirectiveState) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRequireTrustedTypesForDirectiveState(aRequireTrustedTypesForDirectiveState); } \
  NS_IMETHOD GetAllowsInline(nsIContentSecurityPolicy::CSPDirective aDirective, bool aHasUnsafeHash, const nsAString& aNonce, bool aParserCreated, mozilla::dom::Element *aTriggeringElement, nsICSPEventListener *aCSPEventListener, const nsAString& aSourceText, uint32_t aLineNumber, uint32_t aColumnNumber, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAllowsInline(aDirective, aHasUnsafeHash, aNonce, aParserCreated, aTriggeringElement, aCSPEventListener, aSourceText, aLineNumber, aColumnNumber, _retval); } \
  NS_IMETHOD GetAllowsEval(bool *shouldReportViolations, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAllowsEval(shouldReportViolations, _retval); } \
  NS_IMETHOD GetAllowsWasmEval(bool *shouldReportViolations, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAllowsWasmEval(shouldReportViolations, _retval); } \
  NS_IMETHOD GetCSPSandboxFlags(uint32_t *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCSPSandboxFlags(_retval); } \
  NS_IMETHOD LogViolationDetails(uint16_t violationType, mozilla::dom::Element *triggeringElement, nsICSPEventListener *aCSPEventListener, const nsACString& sourceFile, const nsAString& scriptSample, int32_t lineNum, int32_t columnNum, const nsAString& nonce, const nsAString& content) override { return !_to ? NS_ERROR_NULL_POINTER : _to->LogViolationDetails(violationType, triggeringElement, aCSPEventListener, sourceFile, scriptSample, lineNum, columnNum, nonce, content); } \
  NS_IMETHOD LogTrustedTypesViolationDetailsUnchecked(mozilla::dom::CSPViolationData&& aCSPViolationData, const nsAString& aObserverSubject, nsICSPEventListener *aCSPEventListener) override { return !_to ? NS_ERROR_NULL_POINTER : _to->LogTrustedTypesViolationDetailsUnchecked(aCSPViolationData, aObserverSubject, aCSPEventListener); } \
  [[nodiscard]] NS_IMETHOD SetRequestContextWithDocument(mozilla::dom::Document *aDocument) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetRequestContextWithDocument(aDocument); } \
  [[nodiscard]] NS_IMETHOD SetRequestContextWithPrincipal(nsIPrincipal *aRequestPrincipal, nsIURI *aSelfURI, const nsACString& aReferrer, uint64_t aInnerWindowId) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetRequestContextWithPrincipal(aRequestPrincipal, aSelfURI, aReferrer, aInnerWindowId); } \
  virtual nsIPrincipal * GetRequestPrincipal() override; \
  virtual nsIURI * GetSelfURI() override; \
  NS_IMETHOD GetReferrer(nsACString& aReferrer) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetReferrer(aReferrer); } \
  virtual uint64_t GetInnerWindowID() override; \
  virtual bool GetSkipAllowInlineStyleCheck() override; \
  virtual void SetSkipAllowInlineStyleCheck(bool aSkipAllowInlineStyleCheck) override; \
  NS_IMETHOD EnsureEventTarget(nsIEventTarget *aEventTarget) override { return !_to ? NS_ERROR_NULL_POINTER : _to->EnsureEventTarget(aEventTarget); } \
  NS_IMETHOD PermitsAncestry(nsILoadInfo *aLoadInfo, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->PermitsAncestry(aLoadInfo, _retval); } \
  NS_IMETHOD Permits(mozilla::dom::Element *aTriggeringElement, nsICSPEventListener *aCSPEventListener, nsIURI *aURI, nsIContentSecurityPolicy::CSPDirective aDir, bool aSpecific, bool aSendViolationReports, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->Permits(aTriggeringElement, aCSPEventListener, aURI, aDir, aSpecific, aSendViolationReports, _retval); } \
  NS_IMETHOD ShouldLoad(nsContentPolicyType aContentType, nsICSPEventListener *aCSPEventListener, nsILoadInfo *aLoadInfo, nsIURI *aContentLocation, nsIURI *aOriginalURIIfRedirect, bool aSendViolationReports, int16_t *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->ShouldLoad(aContentType, aCSPEventListener, aLoadInfo, aContentLocation, aOriginalURIIfRedirect, aSendViolationReports, _retval); } \
  NS_IMETHOD ToJSON(nsAString& _retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->ToJSON(_retval); } \
  NS_IMETHOD EnsureIPCPoliciesRead(void) override { return !_to ? NS_ERROR_NULL_POINTER : _to->EnsureIPCPoliciesRead(); } 

typedef nsIContentSecurityPolicy::CSPDirective  CSPDirective;

typedef nsIContentSecurityPolicy::RequireTrustedTypesForDirectiveState  RequireTrustedTypesForDirectiveState;


/* starting interface:    nsICSPEventListener */
#define NS_ICSPEVENTLISTENER_IID_STR "c3163b14-3a8f-46dd-a4af-bd04680364cd"

#define NS_ICSPEVENTLISTENER_IID \
  {0xc3163b14, 0x3a8f, 0x46dd, \
    { 0xa4, 0xaf, 0xbd, 0x04, 0x68, 0x03, 0x64, 0xcd }}

class NS_NO_VTABLE MOZ_BINDING(binding_to, idl, class, XPIDL_nsICSPEventListener) nsICSPEventListener : public nsISupports {
 public:

  NS_INLINE_DECL_STATIC_IID(NS_ICSPEVENTLISTENER_IID)

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

  /* void onCSPViolationEvent (in AString aJSON, in AString aReportGroupName); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsICSPEventListener_onCSPViolationEvent)
  JS_HAZ_CAN_RUN_SCRIPT NS_IMETHOD OnCSPViolationEvent(const nsAString& aJSON, const nsAString& aReportGroupName) = 0;

};


/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSICSPEVENTLISTENER \
  NS_IMETHOD OnCSPViolationEvent(const nsAString& aJSON, const nsAString& aReportGroupName) 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_NSICSPEVENTLISTENER \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsICSPEventListener_onCSPViolationEvent)\
  nsresult OnCSPViolationEvent(const nsAString& aJSON, const nsAString& aReportGroupName); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSICSPEVENTLISTENER(_to) \
  NS_IMETHOD OnCSPViolationEvent(const nsAString& aJSON, const nsAString& aReportGroupName) override { return _to OnCSPViolationEvent(aJSON, aReportGroupName); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSICSPEVENTLISTENER(_to) \
  NS_IMETHOD OnCSPViolationEvent(const nsAString& aJSON, const nsAString& aReportGroupName) override { return !_to ? NS_ERROR_NULL_POINTER : _to->OnCSPViolationEvent(aJSON, aReportGroupName); } 


#endif /* __gen_nsIContentSecurityPolicy_h__ */
