mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Get the right property attributes and actually look up the prototype chain. bug 390948, r+sr+a=jst
This commit is contained in:
parent
b799480fda
commit
86520181f1
@ -136,7 +136,7 @@ JSObject *
|
||||
GetWrapper(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
while (JS_GET_CLASS(cx, obj) != &sXPC_XOW_JSClass.base) {
|
||||
obj = JS_GetParent(cx, obj);
|
||||
obj = JS_GetPrototype(cx, obj);
|
||||
if (!obj) {
|
||||
break;
|
||||
}
|
||||
@ -579,6 +579,11 @@ XPC_XOW_GetOrSetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp,
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
obj = GetWrapper(cx, obj);
|
||||
if (!obj) {
|
||||
return ThrowException(NS_ERROR_ILLEGAL_VALUE, cx);
|
||||
}
|
||||
|
||||
XPCCallContext ccx(JS_CALLER, cx);
|
||||
if (!ccx.IsValid()) {
|
||||
return ThrowException(NS_ERROR_FAILURE, cx);
|
||||
|
@ -159,13 +159,12 @@ XPCWrapper::NewResolve(JSContext *cx, JSObject *wrapperObj,
|
||||
}
|
||||
|
||||
JSBool isXOW = (JS_GET_CLASS(cx, wrapperObj) == &sXPC_XOW_JSClass.base);
|
||||
if (preserveVal || isXOW) {
|
||||
JSScopeProperty *sprop = reinterpret_cast<JSScopeProperty *>(prop);
|
||||
if (SPROP_HAS_VALID_SLOT(sprop, OBJ_SCOPE(innerObjp))) {
|
||||
uintN attrs = sprop->attrs;
|
||||
if ((preserveVal || isXOW) &&
|
||||
SPROP_HAS_VALID_SLOT(sprop, OBJ_SCOPE(innerObjp))) {
|
||||
v = OBJ_GET_SLOT(cx, innerObjp, sprop->slot);
|
||||
}
|
||||
}
|
||||
|
||||
OBJ_DROP_PROPERTY(cx, innerObjp, prop);
|
||||
|
||||
// Hack alert: we only do this for same-origin calls on XOWs: we want
|
||||
@ -189,7 +188,7 @@ XPCWrapper::NewResolve(JSContext *cx, JSObject *wrapperObj,
|
||||
}
|
||||
|
||||
JSBool ok = OBJ_DEFINE_PROPERTY(cx, wrapperObj, interned_id, v, nsnull,
|
||||
nsnull, JSPROP_ENUMERATE, nsnull);
|
||||
nsnull, (attrs & JSPROP_ENUMERATE), nsnull);
|
||||
|
||||
if (ok && (ok = ::JS_SetReservedSlot(cx, wrapperObj, sResolvingSlot,
|
||||
oldSlotVal))) {
|
||||
|
Loading…
Reference in New Issue
Block a user