diff options
Diffstat (limited to 'js/xpconnect/idl/nsIXPCScriptable.idl')
-rw-r--r-- | js/xpconnect/idl/nsIXPCScriptable.idl | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/js/xpconnect/idl/nsIXPCScriptable.idl b/js/xpconnect/idl/nsIXPCScriptable.idl new file mode 100644 index 000000000..b7ba02b8a --- /dev/null +++ b/js/xpconnect/idl/nsIXPCScriptable.idl @@ -0,0 +1,157 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "nsISupports.idl" +#include "nsIClassInfo.idl" + +%{C++ +#ifdef XP_WIN +#undef GetClassName +#endif + +#include "js/TypeDecls.h" + +struct JSFreeOp; +namespace js { +struct Class; +} +%} + +interface nsIXPConnectWrappedNative; + +[ptr] native JSContextPtr(JSContext); +[ptr] native JSObjectPtr(JSObject); +[ptr] native JSValPtr(JS::Value); +[ptr] native JSFreeOpPtr(JSFreeOp); +[ref] native JSCallArgsRef(const JS::CallArgs); +[ref] native JSAutoIdVector(JS::AutoIdVector); +[ptr] native jsClassPtr(const js::Class); + +/** + * Note: This is not really an XPCOM interface. For example, callers must + * guarantee that they set the *_retval of the various methods that return a + * boolean to PR_TRUE before making the call. Implementations may skip writing + * to *_retval unless they want to return PR_FALSE. + */ +[uuid(19b70b26-7c3f-437f-a04a-2a8f9e28b617)] +interface nsIXPCScriptable : nsISupports +{ + /* bitflags used for 'flags' (only 32 bits available!) */ + + const uint32_t WANT_PRECREATE = 1 << 0; + // unused bit here + // unused bit here + const uint32_t WANT_ADDPROPERTY = 1 << 3; + // unused bit here + const uint32_t WANT_GETPROPERTY = 1 << 5; + const uint32_t WANT_SETPROPERTY = 1 << 6; + const uint32_t WANT_ENUMERATE = 1 << 7; + const uint32_t WANT_NEWENUMERATE = 1 << 8; + const uint32_t WANT_RESOLVE = 1 << 9; + // unused bit here + const uint32_t WANT_FINALIZE = 1 << 11; + // unused bit here! + const uint32_t WANT_CALL = 1 << 13; + const uint32_t WANT_CONSTRUCT = 1 << 14; + const uint32_t WANT_HASINSTANCE = 1 << 15; + // Unused bit here! + const uint32_t USE_JSSTUB_FOR_ADDPROPERTY = 1 << 17; + const uint32_t USE_JSSTUB_FOR_DELPROPERTY = 1 << 18; + const uint32_t USE_JSSTUB_FOR_SETPROPERTY = 1 << 19; + // Unused bit here! + const uint32_t DONT_ENUM_QUERY_INTERFACE = 1 << 21; + const uint32_t DONT_ASK_INSTANCE_FOR_SCRIPTABLE = 1 << 22; + const uint32_t CLASSINFO_INTERFACES_ONLY = 1 << 23; + const uint32_t ALLOW_PROP_MODS_DURING_RESOLVE = 1 << 24; + const uint32_t ALLOW_PROP_MODS_TO_PROTOTYPE = 1 << 25; + const uint32_t IS_GLOBAL_OBJECT = 1 << 26; + const uint32_t DONT_REFLECT_INTERFACE_NAMES = 1 << 27; + + // The high order bit is RESERVED for consumers of these flags. + // No implementor of this interface should ever return flags + // with this bit set. + const uint32_t RESERVED = 1 << 31; + + readonly attribute string className; + [notxpcom,nostdcall] uint32_t getScriptableFlags(); + [notxpcom,nostdcall] jsClassPtr getClass(); + + void preCreate(in nsISupports nativeObj, in JSContextPtr cx, + in JSObjectPtr globalObj, out JSObjectPtr parentObj); + + boolean addProperty(in nsIXPConnectWrappedNative wrapper, + in JSContextPtr cx, in JSObjectPtr obj, in jsid id, + in jsval val); + + boolean getProperty(in nsIXPConnectWrappedNative wrapper, + in JSContextPtr cx, in JSObjectPtr obj, in jsid id, + in JSValPtr vp); + + boolean setProperty(in nsIXPConnectWrappedNative wrapper, + in JSContextPtr cx, in JSObjectPtr obj, in jsid id, + in JSValPtr vp); + + boolean enumerate(in nsIXPConnectWrappedNative wrapper, + in JSContextPtr cx, in JSObjectPtr obj); + + boolean newEnumerate(in nsIXPConnectWrappedNative wrapper, + in JSContextPtr cx, in JSObjectPtr obj, + in JSAutoIdVector properties); + + boolean resolve(in nsIXPConnectWrappedNative wrapper, + in JSContextPtr cx, in JSObjectPtr obj, in jsid id, + out boolean resolvedp); + + void finalize(in nsIXPConnectWrappedNative wrapper, + in JSFreeOpPtr fop, in JSObjectPtr obj); + + boolean call(in nsIXPConnectWrappedNative wrapper, + in JSContextPtr cx, in JSObjectPtr obj, + in JSCallArgsRef args); + + boolean construct(in nsIXPConnectWrappedNative wrapper, + in JSContextPtr cx, in JSObjectPtr obj, + in JSCallArgsRef args); + + boolean hasInstance(in nsIXPConnectWrappedNative wrapper, + in JSContextPtr cx, in JSObjectPtr obj, + in jsval val, out boolean bp); + + void postCreatePrototype(in JSContextPtr cx, in JSObjectPtr proto); +}; + +%{ C++ + +#include "nsAutoPtr.h" + +#define NS_XPCCLASSINFO_IID \ +{ 0x43b67f01, 0xd4ce, 0x4b82, \ + { 0xb3, 0xf8, 0xeb, 0xf2, 0x13, 0x60, 0xfb, 0x7e } } + +class NS_NO_VTABLE nsXPCClassInfo : public nsIClassInfo, + public nsIXPCScriptable +{ +public: + NS_DECLARE_STATIC_IID_ACCESSOR(NS_XPCCLASSINFO_IID) + + NS_IMETHOD_(MozExternalRefCountType) AddRef() override = 0; + NS_IMETHOD_(MozExternalRefCountType) Release() override = 0; + + virtual void PreserveWrapper(nsISupports *aNative) = 0; +}; + +NS_DEFINE_STATIC_IID_ACCESSOR(nsXPCClassInfo, NS_XPCCLASSINFO_IID) + +inline +nsresult +CallQueryInterface(nsISupports* aSourcePtr, + RefPtrGetterAddRefs<nsXPCClassInfo> aDestPtr) +{ + return CallQueryInterface(aSourcePtr, + static_cast<nsXPCClassInfo**>(aDestPtr)); +} + +%} |