summaryrefslogtreecommitdiffstats
path: root/js/xpconnect/idl/nsIXPCScriptable.idl
diff options
context:
space:
mode:
Diffstat (limited to 'js/xpconnect/idl/nsIXPCScriptable.idl')
-rw-r--r--js/xpconnect/idl/nsIXPCScriptable.idl121
1 files changed, 121 insertions, 0 deletions
diff --git a/js/xpconnect/idl/nsIXPCScriptable.idl b/js/xpconnect/idl/nsIXPCScriptable.idl
new file mode 100644
index 0000000000..aa8df7bb66
--- /dev/null
+++ b/js/xpconnect/idl/nsIXPCScriptable.idl
@@ -0,0 +1,121 @@
+/* -*- 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"
+
+namespace JS {
+class CallArgs;
+}
+
+%}
+
+interface nsIXPConnectWrappedNative;
+
+[ptr] native JSContextPtr(JSContext);
+[ptr] native JSObjectPtr(JSObject);
+[ptr] native JSValPtr(JS::Value);
+[ptr] native JSGCContextPtr(JS::GCContext);
+[ref] native JSCallArgsRef(const JS::CallArgs);
+[ptr] native JSClassPtr(const JSClass);
+ native JSMutableHandleIdVector(JS::MutableHandleVector<JS::PropertyKey>);
+
+%{ C++
+ // nsIXPCScriptable flags (only 32 bits available!). They are defined via
+ // #defines so they can be used in #ifndef guards in xpc_map_end.h.
+
+ #define XPC_SCRIPTABLE_WANT_PRECREATE (1 << 0)
+ // (1 << 1) is unused
+ // (1 << 2) is unused
+ // (1 << 3) is unused
+ #define XPC_SCRIPTABLE_WANT_NEWENUMERATE (1 << 4)
+ #define XPC_SCRIPTABLE_WANT_RESOLVE (1 << 5)
+ #define XPC_SCRIPTABLE_WANT_FINALIZE (1 << 6)
+ #define XPC_SCRIPTABLE_WANT_CALL (1 << 7)
+ #define XPC_SCRIPTABLE_WANT_CONSTRUCT (1 << 8)
+ #define XPC_SCRIPTABLE_WANT_HASINSTANCE (1 << 9)
+ #define XPC_SCRIPTABLE_USE_JSSTUB_FOR_ADDPROPERTY (1 << 10)
+ #define XPC_SCRIPTABLE_USE_JSSTUB_FOR_DELPROPERTY (1 << 11)
+ // (1 << 12) is unused
+ #define XPC_SCRIPTABLE_DONT_ENUM_QUERY_INTERFACE (1 << 13)
+ // (1 << 14) is unused
+ // (1 << 15) is unused
+ #define XPC_SCRIPTABLE_ALLOW_PROP_MODS_DURING_RESOLVE (1 << 16)
+ // (1 << 17) is unused
+ #define XPC_SCRIPTABLE_IS_GLOBAL_OBJECT (1 << 18)
+ #define XPC_SCRIPTABLE_DONT_REFLECT_INTERFACE_NAMES (1 << 19)
+%}
+
+/**
+ * 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
+{
+ readonly attribute AUTF8String className;
+ [notxpcom,nostdcall] uint32_t getScriptableFlags();
+ [notxpcom,nostdcall] JSClassPtr getJSClass();
+
+ void preCreate(in nsISupports nativeObj, in JSContextPtr cx,
+ in JSObjectPtr globalObj, out JSObjectPtr parentObj);
+
+ boolean newEnumerate(in nsIXPConnectWrappedNative wrapper,
+ in JSContextPtr cx, in JSObjectPtr obj,
+ in JSMutableHandleIdVector properties,
+ in boolean enumerableOnly);
+
+ boolean resolve(in nsIXPConnectWrappedNative wrapper,
+ in JSContextPtr cx, in JSObjectPtr obj, in jsid id,
+ out boolean resolvedp);
+
+ void finalize(in nsIXPConnectWrappedNative wrapper,
+ in JSGCContextPtr gcx, 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);
+
+%{ C++
+ #define GET_IT(f_, c_) \
+ bool f_() { \
+ return 0 != (GetScriptableFlags() & XPC_SCRIPTABLE_##c_); \
+ }
+
+ GET_IT(WantPreCreate, WANT_PRECREATE)
+ GET_IT(WantNewEnumerate, WANT_NEWENUMERATE)
+ GET_IT(WantResolve, WANT_RESOLVE)
+ GET_IT(WantFinalize, WANT_FINALIZE)
+ GET_IT(WantCall, WANT_CALL)
+ GET_IT(WantConstruct, WANT_CONSTRUCT)
+ GET_IT(WantHasInstance, WANT_HASINSTANCE)
+ GET_IT(UseJSStubForAddProperty, USE_JSSTUB_FOR_ADDPROPERTY)
+ GET_IT(UseJSStubForDelProperty, USE_JSSTUB_FOR_DELPROPERTY)
+ GET_IT(DontEnumQueryInterface, DONT_ENUM_QUERY_INTERFACE)
+ GET_IT(AllowPropModsDuringResolve, ALLOW_PROP_MODS_DURING_RESOLVE)
+ GET_IT(IsGlobalObject, IS_GLOBAL_OBJECT)
+ GET_IT(DontReflectInterfaceNames, DONT_REFLECT_INTERFACE_NAMES)
+
+ #undef GET_IT
+%}
+};