mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 09:15:35 +00:00
Bug 856840 - Kill FindWrapper. r=mrbkap
This commit is contained in:
parent
8294b8bf07
commit
7235a8baf4
@ -498,26 +498,6 @@ GetWrappedNative(JSObject *obj)
|
||||
return static_cast<XPCWrappedNative *>(js::GetObjectPrivate(obj));
|
||||
}
|
||||
|
||||
static inline JSObject *
|
||||
FindWrapper(JSContext *cx, JSObject *wrapper_)
|
||||
{
|
||||
RootedObject wrapper(cx, wrapper_);
|
||||
while (!js::IsWrapper(wrapper) ||
|
||||
!(Wrapper::wrapperHandler(wrapper)->flags() &
|
||||
WrapperFactory::IS_XRAY_WRAPPER_FLAG)) {
|
||||
if (js::IsWrapper(wrapper) &&
|
||||
js::GetProxyHandler(wrapper) == &sandboxProxyHandler) {
|
||||
wrapper = SandboxProxyHandler::wrappedObject(wrapper);
|
||||
} else {
|
||||
if (!js::GetObjectProto(cx, wrapper, wrapper.address()))
|
||||
return nullptr;
|
||||
}
|
||||
// NB: we must eventually hit our wrapper.
|
||||
}
|
||||
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
JSObject*
|
||||
XrayTraits::getHolder(JSObject *wrapper)
|
||||
{
|
||||
@ -552,12 +532,12 @@ XPCWrappedNativeXrayTraits::isResolving(JSContext *cx, JSObject *holder,
|
||||
// getter/setter and rely on the class getter/setter. We install a
|
||||
// class getter/setter on the holder object to trigger them.
|
||||
JSBool
|
||||
holder_get(JSContext *cx, HandleObject wrapperArg, HandleId id, MutableHandleValue vp)
|
||||
holder_get(JSContext *cx, HandleObject wrapper, HandleId id, MutableHandleValue vp)
|
||||
{
|
||||
RootedObject wrapper(cx, FindWrapper(cx, wrapperArg));
|
||||
if (!wrapper)
|
||||
return false;
|
||||
|
||||
// JSClass::getProperty is wacky enough that it's hard to be sure someone
|
||||
// can't inherit this getter by prototyping a random object to an
|
||||
// XrayWrapper. Be safe.
|
||||
NS_ENSURE_TRUE(WrapperFactory::IsXrayWrapper(wrapper), true);
|
||||
JSObject *holder = GetHolder(wrapper);
|
||||
|
||||
XPCWrappedNative *wn = XPCWrappedNativeXrayTraits::getWN(wrapper);
|
||||
@ -576,12 +556,12 @@ holder_get(JSContext *cx, HandleObject wrapperArg, HandleId id, MutableHandleVal
|
||||
}
|
||||
|
||||
JSBool
|
||||
holder_set(JSContext *cx, HandleObject wrapperArg, HandleId id, JSBool strict, MutableHandleValue vp)
|
||||
holder_set(JSContext *cx, HandleObject wrapper, HandleId id, JSBool strict, MutableHandleValue vp)
|
||||
{
|
||||
RootedObject wrapper(cx, FindWrapper(cx, wrapperArg));
|
||||
if (!wrapper)
|
||||
return false;
|
||||
|
||||
// JSClass::setProperty is wacky enough that it's hard to be sure someone
|
||||
// can't inherit this getter by prototyping a random object to an
|
||||
// XrayWrapper. Be safe.
|
||||
NS_ENSURE_TRUE(WrapperFactory::IsXrayWrapper(wrapper), true);
|
||||
JSObject *holder = GetHolder(wrapper);
|
||||
if (XPCWrappedNativeXrayTraits::isResolving(cx, holder, id)) {
|
||||
return true;
|
||||
|
Loading…
Reference in New Issue
Block a user