зеркало из https://github.com/mozilla/gecko-dev.git
Bug 975277 - Clean up the XPCWN XrayHolder a bit. r=gabor
This commit is contained in:
Родитель
94eedd0b5a
Коммит
3fb149d9d7
|
@ -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);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче