mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 987111 - Implement delete_ for Object Xrays. r=gabor
This commit is contained in:
parent
3ac6c898b0
commit
234abbdd81
@ -160,6 +160,11 @@ public:
|
||||
HandleObject wrapper, HandleObject holder,
|
||||
HandleId id, MutableHandle<JSPropertyDescriptor> desc);
|
||||
|
||||
bool delete_(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) {
|
||||
*bp = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual void preserveWrapper(JSObject *target) = 0;
|
||||
|
||||
static bool set(JSContext *cx, HandleObject wrapper, HandleObject receiver, HandleId id,
|
||||
@ -306,6 +311,8 @@ public:
|
||||
HandleObject holder, HandleId id,
|
||||
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE;
|
||||
|
||||
bool delete_(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp);
|
||||
|
||||
bool defineProperty(JSContext *cx, HandleObject wrapper, HandleId id,
|
||||
MutableHandle<JSPropertyDescriptor> desc,
|
||||
Handle<JSPropertyDescriptor> existingDesc, bool *defined);
|
||||
@ -651,6 +658,28 @@ JSXrayTraits::resolveOwnProperty(JSContext *cx, Wrapper &jsWrapper,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
JSXrayTraits::delete_(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp)
|
||||
{
|
||||
RootedObject holder(cx, ensureHolder(cx, wrapper));
|
||||
|
||||
// If we're using Object Xrays, we allow callers to attempt to delete any
|
||||
// property from the underlying object that they are able to resolve. Note
|
||||
// that this deleting may fail if the property is non-configurable.
|
||||
bool isObjectInstance = getProtoKey(holder) == JSProto_Object && !isPrototype(holder);
|
||||
if (isObjectInstance) {
|
||||
RootedObject target(cx, getTargetObject(wrapper));
|
||||
JSAutoCompartment ac(cx, target);
|
||||
Rooted<JSPropertyDescriptor> desc(cx);
|
||||
if (!getOwnPropertyFromTargetIfSafe(cx, target, wrapper, id, &desc))
|
||||
return false;
|
||||
if (desc.object())
|
||||
return JS_DeletePropertyById2(cx, target, id, bp);
|
||||
}
|
||||
*bp = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
JSXrayTraits::defineProperty(JSContext *cx, HandleObject wrapper, HandleId id,
|
||||
MutableHandle<JSPropertyDescriptor> desc,
|
||||
@ -2337,8 +2366,8 @@ XrayWrapper<Base, Traits>::delete_(JSContext *cx, HandleObject wrapper,
|
||||
JSAutoCompartment ac(cx, expando);
|
||||
return JS_DeletePropertyById2(cx, expando, id, bp);
|
||||
}
|
||||
*bp = true;
|
||||
return true;
|
||||
|
||||
return Traits::singleton.delete_(cx, wrapper, id, bp);
|
||||
}
|
||||
|
||||
template <typename Base, typename Traits>
|
||||
|
Loading…
Reference in New Issue
Block a user