mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1060042 - CPOWs need a hasInstance hook (r=mrbkap)
This commit is contained in:
parent
3ed36bfc9e
commit
169442bc76
@ -87,6 +87,9 @@ class JavaScriptBase : public WrapperOwner, public WrapperAnswer, public Base
|
||||
nsTArray<JSParam> *outparams) {
|
||||
return Answer::AnswerCallOrConstruct(objId, argv, construct, rs, result, outparams);
|
||||
}
|
||||
bool AnswerHasInstance(const ObjectId &objId, const JSVariant &v, ReturnStatus *rs, bool *bp) {
|
||||
return Answer::AnswerHasInstance(objId, v, rs, bp);
|
||||
}
|
||||
bool AnswerObjectClassIs(const ObjectId &objId, const uint32_t &classValue,
|
||||
bool *result) {
|
||||
return Answer::AnswerObjectClassIs(objId, classValue, result);
|
||||
@ -169,6 +172,9 @@ class JavaScriptBase : public WrapperOwner, public WrapperAnswer, public Base
|
||||
nsTArray<JSParam> *outparams) {
|
||||
return Base::CallCallOrConstruct(objId, argv, construct, rs, result, outparams);
|
||||
}
|
||||
bool CallHasInstance(const ObjectId &objId, const JSVariant &v, ReturnStatus *rs, bool *bp) {
|
||||
return Base::CallHasInstance(objId, v, rs, bp);
|
||||
}
|
||||
bool CallObjectClassIs(const ObjectId &objId, const uint32_t &classValue,
|
||||
bool *result) {
|
||||
return Base::CallObjectClassIs(objId, classValue, result);
|
||||
|
@ -37,6 +37,7 @@ both:
|
||||
|
||||
rpc IsExtensible(uint64_t objId) returns (ReturnStatus rs, bool result);
|
||||
rpc CallOrConstruct(uint64_t objId, JSParam[] argv, bool construct) returns (ReturnStatus rs, JSVariant result, JSParam[] outparams);
|
||||
rpc HasInstance(uint64_t objId, JSVariant v) returns (ReturnStatus rs, bool has);
|
||||
rpc ObjectClassIs(uint64_t objId, uint32_t classValue) returns (bool result);
|
||||
rpc ClassName(uint64_t objId) returns (nsString name);
|
||||
|
||||
|
@ -486,6 +486,30 @@ WrapperAnswer::AnswerCallOrConstruct(const ObjectId &objId,
|
||||
return ok(rs);
|
||||
}
|
||||
|
||||
bool
|
||||
WrapperAnswer::AnswerHasInstance(const ObjectId &objId, const JSVariant &vVar, ReturnStatus *rs, bool *bp)
|
||||
{
|
||||
AutoSafeJSContext cx;
|
||||
JSAutoRequest request(cx);
|
||||
|
||||
RootedObject obj(cx, findObjectById(cx, objId));
|
||||
if (!obj)
|
||||
return fail(cx, rs);
|
||||
|
||||
JSAutoCompartment comp(cx, obj);
|
||||
|
||||
LOG("%s.hasInstance(%s)", ReceiverObj(objId), InVariant(vVar));
|
||||
|
||||
RootedValue val(cx);
|
||||
if (!fromVariant(cx, vVar, &val))
|
||||
return fail(cx, rs);
|
||||
|
||||
if (!JS_HasInstance(cx, obj, val, bp))
|
||||
return fail(cx, rs);
|
||||
|
||||
return ok(rs);
|
||||
}
|
||||
|
||||
bool
|
||||
WrapperAnswer::AnswerObjectClassIs(const ObjectId &objId, const uint32_t &classValue,
|
||||
bool *result)
|
||||
|
@ -48,6 +48,7 @@ class WrapperAnswer : public virtual JavaScriptShared
|
||||
bool AnswerCallOrConstruct(const ObjectId &objId, const nsTArray<JSParam> &argv,
|
||||
const bool &construct, ReturnStatus *rs, JSVariant *result,
|
||||
nsTArray<JSParam> *outparams);
|
||||
bool AnswerHasInstance(const ObjectId &objId, const JSVariant &v, ReturnStatus *rs, bool *bp);
|
||||
bool AnswerObjectClassIs(const ObjectId &objId, const uint32_t &classValue,
|
||||
bool *result);
|
||||
bool AnswerClassName(const ObjectId &objId, nsString *result);
|
||||
|
@ -78,6 +78,8 @@ class CPOWProxyHandler : public BaseProxyHandler
|
||||
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
|
||||
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
||||
virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
||||
virtual bool hasInstance(JSContext *cx, HandleObject proxy,
|
||||
MutableHandleValue v, bool *bp) const MOZ_OVERRIDE;
|
||||
virtual bool objectClassIs(HandleObject obj, js::ESClassValue classValue,
|
||||
JSContext *cx) const MOZ_OVERRIDE;
|
||||
virtual const char* className(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
|
||||
@ -570,6 +572,30 @@ WrapperOwner::callOrConstruct(JSContext *cx, HandleObject proxy, const CallArgs
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
CPOWProxyHandler::hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v, bool *bp) const
|
||||
{
|
||||
FORWARD(hasInstance, (cx, proxy, v, bp));
|
||||
}
|
||||
|
||||
bool
|
||||
WrapperOwner::hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v, bool *bp)
|
||||
{
|
||||
ObjectId objId = idOf(proxy);
|
||||
|
||||
JSVariant vVar;
|
||||
if (!toVariant(cx, v, &vVar))
|
||||
return false;
|
||||
|
||||
ReturnStatus status;
|
||||
JSVariant result;
|
||||
if (!CallHasInstance(objId, vVar, &status, bp))
|
||||
return ipcfail(cx);
|
||||
|
||||
LOG_STACK();
|
||||
|
||||
return ok(cx, status);
|
||||
}
|
||||
|
||||
bool
|
||||
CPOWProxyHandler::objectClassIs(HandleObject proxy, js::ESClassValue classValue, JSContext *cx) const
|
||||
|
@ -57,6 +57,7 @@ class WrapperOwner : public virtual JavaScriptShared
|
||||
bool isExtensible(JSContext *cx, JS::HandleObject proxy, bool *extensible);
|
||||
bool callOrConstruct(JSContext *cx, JS::HandleObject proxy, const JS::CallArgs &args,
|
||||
bool construct);
|
||||
bool hasInstance(JSContext *cx, JS::HandleObject proxy, JS::MutableHandleValue v, bool *bp);
|
||||
bool objectClassIs(JSContext *cx, JS::HandleObject obj, js::ESClassValue classValue);
|
||||
const char* className(JSContext *cx, JS::HandleObject proxy);
|
||||
bool isCallable(JSObject *obj);
|
||||
@ -131,6 +132,8 @@ class WrapperOwner : public virtual JavaScriptShared
|
||||
virtual bool CallCallOrConstruct(const ObjectId &objId, const nsTArray<JSParam> &argv,
|
||||
const bool &construct, ReturnStatus *rs, JSVariant *result,
|
||||
nsTArray<JSParam> *outparams) = 0;
|
||||
virtual bool CallHasInstance(const ObjectId &objId, const JSVariant &v,
|
||||
ReturnStatus *rs, bool *bp) = 0;
|
||||
virtual bool CallObjectClassIs(const ObjectId &objId, const uint32_t &classValue,
|
||||
bool *result) = 0;
|
||||
virtual bool CallClassName(const ObjectId &objId, nsString *result) = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user