Bug 856840 - Kill FindWrapper. r=mrbkap

This commit is contained in:
Bobby Holley 2013-04-08 12:51:24 -07:00
parent 8294b8bf07
commit 7235a8baf4

View File

@ -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;