зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
This commit is contained in:
Родитель
90d0d29b1f
Коммит
eec11c26a0
|
@ -38,42 +38,42 @@ class JavaScriptBase : public WrapperOwner, public WrapperAnswer, public Base
|
|||
bool AnswerPreventExtensions(const uint64_t &objId, ReturnStatus *rs) {
|
||||
return Answer::AnswerPreventExtensions(ObjectId::deserialize(objId), rs);
|
||||
}
|
||||
bool AnswerGetPropertyDescriptor(const uint64_t &objId, const nsString &id,
|
||||
bool AnswerGetPropertyDescriptor(const uint64_t &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs,
|
||||
PPropertyDescriptor *out) {
|
||||
return Answer::AnswerGetPropertyDescriptor(ObjectId::deserialize(objId), id, rs, out);
|
||||
}
|
||||
bool AnswerGetOwnPropertyDescriptor(const uint64_t &objId,
|
||||
const nsString &id,
|
||||
const JSIDVariant &id,
|
||||
ReturnStatus *rs,
|
||||
PPropertyDescriptor *out) {
|
||||
return Answer::AnswerGetOwnPropertyDescriptor(ObjectId::deserialize(objId), id, rs, out);
|
||||
}
|
||||
bool AnswerDefineProperty(const uint64_t &objId, const nsString &id,
|
||||
bool AnswerDefineProperty(const uint64_t &objId, const JSIDVariant &id,
|
||||
const PPropertyDescriptor &flags,
|
||||
ReturnStatus *rs) {
|
||||
return Answer::AnswerDefineProperty(ObjectId::deserialize(objId), id, flags, rs);
|
||||
}
|
||||
bool AnswerDelete(const uint64_t &objId, const nsString &id,
|
||||
bool AnswerDelete(const uint64_t &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs, bool *success) {
|
||||
return Answer::AnswerDelete(ObjectId::deserialize(objId), id, rs, success);
|
||||
}
|
||||
|
||||
bool AnswerHas(const uint64_t &objId, const nsString &id,
|
||||
bool AnswerHas(const uint64_t &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs, bool *bp) {
|
||||
return Answer::AnswerHas(ObjectId::deserialize(objId), id, rs, bp);
|
||||
}
|
||||
bool AnswerHasOwn(const uint64_t &objId, const nsString &id,
|
||||
bool AnswerHasOwn(const uint64_t &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs, bool *bp) {
|
||||
return Answer::AnswerHasOwn(ObjectId::deserialize(objId), id, rs, bp);
|
||||
}
|
||||
bool AnswerGet(const uint64_t &objId, const ObjectVariant &receiverVar,
|
||||
const nsString &id,
|
||||
const JSIDVariant &id,
|
||||
ReturnStatus *rs, JSVariant *result) {
|
||||
return Answer::AnswerGet(ObjectId::deserialize(objId), receiverVar, id, rs, result);
|
||||
}
|
||||
bool AnswerSet(const uint64_t &objId, const ObjectVariant &receiverVar,
|
||||
const nsString &id, const bool &strict,
|
||||
const JSIDVariant &id, const bool &strict,
|
||||
const JSVariant &value, ReturnStatus *rs, JSVariant *result) {
|
||||
return Answer::AnswerSet(ObjectId::deserialize(objId), receiverVar, id, strict, value, rs, result);
|
||||
}
|
||||
|
@ -134,42 +134,42 @@ class JavaScriptBase : public WrapperOwner, public WrapperAnswer, public Base
|
|||
bool CallPreventExtensions(const ObjectId &objId, ReturnStatus *rs) {
|
||||
return Base::CallPreventExtensions(objId.serialize(), rs);
|
||||
}
|
||||
bool CallGetPropertyDescriptor(const ObjectId &objId, const nsString &id,
|
||||
bool CallGetPropertyDescriptor(const ObjectId &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs,
|
||||
PPropertyDescriptor *out) {
|
||||
return Base::CallGetPropertyDescriptor(objId.serialize(), id, rs, out);
|
||||
}
|
||||
bool CallGetOwnPropertyDescriptor(const ObjectId &objId,
|
||||
const nsString &id,
|
||||
const JSIDVariant &id,
|
||||
ReturnStatus *rs,
|
||||
PPropertyDescriptor *out) {
|
||||
return Base::CallGetOwnPropertyDescriptor(objId.serialize(), id, rs, out);
|
||||
}
|
||||
bool CallDefineProperty(const ObjectId &objId, const nsString &id,
|
||||
bool CallDefineProperty(const ObjectId &objId, const JSIDVariant &id,
|
||||
const PPropertyDescriptor &flags,
|
||||
ReturnStatus *rs) {
|
||||
return Base::CallDefineProperty(objId.serialize(), id, flags, rs);
|
||||
}
|
||||
bool CallDelete(const ObjectId &objId, const nsString &id,
|
||||
bool CallDelete(const ObjectId &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs, bool *success) {
|
||||
return Base::CallDelete(objId.serialize(), id, rs, success);
|
||||
}
|
||||
|
||||
bool CallHas(const ObjectId &objId, const nsString &id,
|
||||
bool CallHas(const ObjectId &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs, bool *bp) {
|
||||
return Base::CallHas(objId.serialize(), id, rs, bp);
|
||||
}
|
||||
bool CallHasOwn(const ObjectId &objId, const nsString &id,
|
||||
bool CallHasOwn(const ObjectId &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs, bool *bp) {
|
||||
return Base::CallHasOwn(objId.serialize(), id, rs, bp);
|
||||
}
|
||||
bool CallGet(const ObjectId &objId, const ObjectVariant &receiverVar,
|
||||
const nsString &id,
|
||||
const JSIDVariant &id,
|
||||
ReturnStatus *rs, JSVariant *result) {
|
||||
return Base::CallGet(objId.serialize(), receiverVar, id, rs, result);
|
||||
}
|
||||
bool CallSet(const ObjectId &objId, const ObjectVariant &receiverVar,
|
||||
const nsString &id, const bool &strict,
|
||||
const JSIDVariant &id, const bool &strict,
|
||||
const JSVariant &value, ReturnStatus *rs, JSVariant *result) {
|
||||
return Base::CallSet(objId.serialize(), receiverVar, id, strict, value, rs, result);
|
||||
}
|
||||
|
|
|
@ -49,6 +49,12 @@ struct OutVariant
|
|||
explicit OutVariant(const JSVariant &variant) : variant(variant) {}
|
||||
};
|
||||
|
||||
struct Identifier
|
||||
{
|
||||
JSIDVariant variant;
|
||||
explicit Identifier(const JSIDVariant &variant) : variant(variant) {}
|
||||
};
|
||||
|
||||
class Logging
|
||||
{
|
||||
public:
|
||||
|
@ -184,6 +190,25 @@ class Logging
|
|||
}
|
||||
}
|
||||
|
||||
void format(const Identifier &id, nsCString &out) {
|
||||
switch (id.variant.type()) {
|
||||
case JSIDVariant::TnsString: {
|
||||
nsAutoCString tmp;
|
||||
format(id.variant.get_nsString(), tmp);
|
||||
out = nsPrintfCString("\"%s\"", tmp.get());
|
||||
break;
|
||||
}
|
||||
case JSIDVariant::Tint32_t: {
|
||||
out = nsPrintfCString("%d", id.variant.get_int32_t());
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
out = "Unknown";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
JavaScriptShared *shared;
|
||||
JSContext *cx;
|
||||
|
|
|
@ -348,10 +348,45 @@ JavaScriptShared::fromVariant(JSContext *cx, const JSVariant &from, MutableHandl
|
|||
}
|
||||
|
||||
default:
|
||||
MOZ_CRASH("NYI");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
JavaScriptShared::toJSIDVariant(JSContext *cx, HandleId from, JSIDVariant *to)
|
||||
{
|
||||
if (JSID_IS_STRING(from)) {
|
||||
nsAutoJSString autoStr;
|
||||
if (!autoStr.init(cx, JSID_TO_STRING(from)))
|
||||
return false;
|
||||
*to = autoStr;
|
||||
return true;
|
||||
}
|
||||
if (JSID_IS_INT(from)) {
|
||||
*to = JSID_TO_INT(from);
|
||||
return true;
|
||||
}
|
||||
MOZ_CRASH("NYI");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
JavaScriptShared::fromJSIDVariant(JSContext *cx, const JSIDVariant &from, MutableHandleId to)
|
||||
{
|
||||
switch (from.type()) {
|
||||
case JSIDVariant::TnsString:
|
||||
return convertGeckoStringToId(cx, from.get_nsString(), to);
|
||||
|
||||
case JSIDVariant::Tint32_t:
|
||||
to.set(INT_TO_JSID(from.get_int32_t()));
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* static */ void
|
||||
JavaScriptShared::ConvertID(const nsID &from, JSIID *to)
|
||||
{
|
||||
|
|
|
@ -158,6 +158,9 @@ class JavaScriptShared
|
|||
bool toVariant(JSContext *cx, JS::HandleValue from, JSVariant *to);
|
||||
bool fromVariant(JSContext *cx, const JSVariant &from, JS::MutableHandleValue to);
|
||||
|
||||
bool toJSIDVariant(JSContext *cx, JS::HandleId from, JSIDVariant *to);
|
||||
bool fromJSIDVariant(JSContext *cx, const JSIDVariant &from, JS::MutableHandleId to);
|
||||
|
||||
bool fromDescriptor(JSContext *cx, JS::Handle<JSPropertyDescriptor> desc,
|
||||
PPropertyDescriptor *out);
|
||||
bool toDescriptor(JSContext *cx, const PPropertyDescriptor &in,
|
||||
|
|
|
@ -57,6 +57,12 @@ union JSVariant
|
|||
JSIID; /* XPC nsIID */
|
||||
};
|
||||
|
||||
union JSIDVariant
|
||||
{
|
||||
nsString;
|
||||
int32_t;
|
||||
};
|
||||
|
||||
struct ReturnSuccess
|
||||
{
|
||||
};
|
||||
|
|
|
@ -25,15 +25,15 @@ both:
|
|||
|
||||
// These roughly map to the ProxyHandler hooks that CPOWs need.
|
||||
rpc PreventExtensions(uint64_t objId) returns (ReturnStatus rs);
|
||||
rpc GetPropertyDescriptor(uint64_t objId, nsString id) returns (ReturnStatus rs, PPropertyDescriptor result);
|
||||
rpc GetOwnPropertyDescriptor(uint64_t objId, nsString id) returns (ReturnStatus rs, PPropertyDescriptor result);
|
||||
rpc DefineProperty(uint64_t objId, nsString id, PPropertyDescriptor descriptor) returns (ReturnStatus rs);
|
||||
rpc Delete(uint64_t objId, nsString id) returns (ReturnStatus rs, bool successful);
|
||||
rpc GetPropertyDescriptor(uint64_t objId, JSIDVariant id) returns (ReturnStatus rs, PPropertyDescriptor result);
|
||||
rpc GetOwnPropertyDescriptor(uint64_t objId, JSIDVariant id) returns (ReturnStatus rs, PPropertyDescriptor result);
|
||||
rpc DefineProperty(uint64_t objId, JSIDVariant id, PPropertyDescriptor descriptor) returns (ReturnStatus rs);
|
||||
rpc Delete(uint64_t objId, JSIDVariant id) returns (ReturnStatus rs, bool successful);
|
||||
|
||||
rpc Has(uint64_t objId, nsString id) returns (ReturnStatus rs, bool has);
|
||||
rpc HasOwn(uint64_t objId, nsString id) returns (ReturnStatus rs, bool has);
|
||||
rpc Get(uint64_t objId, ObjectVariant receiver, nsString id) returns (ReturnStatus rs, JSVariant result);
|
||||
rpc Set(uint64_t objId, ObjectVariant receiver, nsString id, bool strict, JSVariant value) returns (ReturnStatus rs, JSVariant result);
|
||||
rpc Has(uint64_t objId, JSIDVariant id) returns (ReturnStatus rs, bool has);
|
||||
rpc HasOwn(uint64_t objId, JSIDVariant id) returns (ReturnStatus rs, bool has);
|
||||
rpc Get(uint64_t objId, ObjectVariant receiver, JSIDVariant id) returns (ReturnStatus rs, JSVariant result);
|
||||
rpc Set(uint64_t objId, ObjectVariant receiver, JSIDVariant id, bool strict, JSVariant value) returns (ReturnStatus rs, JSVariant result);
|
||||
|
||||
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);
|
||||
|
|
|
@ -87,8 +87,8 @@ EmptyDesc(PPropertyDescriptor *desc)
|
|||
}
|
||||
|
||||
bool
|
||||
WrapperAnswer::AnswerGetPropertyDescriptor(const ObjectId &objId, const nsString &id,
|
||||
ReturnStatus *rs, PPropertyDescriptor *out)
|
||||
WrapperAnswer::AnswerGetPropertyDescriptor(const ObjectId &objId, const JSIDVariant &idVar,
|
||||
ReturnStatus *rs, PPropertyDescriptor *out)
|
||||
{
|
||||
AutoSafeJSContext cx;
|
||||
JSAutoRequest request(cx);
|
||||
|
@ -101,14 +101,14 @@ WrapperAnswer::AnswerGetPropertyDescriptor(const ObjectId &objId, const nsString
|
|||
|
||||
JSAutoCompartment comp(cx, obj);
|
||||
|
||||
LOG("%s.getPropertyDescriptor(%s)", ReceiverObj(objId), id);
|
||||
LOG("%s.getPropertyDescriptor(%s)", ReceiverObj(objId), Identifier(idVar));
|
||||
|
||||
RootedId internedId(cx);
|
||||
if (!convertGeckoStringToId(cx, id, &internedId))
|
||||
RootedId id(cx);
|
||||
if (!fromJSIDVariant(cx, idVar, &id))
|
||||
return fail(cx, rs);
|
||||
|
||||
Rooted<JSPropertyDescriptor> desc(cx);
|
||||
if (!JS_GetPropertyDescriptorById(cx, obj, internedId, &desc))
|
||||
if (!JS_GetPropertyDescriptorById(cx, obj, id, &desc))
|
||||
return fail(cx, rs);
|
||||
|
||||
if (!desc.object())
|
||||
|
@ -121,8 +121,8 @@ WrapperAnswer::AnswerGetPropertyDescriptor(const ObjectId &objId, const nsString
|
|||
}
|
||||
|
||||
bool
|
||||
WrapperAnswer::AnswerGetOwnPropertyDescriptor(const ObjectId &objId, const nsString &id,
|
||||
ReturnStatus *rs, PPropertyDescriptor *out)
|
||||
WrapperAnswer::AnswerGetOwnPropertyDescriptor(const ObjectId &objId, const JSIDVariant &idVar,
|
||||
ReturnStatus *rs, PPropertyDescriptor *out)
|
||||
{
|
||||
AutoSafeJSContext cx;
|
||||
JSAutoRequest request(cx);
|
||||
|
@ -135,14 +135,14 @@ WrapperAnswer::AnswerGetOwnPropertyDescriptor(const ObjectId &objId, const nsStr
|
|||
|
||||
JSAutoCompartment comp(cx, obj);
|
||||
|
||||
LOG("%s.getOwnPropertyDescriptor(%s)", ReceiverObj(objId), id);
|
||||
LOG("%s.getOwnPropertyDescriptor(%s)", ReceiverObj(objId), Identifier(idVar));
|
||||
|
||||
RootedId internedId(cx);
|
||||
if (!convertGeckoStringToId(cx, id, &internedId))
|
||||
RootedId id(cx);
|
||||
if (!fromJSIDVariant(cx, idVar, &id))
|
||||
return fail(cx, rs);
|
||||
|
||||
Rooted<JSPropertyDescriptor> desc(cx);
|
||||
if (!JS_GetPropertyDescriptorById(cx, obj, internedId, &desc))
|
||||
if (!JS_GetPropertyDescriptorById(cx, obj, id, &desc))
|
||||
return fail(cx, rs);
|
||||
|
||||
if (desc.object() != obj)
|
||||
|
@ -155,8 +155,8 @@ WrapperAnswer::AnswerGetOwnPropertyDescriptor(const ObjectId &objId, const nsStr
|
|||
}
|
||||
|
||||
bool
|
||||
WrapperAnswer::AnswerDefineProperty(const ObjectId &objId, const nsString &id,
|
||||
const PPropertyDescriptor &descriptor, ReturnStatus *rs)
|
||||
WrapperAnswer::AnswerDefineProperty(const ObjectId &objId, const JSIDVariant &idVar,
|
||||
const PPropertyDescriptor &descriptor, ReturnStatus *rs)
|
||||
{
|
||||
AutoSafeJSContext cx;
|
||||
JSAutoRequest request(cx);
|
||||
|
@ -167,23 +167,23 @@ WrapperAnswer::AnswerDefineProperty(const ObjectId &objId, const nsString &id,
|
|||
|
||||
JSAutoCompartment comp(cx, obj);
|
||||
|
||||
LOG("define %s[%s]", ReceiverObj(objId), id);
|
||||
LOG("define %s[%s]", ReceiverObj(objId), Identifier(idVar));
|
||||
|
||||
RootedId internedId(cx);
|
||||
if (!convertGeckoStringToId(cx, id, &internedId))
|
||||
RootedId id(cx);
|
||||
if (!fromJSIDVariant(cx, idVar, &id))
|
||||
return fail(cx, rs);
|
||||
|
||||
Rooted<JSPropertyDescriptor> desc(cx);
|
||||
if (!toDescriptor(cx, descriptor, &desc))
|
||||
return fail(cx, rs);
|
||||
|
||||
if (!js::CheckDefineProperty(cx, obj, internedId, desc.value(), desc.attributes(),
|
||||
if (!js::CheckDefineProperty(cx, obj, id, desc.value(), desc.attributes(),
|
||||
desc.getter(), desc.setter()))
|
||||
{
|
||||
return fail(cx, rs);
|
||||
}
|
||||
|
||||
if (!JS_DefinePropertyById(cx, obj, internedId, desc.value(), desc.attributes(),
|
||||
if (!JS_DefinePropertyById(cx, obj, id, desc.value(), desc.attributes(),
|
||||
desc.getter(), desc.setter()))
|
||||
{
|
||||
return fail(cx, rs);
|
||||
|
@ -193,8 +193,8 @@ WrapperAnswer::AnswerDefineProperty(const ObjectId &objId, const nsString &id,
|
|||
}
|
||||
|
||||
bool
|
||||
WrapperAnswer::AnswerDelete(const ObjectId &objId, const nsString &id, ReturnStatus *rs,
|
||||
bool *success)
|
||||
WrapperAnswer::AnswerDelete(const ObjectId &objId, const JSIDVariant &idVar, ReturnStatus *rs,
|
||||
bool *success)
|
||||
{
|
||||
AutoSafeJSContext cx;
|
||||
JSAutoRequest request(cx);
|
||||
|
@ -207,20 +207,20 @@ WrapperAnswer::AnswerDelete(const ObjectId &objId, const nsString &id, ReturnSta
|
|||
|
||||
JSAutoCompartment comp(cx, obj);
|
||||
|
||||
LOG("delete %s[%s]", ReceiverObj(objId), id);
|
||||
LOG("delete %s[%s]", ReceiverObj(objId), Identifier(idVar));
|
||||
|
||||
RootedId internedId(cx);
|
||||
if (!convertGeckoStringToId(cx, id, &internedId))
|
||||
RootedId id(cx);
|
||||
if (!fromJSIDVariant(cx, idVar, &id))
|
||||
return fail(cx, rs);
|
||||
|
||||
if (!JS_DeletePropertyById2(cx, obj, internedId, success))
|
||||
if (!JS_DeletePropertyById2(cx, obj, id, success))
|
||||
return fail(cx, rs);
|
||||
|
||||
return ok(rs);
|
||||
}
|
||||
|
||||
bool
|
||||
WrapperAnswer::AnswerHas(const ObjectId &objId, const nsString &id, ReturnStatus *rs, bool *bp)
|
||||
WrapperAnswer::AnswerHas(const ObjectId &objId, const JSIDVariant &idVar, ReturnStatus *rs, bool *bp)
|
||||
{
|
||||
AutoSafeJSContext cx;
|
||||
JSAutoRequest request(cx);
|
||||
|
@ -233,14 +233,14 @@ WrapperAnswer::AnswerHas(const ObjectId &objId, const nsString &id, ReturnStatus
|
|||
|
||||
JSAutoCompartment comp(cx, obj);
|
||||
|
||||
LOG("%s.has(%s)", ReceiverObj(objId), id);
|
||||
LOG("%s.has(%s)", ReceiverObj(objId), Identifier(idVar));
|
||||
|
||||
RootedId internedId(cx);
|
||||
if (!convertGeckoStringToId(cx, id, &internedId))
|
||||
RootedId id(cx);
|
||||
if (!fromJSIDVariant(cx, idVar, &id))
|
||||
return fail(cx, rs);
|
||||
|
||||
bool found;
|
||||
if (!JS_HasPropertyById(cx, obj, internedId, &found))
|
||||
if (!JS_HasPropertyById(cx, obj, id, &found))
|
||||
return fail(cx, rs);
|
||||
*bp = !!found;
|
||||
|
||||
|
@ -248,7 +248,8 @@ WrapperAnswer::AnswerHas(const ObjectId &objId, const nsString &id, ReturnStatus
|
|||
}
|
||||
|
||||
bool
|
||||
WrapperAnswer::AnswerHasOwn(const ObjectId &objId, const nsString &id, ReturnStatus *rs, bool *bp)
|
||||
WrapperAnswer::AnswerHasOwn(const ObjectId &objId, const JSIDVariant &idVar, ReturnStatus *rs,
|
||||
bool *bp)
|
||||
{
|
||||
AutoSafeJSContext cx;
|
||||
JSAutoRequest request(cx);
|
||||
|
@ -261,14 +262,14 @@ WrapperAnswer::AnswerHasOwn(const ObjectId &objId, const nsString &id, ReturnSta
|
|||
|
||||
JSAutoCompartment comp(cx, obj);
|
||||
|
||||
LOG("%s.hasOwn(%s)", ReceiverObj(objId), id);
|
||||
LOG("%s.hasOwn(%s)", ReceiverObj(objId), Identifier(idVar));
|
||||
|
||||
RootedId internedId(cx);
|
||||
if (!convertGeckoStringToId(cx, id, &internedId))
|
||||
RootedId id(cx);
|
||||
if (!fromJSIDVariant(cx, idVar, &id))
|
||||
return fail(cx, rs);
|
||||
|
||||
Rooted<JSPropertyDescriptor> desc(cx);
|
||||
if (!JS_GetPropertyDescriptorById(cx, obj, internedId, &desc))
|
||||
if (!JS_GetPropertyDescriptorById(cx, obj, id, &desc))
|
||||
return fail(cx, rs);
|
||||
*bp = (desc.object() == obj);
|
||||
|
||||
|
@ -276,8 +277,8 @@ WrapperAnswer::AnswerHasOwn(const ObjectId &objId, const nsString &id, ReturnSta
|
|||
}
|
||||
|
||||
bool
|
||||
WrapperAnswer::AnswerGet(const ObjectId &objId, const ObjectVariant &receiverVar, const nsString &id,
|
||||
ReturnStatus *rs, JSVariant *result)
|
||||
WrapperAnswer::AnswerGet(const ObjectId &objId, const ObjectVariant &receiverVar,
|
||||
const JSIDVariant &idVar, ReturnStatus *rs, JSVariant *result)
|
||||
{
|
||||
AutoSafeJSContext cx;
|
||||
JSAutoRequest request(cx);
|
||||
|
@ -296,26 +297,26 @@ WrapperAnswer::AnswerGet(const ObjectId &objId, const ObjectVariant &receiverVar
|
|||
if (!receiver)
|
||||
return fail(cx, rs);
|
||||
|
||||
RootedId internedId(cx);
|
||||
if (!convertGeckoStringToId(cx, id, &internedId))
|
||||
RootedId id(cx);
|
||||
if (!fromJSIDVariant(cx, idVar, &id))
|
||||
return fail(cx, rs);
|
||||
|
||||
JS::RootedValue val(cx);
|
||||
if (!JS_ForwardGetPropertyTo(cx, obj, internedId, receiver, &val))
|
||||
if (!JS_ForwardGetPropertyTo(cx, obj, id, receiver, &val))
|
||||
return fail(cx, rs);
|
||||
|
||||
if (!toVariant(cx, val, result))
|
||||
return fail(cx, rs);
|
||||
|
||||
LOG("get %s.%s = %s", ReceiverObj(objId), id, OutVariant(*result));
|
||||
LOG("get %s.%s = %s", ReceiverObj(objId), Identifier(idVar), OutVariant(*result));
|
||||
|
||||
return ok(rs);
|
||||
}
|
||||
|
||||
bool
|
||||
WrapperAnswer::AnswerSet(const ObjectId &objId, const ObjectVariant &receiverVar, const nsString &id,
|
||||
const bool &strict, const JSVariant &value, ReturnStatus *rs,
|
||||
JSVariant *result)
|
||||
WrapperAnswer::AnswerSet(const ObjectId &objId, const ObjectVariant &receiverVar,
|
||||
const JSIDVariant &idVar, const bool &strict, const JSVariant &value,
|
||||
ReturnStatus *rs, JSVariant *result)
|
||||
{
|
||||
AutoSafeJSContext cx;
|
||||
JSAutoRequest request(cx);
|
||||
|
@ -334,10 +335,10 @@ WrapperAnswer::AnswerSet(const ObjectId &objId, const ObjectVariant &receiverVar
|
|||
if (!receiver)
|
||||
return fail(cx, rs);
|
||||
|
||||
LOG("set %s[%s] = %s", ReceiverObj(objId), id, InVariant(value));
|
||||
LOG("set %s[%s] = %s", ReceiverObj(objId), Identifier(idVar), InVariant(value));
|
||||
|
||||
RootedId internedId(cx);
|
||||
if (!convertGeckoStringToId(cx, id, &internedId))
|
||||
RootedId id(cx);
|
||||
if (!fromJSIDVariant(cx, idVar, &id))
|
||||
return fail(cx, rs);
|
||||
|
||||
MOZ_ASSERT(obj == receiver);
|
||||
|
@ -346,7 +347,7 @@ WrapperAnswer::AnswerSet(const ObjectId &objId, const ObjectVariant &receiverVar
|
|||
if (!fromVariant(cx, value, &val))
|
||||
return fail(cx, rs);
|
||||
|
||||
if (!JS_SetPropertyById(cx, obj, internedId, val))
|
||||
if (!JS_SetPropertyById(cx, obj, id, val))
|
||||
return fail(cx, rs);
|
||||
|
||||
if (!toVariant(cx, val, result))
|
||||
|
@ -512,7 +513,7 @@ WrapperAnswer::AnswerHasInstance(const ObjectId &objId, const JSVariant &vVar, R
|
|||
|
||||
bool
|
||||
WrapperAnswer::AnswerObjectClassIs(const ObjectId &objId, const uint32_t &classValue,
|
||||
bool *result)
|
||||
bool *result)
|
||||
{
|
||||
AutoSafeJSContext cx;
|
||||
JSAutoRequest request(cx);
|
||||
|
@ -579,7 +580,7 @@ WrapperAnswer::AnswerRegExpToShared(const ObjectId &objId, ReturnStatus *rs,
|
|||
|
||||
bool
|
||||
WrapperAnswer::AnswerGetPropertyNames(const ObjectId &objId, const uint32_t &flags,
|
||||
ReturnStatus *rs, nsTArray<nsString> *names)
|
||||
ReturnStatus *rs, nsTArray<nsString> *names)
|
||||
{
|
||||
AutoSafeJSContext cx;
|
||||
JSAutoRequest request(cx);
|
||||
|
@ -609,7 +610,7 @@ WrapperAnswer::AnswerGetPropertyNames(const ObjectId &objId, const uint32_t &fla
|
|||
|
||||
bool
|
||||
WrapperAnswer::AnswerInstanceOf(const ObjectId &objId, const JSIID &iid, ReturnStatus *rs,
|
||||
bool *instanceof)
|
||||
bool *instanceof)
|
||||
{
|
||||
AutoSafeJSContext cx;
|
||||
JSAutoRequest request(cx);
|
||||
|
@ -636,8 +637,7 @@ WrapperAnswer::AnswerInstanceOf(const ObjectId &objId, const JSIID &iid, ReturnS
|
|||
|
||||
bool
|
||||
WrapperAnswer::AnswerDOMInstanceOf(const ObjectId &objId, const int &prototypeID,
|
||||
const int &depth,
|
||||
ReturnStatus *rs, bool *instanceof)
|
||||
const int &depth, ReturnStatus *rs, bool *instanceof)
|
||||
{
|
||||
AutoSafeJSContext cx;
|
||||
JSAutoRequest request(cx);
|
||||
|
|
|
@ -19,28 +19,28 @@ class WrapperAnswer : public virtual JavaScriptShared
|
|||
explicit WrapperAnswer(JSRuntime *rt) : JavaScriptShared(rt) {}
|
||||
|
||||
bool AnswerPreventExtensions(const ObjectId &objId, ReturnStatus *rs);
|
||||
bool AnswerGetPropertyDescriptor(const ObjectId &objId, const nsString &id,
|
||||
bool AnswerGetPropertyDescriptor(const ObjectId &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs,
|
||||
PPropertyDescriptor *out);
|
||||
bool AnswerGetOwnPropertyDescriptor(const ObjectId &objId,
|
||||
const nsString &id,
|
||||
const JSIDVariant &id,
|
||||
ReturnStatus *rs,
|
||||
PPropertyDescriptor *out);
|
||||
bool AnswerDefineProperty(const ObjectId &objId, const nsString &id,
|
||||
bool AnswerDefineProperty(const ObjectId &objId, const JSIDVariant &id,
|
||||
const PPropertyDescriptor &flags,
|
||||
ReturnStatus *rs);
|
||||
bool AnswerDelete(const ObjectId &objId, const nsString &id,
|
||||
bool AnswerDelete(const ObjectId &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs, bool *success);
|
||||
|
||||
bool AnswerHas(const ObjectId &objId, const nsString &id,
|
||||
bool AnswerHas(const ObjectId &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs, bool *bp);
|
||||
bool AnswerHasOwn(const ObjectId &objId, const nsString &id,
|
||||
bool AnswerHasOwn(const ObjectId &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs, bool *bp);
|
||||
bool AnswerGet(const ObjectId &objId, const ObjectVariant &receiverVar,
|
||||
const nsString &id,
|
||||
const JSIDVariant &id,
|
||||
ReturnStatus *rs, JSVariant *result);
|
||||
bool AnswerSet(const ObjectId &objId, const ObjectVariant &receiverVar,
|
||||
const nsString &id, const bool &strict,
|
||||
const JSIDVariant &id, const bool &strict,
|
||||
const JSVariant &value, ReturnStatus *rs, JSVariant *result);
|
||||
|
||||
bool AnswerIsExtensible(const ObjectId &objId, ReturnStatus *rs,
|
||||
|
|
|
@ -145,13 +145,13 @@ WrapperOwner::getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId
|
|||
{
|
||||
ObjectId objId = idOf(proxy);
|
||||
|
||||
nsString idstr;
|
||||
if (!convertIdToGeckoString(cx, id, &idstr))
|
||||
JSIDVariant idVar;
|
||||
if (!toJSIDVariant(cx, id, &idVar))
|
||||
return false;
|
||||
|
||||
ReturnStatus status;
|
||||
PPropertyDescriptor result;
|
||||
if (!CallGetPropertyDescriptor(objId, idstr, &status, &result))
|
||||
if (!CallGetPropertyDescriptor(objId, idVar, &status, &result))
|
||||
return ipcfail(cx);
|
||||
|
||||
LOG_STACK();
|
||||
|
@ -175,13 +175,13 @@ WrapperOwner::getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, Handle
|
|||
{
|
||||
ObjectId objId = idOf(proxy);
|
||||
|
||||
nsString idstr;
|
||||
if (!convertIdToGeckoString(cx, id, &idstr))
|
||||
JSIDVariant idVar;
|
||||
if (!toJSIDVariant(cx, id, &idVar))
|
||||
return false;
|
||||
|
||||
ReturnStatus status;
|
||||
PPropertyDescriptor result;
|
||||
if (!CallGetOwnPropertyDescriptor(objId, idstr, &status, &result))
|
||||
if (!CallGetOwnPropertyDescriptor(objId, idVar, &status, &result))
|
||||
return ipcfail(cx);
|
||||
|
||||
LOG_STACK();
|
||||
|
@ -205,8 +205,8 @@ WrapperOwner::defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
|
|||
{
|
||||
ObjectId objId = idOf(proxy);
|
||||
|
||||
nsString idstr;
|
||||
if (!convertIdToGeckoString(cx, id, &idstr))
|
||||
JSIDVariant idVar;
|
||||
if (!toJSIDVariant(cx, id, &idVar))
|
||||
return false;
|
||||
|
||||
PPropertyDescriptor descriptor;
|
||||
|
@ -214,7 +214,7 @@ WrapperOwner::defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
|
|||
return false;
|
||||
|
||||
ReturnStatus status;
|
||||
if (!CallDefineProperty(objId, idstr, descriptor, &status))
|
||||
if (!CallDefineProperty(objId, idVar, descriptor, &status))
|
||||
return ipcfail(cx);
|
||||
|
||||
LOG_STACK();
|
||||
|
@ -246,12 +246,12 @@ WrapperOwner::delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp)
|
|||
{
|
||||
ObjectId objId = idOf(proxy);
|
||||
|
||||
nsString idstr;
|
||||
if (!convertIdToGeckoString(cx, id, &idstr))
|
||||
JSIDVariant idVar;
|
||||
if (!toJSIDVariant(cx, id, &idVar))
|
||||
return false;
|
||||
|
||||
ReturnStatus status;
|
||||
if (!CallDelete(objId, idstr, &status, bp))
|
||||
if (!CallDelete(objId, idVar, &status, bp))
|
||||
return ipcfail(cx);
|
||||
|
||||
LOG_STACK();
|
||||
|
@ -282,12 +282,12 @@ WrapperOwner::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp)
|
|||
{
|
||||
ObjectId objId = idOf(proxy);
|
||||
|
||||
nsString idstr;
|
||||
if (!convertIdToGeckoString(cx, id, &idstr))
|
||||
JSIDVariant idVar;
|
||||
if (!toJSIDVariant(cx, id, &idVar))
|
||||
return false;
|
||||
|
||||
ReturnStatus status;
|
||||
if (!CallHas(objId, idstr, &status, bp))
|
||||
if (!CallHas(objId, idVar, &status, bp))
|
||||
return ipcfail(cx);
|
||||
|
||||
LOG_STACK();
|
||||
|
@ -306,12 +306,12 @@ WrapperOwner::hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp)
|
|||
{
|
||||
ObjectId objId = idOf(proxy);
|
||||
|
||||
nsString idstr;
|
||||
if (!convertIdToGeckoString(cx, id, &idstr))
|
||||
JSIDVariant idVar;
|
||||
if (!toJSIDVariant(cx, id, &idVar))
|
||||
return false;
|
||||
|
||||
ReturnStatus status;
|
||||
if (!CallHasOwn(objId, idstr, &status, bp))
|
||||
if (!CallHasOwn(objId, idVar, &status, bp))
|
||||
return ipcfail(cx);
|
||||
|
||||
LOG_STACK();
|
||||
|
@ -382,7 +382,7 @@ WrapperOwner::toString(JSContext *cx, HandleObject cpow, JS::CallArgs &args)
|
|||
|
||||
bool
|
||||
WrapperOwner::get(JSContext *cx, HandleObject proxy, HandleObject receiver,
|
||||
HandleId id, MutableHandleValue vp)
|
||||
HandleId id, MutableHandleValue vp)
|
||||
{
|
||||
ObjectId objId = idOf(proxy);
|
||||
|
||||
|
@ -390,13 +390,13 @@ WrapperOwner::get(JSContext *cx, HandleObject proxy, HandleObject receiver,
|
|||
if (!toObjectVariant(cx, receiver, &receiverVar))
|
||||
return false;
|
||||
|
||||
nsString idstr;
|
||||
if (!convertIdToGeckoString(cx, id, &idstr))
|
||||
JSIDVariant idVar;
|
||||
if (!toJSIDVariant(cx, id, &idVar))
|
||||
return false;
|
||||
|
||||
JSVariant val;
|
||||
ReturnStatus status;
|
||||
if (!CallGet(objId, receiverVar, idstr, &status, &val))
|
||||
if (!CallGet(objId, receiverVar, idVar, &status, &val))
|
||||
return ipcfail(cx);
|
||||
|
||||
LOG_STACK();
|
||||
|
@ -407,7 +407,8 @@ WrapperOwner::get(JSContext *cx, HandleObject proxy, HandleObject receiver,
|
|||
if (!fromVariant(cx, val, vp))
|
||||
return false;
|
||||
|
||||
if (idstr.EqualsLiteral("toString")) {
|
||||
if (idVar.type() == JSIDVariant::TnsString &&
|
||||
idVar.get_nsString().EqualsLiteral("toString")) {
|
||||
RootedFunction toString(cx, JS_NewFunction(cx, CPOWToString, 0, 0, proxy, "toString"));
|
||||
if (!toString)
|
||||
return false;
|
||||
|
@ -432,7 +433,7 @@ CPOWProxyHandler::set(JSContext *cx, JS::HandleObject proxy, JS::HandleObject re
|
|||
|
||||
bool
|
||||
WrapperOwner::set(JSContext *cx, JS::HandleObject proxy, JS::HandleObject receiver,
|
||||
JS::HandleId id, bool strict, JS::MutableHandleValue vp)
|
||||
JS::HandleId id, bool strict, JS::MutableHandleValue vp)
|
||||
{
|
||||
ObjectId objId = idOf(proxy);
|
||||
|
||||
|
@ -440,8 +441,8 @@ WrapperOwner::set(JSContext *cx, JS::HandleObject proxy, JS::HandleObject receiv
|
|||
if (!toObjectVariant(cx, receiver, &receiverVar))
|
||||
return false;
|
||||
|
||||
nsString idstr;
|
||||
if (!convertIdToGeckoString(cx, id, &idstr))
|
||||
JSIDVariant idVar;
|
||||
if (!toJSIDVariant(cx, id, &idVar))
|
||||
return false;
|
||||
|
||||
JSVariant val;
|
||||
|
@ -450,7 +451,7 @@ WrapperOwner::set(JSContext *cx, JS::HandleObject proxy, JS::HandleObject receiv
|
|||
|
||||
ReturnStatus status;
|
||||
JSVariant result;
|
||||
if (!CallSet(objId, receiverVar, idstr, strict, val, &status, &result))
|
||||
if (!CallSet(objId, receiverVar, idVar, strict, val, &status, &result))
|
||||
return ipcfail(cx);
|
||||
|
||||
LOG_STACK();
|
||||
|
|
|
@ -108,28 +108,28 @@ class WrapperOwner : public virtual JavaScriptShared
|
|||
public:
|
||||
virtual bool SendDropObject(const ObjectId &objId) = 0;
|
||||
virtual bool CallPreventExtensions(const ObjectId &objId, ReturnStatus *rs) = 0;
|
||||
virtual bool CallGetPropertyDescriptor(const ObjectId &objId, const nsString &id,
|
||||
virtual bool CallGetPropertyDescriptor(const ObjectId &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs,
|
||||
PPropertyDescriptor *out) = 0;
|
||||
virtual bool CallGetOwnPropertyDescriptor(const ObjectId &objId,
|
||||
const nsString &id,
|
||||
const JSIDVariant &id,
|
||||
ReturnStatus *rs,
|
||||
PPropertyDescriptor *out) = 0;
|
||||
virtual bool CallDefineProperty(const ObjectId &objId, const nsString &id,
|
||||
virtual bool CallDefineProperty(const ObjectId &objId, const JSIDVariant &id,
|
||||
const PPropertyDescriptor &flags,
|
||||
ReturnStatus *rs) = 0;
|
||||
virtual bool CallDelete(const ObjectId &objId, const nsString &id,
|
||||
virtual bool CallDelete(const ObjectId &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs, bool *success) = 0;
|
||||
|
||||
virtual bool CallHas(const ObjectId &objId, const nsString &id,
|
||||
virtual bool CallHas(const ObjectId &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs, bool *bp) = 0;
|
||||
virtual bool CallHasOwn(const ObjectId &objId, const nsString &id,
|
||||
virtual bool CallHasOwn(const ObjectId &objId, const JSIDVariant &id,
|
||||
ReturnStatus *rs, bool *bp) = 0;
|
||||
virtual bool CallGet(const ObjectId &objId, const ObjectVariant &receiverVar,
|
||||
const nsString &id,
|
||||
const JSIDVariant &id,
|
||||
ReturnStatus *rs, JSVariant *result) = 0;
|
||||
virtual bool CallSet(const ObjectId &objId, const ObjectVariant &receiverVar,
|
||||
const nsString &id, const bool &strict,
|
||||
const JSIDVariant &id, const bool &strict,
|
||||
const JSVariant &value, ReturnStatus *rs, JSVariant *result) = 0;
|
||||
|
||||
virtual bool CallIsExtensible(const ObjectId &objId, ReturnStatus *rs,
|
||||
|
|
Загрузка…
Ссылка в новой задаче