/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM $SRCDIR/xpcom/ds/nsIObserverService.idl
 */

#ifndef __gen_nsIObserverService_h__
#define __gen_nsIObserverService_h__


#include "nsISupports.h"

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

class nsISimpleEnumerator; /* forward declaration */


/* starting interface:    nsIObserverService */
#define NS_IOBSERVERSERVICE_IID_STR "d07f5192-e3d1-11d2-8acd-00105a1b8860"

#define NS_IOBSERVERSERVICE_IID \
  {0xd07f5192, 0xe3d1, 0x11d2, \
    { 0x8a, 0xcd, 0x00, 0x10, 0x5a, 0x1b, 0x88, 0x60 }}

class MOZ_BINDING(binding_to, idl, class, XPIDL_nsIObserverService) nsIObserverService : public nsISupports {
 public:

  NS_INLINE_DECL_STATIC_IID(NS_IOBSERVERSERVICE_IID)

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

  /* void addObserver (in nsIObserver anObserver, in string aTopic, [optional] in boolean ownsWeak); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIObserverService_addObserver)
  NS_IMETHOD AddObserver(nsIObserver *anObserver, const char * aTopic, bool ownsWeak) = 0;

  /* void removeObserver (in nsIObserver anObserver, in string aTopic); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIObserverService_removeObserver)
  NS_IMETHOD RemoveObserver(nsIObserver *anObserver, const char * aTopic) = 0;

  /* void notifyObservers (in nsISupports aSubject, in string aTopic, [optional] in wstring someData); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIObserverService_notifyObservers)
  NS_IMETHOD NotifyObservers(nsISupports *aSubject, const char * aTopic, const char16_t * someData) = 0;

  /* [noscript,nostdcall,notxpcom] boolean hasObservers (in string aTopic); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIObserverService_hasObservers)
  virtual bool HasObservers(const char * aTopic) = 0;

// %{C++:81-95
    /**
     * notifyWhenScriptSafe
     *
     * Notifies all registered listeners of the given topic once it is safe to
     * run script.
     *
     * Implemented in "nsObserverService.cpp".
     *
     * @param aSubject : Notification specific interface pointer.
     * @param aTopic   : The notification topic or subject.
     * @param someData : Notification specific wide string.
     */
    nsresult NotifyWhenScriptSafe(nsISupports* aSubject,
                                  const char* aTopic,
                                  const char16_t* aData = nullptr);
// %}
  /* nsISimpleEnumerator enumerateObservers (in string aTopic); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIObserverService_enumerateObservers)
  NS_IMETHOD EnumerateObservers(const char * aTopic, nsISimpleEnumerator **_retval) = 0;

};


/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIOBSERVERSERVICE \
  NS_IMETHOD AddObserver(nsIObserver *anObserver, const char * aTopic, bool ownsWeak) override; \
  NS_IMETHOD RemoveObserver(nsIObserver *anObserver, const char * aTopic) override; \
  NS_IMETHOD NotifyObservers(nsISupports *aSubject, const char * aTopic, const char16_t * someData) override; \
  virtual bool HasObservers(const char * aTopic) override; \
  NS_IMETHOD EnumerateObservers(const char * aTopic, nsISimpleEnumerator **_retval) 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_NSIOBSERVERSERVICE \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIObserverService_addObserver)\
  nsresult AddObserver(nsIObserver *anObserver, const char * aTopic, bool ownsWeak); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIObserverService_removeObserver)\
  nsresult RemoveObserver(nsIObserver *anObserver, const char * aTopic); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIObserverService_notifyObservers)\
  nsresult NotifyObservers(nsISupports *aSubject, const char * aTopic, const char16_t * someData); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIObserverService_hasObservers)\
  bool HasObservers(const char * aTopic); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIObserverService_enumerateObservers)\
  nsresult EnumerateObservers(const char * aTopic, nsISimpleEnumerator **_retval); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIOBSERVERSERVICE(_to) \
  NS_IMETHOD AddObserver(nsIObserver *anObserver, const char * aTopic, bool ownsWeak) override { return _to AddObserver(anObserver, aTopic, ownsWeak); } \
  NS_IMETHOD RemoveObserver(nsIObserver *anObserver, const char * aTopic) override { return _to RemoveObserver(anObserver, aTopic); } \
  NS_IMETHOD NotifyObservers(nsISupports *aSubject, const char * aTopic, const char16_t * someData) override { return _to NotifyObservers(aSubject, aTopic, someData); } \
  virtual bool HasObservers(const char * aTopic) override { return _to HasObservers(aTopic); } \
  NS_IMETHOD EnumerateObservers(const char * aTopic, nsISimpleEnumerator **_retval) override { return _to EnumerateObservers(aTopic, _retval); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIOBSERVERSERVICE(_to) \
  NS_IMETHOD AddObserver(nsIObserver *anObserver, const char * aTopic, bool ownsWeak) override { return !_to ? NS_ERROR_NULL_POINTER : _to->AddObserver(anObserver, aTopic, ownsWeak); } \
  NS_IMETHOD RemoveObserver(nsIObserver *anObserver, const char * aTopic) override { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveObserver(anObserver, aTopic); } \
  NS_IMETHOD NotifyObservers(nsISupports *aSubject, const char * aTopic, const char16_t * someData) override { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyObservers(aSubject, aTopic, someData); } \
  virtual bool HasObservers(const char * aTopic) override; \
  NS_IMETHOD EnumerateObservers(const char * aTopic, nsISimpleEnumerator **_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->EnumerateObservers(aTopic, _retval); } 


#endif /* __gen_nsIObserverService_h__ */
