bug 580128 - Allow NewResolve to set properties on wrappers. r=gal

This commit is contained in:
Peter Van der Beken 2010-10-10 15:39:23 -07:00
Родитель f8bd40201e
Коммит dc1082fc97
1 изменённых файлов: 14 добавлений и 5 удалений

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

@ -177,6 +177,10 @@ holder_set(JSContext *cx, JSObject *wrapper, jsid id, jsval *vp)
{
NS_ASSERTION(wrapper->isProxy(), "bad this object in set");
JSObject *holder = GetHolder(wrapper);
if (IsResolving(holder, id)) {
return true;
}
JSObject *wnObject = GetWrappedNativeObjectFromHolder(cx, holder);
XPCWrappedNative *wn = GetWrappedNative(wnObject);
@ -427,14 +431,14 @@ bool
XrayWrapper<Base, Policy>::getPropertyDescriptor(JSContext *cx, JSObject *wrapper, jsid id,
bool set, PropertyDescriptor *desc_in)
{
JSPropertyDescriptor *desc = Jsvalify(desc_in);
if (id == nsXPConnect::GetRuntimeInstance()->GetStringID(XPCJSRuntime::IDX_WRAPPED_JSOBJECT)) {
if (!this->enter(cx, wrapper, id, set ? JSWrapper::SET : JSWrapper::GET))
return false;
AutoLeaveHelper<Base, Policy> helper(*this, cx, wrapper);
JSPropertyDescriptor *desc = Jsvalify(desc_in);
if (id == nsXPConnect::GetRuntimeInstance()->GetStringID(XPCJSRuntime::IDX_WRAPPED_JSOBJECT)) {
desc->obj = wrapper;
desc->attrs = JSPROP_ENUMERATE|JSPROP_SHARED;
desc->getter = wrappedJSObject_getter;
@ -450,6 +454,11 @@ XrayWrapper<Base, Policy>::getPropertyDescriptor(JSContext *cx, JSObject *wrappe
return true;
}
if (!this->enter(cx, wrapper, id, set ? JSWrapper::SET : JSWrapper::GET))
return false;
AutoLeaveHelper<Base, Policy> helper(*this, cx, wrapper);
ResolvingId resolving(holder, id);
void *priv;