text: /* THIS FILE IS AUTOGENERATED FROM RTCIceCandidate.webidl BY Codegen.py - DO NOT EDIT */
  
  #ifndef mozilla_dom_RTCIceCandidateBinding_h
  #define mozilla_dom_RTCIceCandidateBinding_h
  
  #include "js/RootingAPI.h"
  #include "jspubtd.h"
  #include "mozilla/ErrorResult.h"
  #include "mozilla/dom/BindingDeclarations.h"
  #include "mozilla/dom/CallbackInterface.h"
  #include "mozilla/dom/Nullable.h"
  #include "mozilla/dom/ToJSValue.h"
  #include "nsWeakReference.h"
  
  namespace mozilla {
  namespace dom {
  
  struct NativePropertyHooks;
  class ProtoAndIfaceCache;
  struct RTCIceCandidateInit;
  struct RTCIceCandidateInitAtoms;
  class mozRTCIceCandidate;
  struct mozRTCIceCandidateAtoms;
  
  } // namespace dom
  } // namespace mozilla
  
  namespace mozilla {
  namespace dom {
  
  struct RTCIceCandidateInit : public DictionaryBase
  {
    nsString mCandidate;
    Optional<uint16_t> mSdpMLineIndex;
    nsString mSdpMid;
  
    RTCIceCandidateInit();
  
    explicit inline RTCIceCandidateInit(const FastDictionaryInitializer& )
    {
      // Do nothing here; this is used by our "Fast" subclass
    }
  
    explicit inline RTCIceCandidateInit(const RTCIceCandidateInit& aOther)
    {
      *this = aOther;
    }
  
    bool
    Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription = "Value", bool passedToJSImpl = false);
  
    bool
    Init(const nsAString& aJSON);
  
    bool
    ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const;
  
    bool
    ToJSON(nsAString& aJSON) const;
  
    void
    TraceDictionary(JSTracer* trc);
  
    void
    operator=(const RTCIceCandidateInit& aOther);
  
  private:
    static bool
    InitIds(JSContext* cx, RTCIceCandidateInitAtoms* atomsCache);
  };
  
  namespace binding_detail {
  struct FastRTCIceCandidateInit : public RTCIceCandidateInit
  {
    inline FastRTCIceCandidateInit()
      : RTCIceCandidateInit(FastDictionaryInitializer())
    {
      // Doesn't matter what int we pass to the parent constructor
    }
  };
  } // namespace binding_detail
  
  
  namespace mozRTCIceCandidateBinding {
  
    typedef mozilla::dom::mozRTCIceCandidate NativeType;
  
    bool
    JsonifyAttributes(JSContext* aCx, JS::Handle<JSObject*> obj, mozilla::dom::mozRTCIceCandidate* self, JS::Rooted<JSObject*>& aResult);
  
    // We declare this as an array so that retrieving a pointer to this
    // binding's property hooks only requires compile/link-time resolvable
    // address arithmetic.  Declaring it as a pointer instead would require
    // doing a run-time load to fetch a pointer to this binding's property
    // hooks.  And then structures which embedded a pointer to this structure
    // would require a run-time load for proper initialization, which would
    // then induce static constructors.  Lots of static constructors.
    extern const NativePropertyHooks sNativePropertyHooks[];
  
    JSObject*
    DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal);
  
    bool
    ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj);
  
    const JSClass*
    GetJSClass();
  
    bool
    Wrap(JSContext* aCx, mozilla::dom::mozRTCIceCandidate* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector);
  
    template <class T>
    inline JSObject* Wrap(JSContext* aCx, T* aObject, JS::Handle<JSObject*> aGivenProto)
    {
      JS::Rooted<JSObject*> reflector(aCx);
      return Wrap(aCx, aObject, aObject, aGivenProto, &reflector) ? reflector.get() : nullptr;
    }
  
    void
    CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal);
  
    JS::Handle<JSObject*>
    GetProtoObjectHandle(JSContext* aCx, JS::Handle<JSObject*> aGlobal);
  
    JS::Handle<JSObject*>
    GetConstructorObjectHandle(JSContext* aCx, JS::Handle<JSObject*> aGlobal, bool aDefineOnGlobal = true);
  
    JSObject*
    GetConstructorObject(JSContext* aCx, JS::Handle<JSObject*> aGlobal);
  
  } // namespace mozRTCIceCandidateBinding
  
  
  
  class mozRTCIceCandidateJSImpl : public CallbackInterface
  {
  public:
    explicit inline mozRTCIceCandidateJSImpl(JS::Handle<JSObject*> aCallback, nsIGlobalObject* aIncumbentGlobal)
      : CallbackInterface(aCallback, aIncumbentGlobal)
    {
    }
  
    void __Init(const RTCIceCandidateInit& candidateInitDict, ErrorResult& aRv, JSCompartment* aCompartment = nullptr);
  
    inline bool
    operator==(const mozRTCIceCandidateJSImpl& aOther) const
    {
      return CallbackInterface::operator==(aOther);
    }
  
    void GetCandidate(nsString& aRetVal, ErrorResult& aRv, JSCompartment* aCompartment = nullptr);
  
    void GetSdpMid(nsString& aRetVal, ErrorResult& aRv, JSCompartment* aCompartment = nullptr);
  
    Nullable<uint16_t> GetSdpMLineIndex(ErrorResult& aRv, JSCompartment* aCompartment = nullptr);
  
    void SetCandidate(const nsAString& arg, ErrorResult& aRv, JSCompartment* aCompartment = nullptr);
  
    void SetSdpMid(const nsAString& arg, ErrorResult& aRv, JSCompartment* aCompartment = nullptr);
  
    void SetSdpMLineIndex(const Nullable<uint16_t>& arg, ErrorResult& aRv, JSCompartment* aCompartment = nullptr);
  
  private:
    static bool
    InitIds(JSContext* cx, mozRTCIceCandidateAtoms* atomsCache);
  };
  
  
  class mozRTCIceCandidate final : public nsSupportsWeakReference,
                                   public nsWrapperCache
  {
  public:
    NS_DECL_CYCLE_COLLECTING_ISUPPORTS
    NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(mozRTCIceCandidate)
  
  private:
    nsRefPtr<mozRTCIceCandidateJSImpl> mImpl;
    nsCOMPtr<nsISupports> mParent;
  
  public:
    mozRTCIceCandidate(JS::Handle<JSObject*> aJSImplObject, nsIGlobalObject* aParent);
  
  private:
    ~mozRTCIceCandidate();
  
  public:
    nsISupports* GetParentObject() const;
  
    virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
  
    static already_AddRefed<mozRTCIceCandidate> Constructor(const GlobalObject& global, JSContext* cx, const RTCIceCandidateInit& candidateInitDict, ErrorResult& aRv);
  
    void GetCandidate(nsString& aRetVal, ErrorResult& aRv, JSCompartment* aCompartment = nullptr) const;
  
    void SetCandidate(const nsAString& arg, ErrorResult& aRv, JSCompartment* aCompartment = nullptr);
  
    void GetSdpMid(nsString& aRetVal, ErrorResult& aRv, JSCompartment* aCompartment = nullptr) const;
  
    void SetSdpMid(const nsAString& arg, ErrorResult& aRv, JSCompartment* aCompartment = nullptr);
  
    Nullable<uint16_t> GetSdpMLineIndex(ErrorResult& aRv, JSCompartment* aCompartment = nullptr) const;
  
    void SetSdpMLineIndex(const Nullable<uint16_t>& arg, ErrorResult& aRv, JSCompartment* aCompartment = nullptr);
  
    static bool
    _Create(JSContext* cx, unsigned argc, JS::Value* vp);
  };
  
  
  } // namespace dom
  } // namespace mozilla
  
  #endif // mozilla_dom_RTCIceCandidateBinding_h
  