Bug 975277 - Clean up the XPCWN XrayHolder a bit. r=gabor

This commit is contained in:
Bobby Holley 2014-02-21 15:55:31 -08:00
Родитель 94eedd0b5a
Коммит 3fb149d9d7
4 изменённых файлов: 22 добавлений и 15 удалений

Просмотреть файл

@ -205,7 +205,7 @@ AccessCheck::isCrossOriginAccessPermitted(JSContext *cx, JSObject *wrapperArg, j
const char *name;
const js::Class *clasp = js::GetObjectClass(obj);
MOZ_ASSERT(Jsvalify(clasp) != &XrayUtils::HolderClass, "shouldn't have a holder here");
MOZ_ASSERT(!XrayUtils::IsXPCWNHolderClass(Jsvalify(clasp)), "shouldn't have a holder here");
if (clasp->ext.innerObject)
name = "Window";
else

Просмотреть файл

@ -374,7 +374,7 @@ WrapperFactory::Rewrap(JSContext *cx, HandleObject existing, HandleObject obj,
GetProxyHandler(obj) == &XrayWaiver ||
js::GetObjectClass(obj)->ext.innerObject,
"wrapped object passed to rewrap");
MOZ_ASSERT(JS_GetClass(obj) != &XrayUtils::HolderClass, "trying to wrap a holder");
MOZ_ASSERT(!XrayUtils::IsXPCWNHolderClass(JS_GetClass(obj)), "trying to wrap a holder");
MOZ_ASSERT(!js::IsInnerObject(obj));
// We sometimes end up here after nsContentUtils has been shut down but before
// XPConnect has been shut down, so check the context stack the roundabout way.

Просмотреть файл

@ -37,18 +37,6 @@ using js::CheckedUnwrap;
namespace xpc {
static const uint32_t JSSLOT_RESOLVING = 0;
namespace XrayUtils {
const JSClass HolderClass = {
"NativePropertyHolder",
JSCLASS_HAS_RESERVED_SLOTS(2),
JS_PropertyStub, JS_DeletePropertyStub, holder_get, holder_set,
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub
};
}
using namespace XrayUtils;
XrayType
@ -65,6 +53,7 @@ GetXrayType(JSObject *obj)
return NotXray;
}
const uint32_t JSSLOT_RESOLVING = 0;
ResolvingId::ResolvingId(JSContext *cx, HandleObject wrapper, HandleId id)
: mId(id),
mHolder(cx, getHolderObject(wrapper)),
@ -231,9 +220,16 @@ public:
virtual JSObject* createHolder(JSContext *cx, JSObject *wrapper);
static const JSClass HolderClass;
static XPCWrappedNativeXrayTraits singleton;
};
const JSClass XPCWrappedNativeXrayTraits::HolderClass = {
"NativePropertyHolder", JSCLASS_HAS_RESERVED_SLOTS(2),
JS_PropertyStub, JS_DeletePropertyStub, holder_get, holder_set,
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub
};
class DOMXrayTraits : public XrayTraits
{
public:
@ -535,6 +531,17 @@ XPCWrappedNativeXrayTraits::isResolving(JSContext *cx, JSObject *holder,
return cur->isResolving(id);
}
namespace XrayUtils {
bool
IsXPCWNHolderClass(const JSClass *clasp)
{
return clasp == &XPCWrappedNativeXrayTraits::HolderClass;
}
}
// Some DOM objects have shared properties that don't have an explicit
// getter/setter and rely on the class getter/setter. We install a
// class getter/setter on the holder object to trigger them.

Просмотреть файл

@ -28,7 +28,7 @@ holder_set(JSContext *cx, JS::HandleObject holder, JS::HandleId id, bool strict,
namespace XrayUtils {
extern const JSClass HolderClass;
bool IsXPCWNHolderClass(const JSClass *clasp);
bool CloneExpandoChain(JSContext *cx, JSObject *src, JSObject *dst);