Source code
Revision control
Copy as Markdown
Other Tools
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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
#ifndef xpc_make_class_h
#define xpc_make_class_h
// This file should be used to create JSClass instances for nsIXPCScriptable
// instances. This includes any file that uses xpc_map_end.h.
#include "xpcpublic.h"
#include "mozilla/dom/DOMJSClass.h"
bool XPC_WN_MaybeResolvingPropertyStub(JSContext* cx, JS::HandleObject obj,
JS::HandleId id, JS::HandleValue v);
bool XPC_WN_CannotModifyPropertyStub(JSContext* cx, JS::HandleObject obj,
JS::HandleId id, JS::HandleValue v);
bool XPC_WN_MaybeResolvingDeletePropertyStub(JSContext* cx,
JS::HandleObject obj,
JS::HandleId id,
JS::ObjectOpResult& result);
bool XPC_WN_CannotDeletePropertyStub(JSContext* cx, JS::HandleObject obj,
JS::HandleId id,
JS::ObjectOpResult& result);
bool XPC_WN_Shared_Enumerate(JSContext* cx, JS::HandleObject obj);
bool XPC_WN_NewEnumerate(JSContext* cx, JS::HandleObject obj,
JS::MutableHandleIdVector properties,
bool enumerableOnly);
bool XPC_WN_Helper_Resolve(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
bool* resolvedp);
void XPC_WN_Helper_Finalize(JS::GCContext* gcx, JSObject* obj);
void XPC_WN_NoHelper_Finalize(JS::GCContext* gcx, JSObject* obj);
bool XPC_WN_Helper_Call(JSContext* cx, unsigned argc, JS::Value* vp);
bool XPC_WN_Helper_Construct(JSContext* cx, unsigned argc, JS::Value* vp);
void XPCWrappedNative_Trace(JSTracer* trc, JSObject* obj);
extern const js::ClassExtension XPC_WN_JSClassExtension;
#define XPC_MAKE_CLASS_OPS(_flags) \
{ \
/* addProperty */ \
((_flags) & XPC_SCRIPTABLE_USE_JSSTUB_FOR_ADDPROPERTY) ? nullptr \
: ((_flags) & XPC_SCRIPTABLE_ALLOW_PROP_MODS_DURING_RESOLVE) \
? XPC_WN_MaybeResolvingPropertyStub \
: XPC_WN_CannotModifyPropertyStub, \
\
/* delProperty */ \
((_flags) & XPC_SCRIPTABLE_USE_JSSTUB_FOR_DELPROPERTY) ? nullptr \
: ((_flags) & XPC_SCRIPTABLE_ALLOW_PROP_MODS_DURING_RESOLVE) \
? XPC_WN_MaybeResolvingDeletePropertyStub \
: XPC_WN_CannotDeletePropertyStub, \
\
/* enumerate */ \
((_flags) & XPC_SCRIPTABLE_WANT_NEWENUMERATE) \
? nullptr /* We will use newEnumerate set below in this case */ \
: XPC_WN_Shared_Enumerate, \
\
/* newEnumerate */ \
((_flags) & XPC_SCRIPTABLE_WANT_NEWENUMERATE) ? XPC_WN_NewEnumerate \
: nullptr, \
\
/* resolve */ /* We have to figure out resolve strategy at call time \
*/ \
XPC_WN_Helper_Resolve, \
\
/* mayResolve */ \
nullptr, \
\
/* finalize */ \
((_flags) & XPC_SCRIPTABLE_WANT_FINALIZE) ? XPC_WN_Helper_Finalize \
: XPC_WN_NoHelper_Finalize, \
\
/* call */ \
((_flags) & XPC_SCRIPTABLE_WANT_CALL) ? XPC_WN_Helper_Call : nullptr, \
\
/* construct */ \
((_flags) & XPC_SCRIPTABLE_WANT_CONSTRUCT) ? XPC_WN_Helper_Construct \
: nullptr, \
\
/* trace */ \
((_flags) & XPC_SCRIPTABLE_IS_GLOBAL_OBJECT) ? JS_GlobalObjectTraceHook \
: XPCWrappedNative_Trace, \
}
#define XPC_MAKE_CLASS(_name, _flags, _classOps) \
{ \
/* name */ \
_name, \
\
/* flags */ \
JSCLASS_SLOT0_IS_NSISUPPORTS | JSCLASS_IS_WRAPPED_NATIVE | \
JSCLASS_FOREGROUND_FINALIZE | \
(((_flags) & XPC_SCRIPTABLE_IS_GLOBAL_OBJECT) \
? XPCONNECT_GLOBAL_FLAGS \
: JSCLASS_HAS_RESERVED_SLOTS(1)), \
\
/* cOps */ \
_classOps, \
\
/* spec */ \
nullptr, \
\
/* ext */ \
&XPC_WN_JSClassExtension, \
\
/* oOps */ \
nullptr, \
}
#endif