зеркало из https://github.com/mozilla/gecko-dev.git
bug 580128 - Allow NewResolve to set properties on wrappers. r=gal
This commit is contained in:
Родитель
f8bd40201e
Коммит
dc1082fc97
|
@ -177,6 +177,10 @@ holder_set(JSContext *cx, JSObject *wrapper, jsid id, jsval *vp)
|
||||||
{
|
{
|
||||||
NS_ASSERTION(wrapper->isProxy(), "bad this object in set");
|
NS_ASSERTION(wrapper->isProxy(), "bad this object in set");
|
||||||
JSObject *holder = GetHolder(wrapper);
|
JSObject *holder = GetHolder(wrapper);
|
||||||
|
if (IsResolving(holder, id)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
JSObject *wnObject = GetWrappedNativeObjectFromHolder(cx, holder);
|
JSObject *wnObject = GetWrappedNativeObjectFromHolder(cx, holder);
|
||||||
|
|
||||||
XPCWrappedNative *wn = GetWrappedNative(wnObject);
|
XPCWrappedNative *wn = GetWrappedNative(wnObject);
|
||||||
|
@ -427,14 +431,14 @@ bool
|
||||||
XrayWrapper<Base, Policy>::getPropertyDescriptor(JSContext *cx, JSObject *wrapper, jsid id,
|
XrayWrapper<Base, Policy>::getPropertyDescriptor(JSContext *cx, JSObject *wrapper, jsid id,
|
||||||
bool set, PropertyDescriptor *desc_in)
|
bool set, PropertyDescriptor *desc_in)
|
||||||
{
|
{
|
||||||
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);
|
JSPropertyDescriptor *desc = Jsvalify(desc_in);
|
||||||
|
|
||||||
if (id == nsXPConnect::GetRuntimeInstance()->GetStringID(XPCJSRuntime::IDX_WRAPPED_JSOBJECT)) {
|
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);
|
||||||
|
|
||||||
desc->obj = wrapper;
|
desc->obj = wrapper;
|
||||||
desc->attrs = JSPROP_ENUMERATE|JSPROP_SHARED;
|
desc->attrs = JSPROP_ENUMERATE|JSPROP_SHARED;
|
||||||
desc->getter = wrappedJSObject_getter;
|
desc->getter = wrappedJSObject_getter;
|
||||||
|
@ -450,6 +454,11 @@ XrayWrapper<Base, Policy>::getPropertyDescriptor(JSContext *cx, JSObject *wrappe
|
||||||
return true;
|
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);
|
ResolvingId resolving(holder, id);
|
||||||
|
|
||||||
void *priv;
|
void *priv;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче