18 #ifndef INCLUDED_JSI_GUIPROXY 19 #define INCLUDED_JSI_GUIPROXY 35 # pragma GCC diagnostic push 36 # pragma GCC diagnostic ignored "-Wnon-virtual-dtor" 38 # pragma warning(push, 1) 39 # pragma warning(disable: 4265) 50 friend std::unique_ptr<IGUIProxyObject> std::make_unique<IGUIProxyObject>();
62 return static_cast<T*
>(FromPrivateSlot<IGUIObject>(obj));
68 return static_cast<T*
>(
static_cast<PrivateData>(js::GetProxyPrivate(obj).toPrivate()));
79 template<>
IGUIObject* IGUIProxyObject::FromPrivateSlot<IGUIObject>(JSObject*);
91 virtual bool has(
const std::string& name)
const = 0;
93 virtual JSObject*
get(
const std::string& name)
const = 0;
94 virtual bool setFunction(
const ScriptRequest& rq,
const std::string& name, JSFunction*
function) = 0;
119 template<
typename GUIObjectType>
152 template<auto callable>
156 bool PropGetter(JS::HandleObject proxy,
const std::string& propName, JS::MutableHandleValue vp)
const;
161 virtual bool get(JSContext* cx, JS::HandleObject proxy, JS::HandleValue receiver, JS::HandleId id, JS::MutableHandleValue vp)
const override final;
163 virtual bool set(JSContext* cx, JS::HandleObject proxy, JS::HandleId id, JS::HandleValue vp,
164 JS::HandleValue receiver, JS::ObjectOpResult& result)
const final;
166 virtual bool delete_(JSContext* cx, JS::HandleObject proxy, JS::HandleId
id, JS::ObjectOpResult& result)
const override final;
173 JS::MutableHandle<mozilla::Maybe<JS::PropertyDescriptor>>
UNUSED(desc))
const override 179 JS::Handle<JS::PropertyDescriptor>
UNUSED(desc), JS::ObjectOpResult&
UNUSED(result))
const override 216 # pragma GCC diagnostic pop 218 # pragma warning(pop) 222 #endif // INCLUDED_JSI_GUIPROXY PrivateData m_Ptr
Definition: JSInterface_GUIProxy.h:76
#define UNUSED(param)
mark a function parameter as unused and avoid the corresponding compiler warning. ...
Definition: code_annotation.h:38
Definition: JSInterface_GUIProxy_impl.h:99
static std::unique_ptr< IGUIProxyObject > CreateJSObject(const ScriptRequest &rq, GUIObjectType *ptr, GUIProxyProps *data)
Definition: JSInterface_GUIProxy_impl.h:149
IGUIProxyObject()=default
virtual bool preventExtensions(JSContext *cx, JS::HandleObject proxy, JS::ObjectOpResult &result) const override
Definition: JSInterface_GUIProxy.h:204
JS GUI proxies need to store some private data.
Definition: JSInterface_GUIProxy.h:46
GUI object such as a button or an input-box.
Definition: IGUIObject.h:59
static T * FromPrivateSlot(JSObject *obj)
Definition: JSInterface_GUIProxy.h:60
static std::pair< const js::BaseProxyHandler *, GUIProxyProps * > CreateData(ScriptInterface &scriptInterface)
Definition: JSInterface_GUIProxy_impl.h:126
Proxies need to store some data whose lifetime is tied to an interface.
Definition: JSInterface_GUIProxy.h:85
~JSI_GUIProxy()
Definition: JSInterface_GUIProxy.h:140
JSI_GUIProxy()
Definition: JSInterface_GUIProxy.h:136
virtual bool defineProperty(JSContext *cx, JS::HandleObject proxy, JS::HandleId id, JS::Handle< JS::PropertyDescriptor > desc, JS::ObjectOpResult &result) const override
Definition: JSInterface_GUIProxy.h:178
virtual bool setImmutablePrototype(JSContext *cx, JS::HandleObject proxy, bool *succeeded) const override
Definition: JSInterface_GUIProxy.h:199
virtual bool getOwnPropertyDescriptor(JSContext *cx, JS::HandleObject proxy, JS::HandleId id, JS::MutableHandle< mozilla::Maybe< JS::PropertyDescriptor >> desc) const override
Definition: JSInterface_GUIProxy.h:172
#define T(string_literal)
Definition: secure_crt.cpp:77
virtual bool isExtensible(JSContext *cx, JS::HandleObject proxy, bool *extensible) const override
Definition: JSInterface_GUIProxy.h:208
JS::PersistentRootedObject m_Object
Definition: JSInterface_GUIProxy.h:75
Handles the js interface with C++ GUI objects.
Definition: IGUIObject.h:48
static T * UnsafeFromPrivateSlot(JSObject *obj)
Definition: JSInterface_GUIProxy.h:66
JSObject * Get() const
Definition: JSInterface_GUIProxy.h:52
virtual bool enumerate(JSContext *cx, JS::HandleObject proxy, JS::MutableHandleIdVector props) const override
Definition: JSInterface_GUIProxy.h:189
virtual bool ownPropertyKeys(JSContext *cx, JS::HandleObject proxy, JS::MutableHandleIdVector props) const override
Definition: JSInterface_GUIProxy.h:184
Abstraction around a SpiderMonkey JS::Realm.
Definition: ScriptInterface.h:71
virtual ~GUIProxyProps()
Definition: JSInterface_GUIProxy.h:88
static JSI_GUIProxy & Singleton()
Definition: JSInterface_GUIProxy_impl.h:34
Spidermonkey maintains some 'local' state via the JSContext* object.
Definition: ScriptRequest.h:59
virtual bool getPrototypeIfOrdinary(JSContext *cx, JS::HandleObject proxy, bool *isOrdinary, JS::MutableHandleObject protop) const override
Definition: JSInterface_GUIProxy.h:194