static void GetMethodInfo(JSContext *cx, jsval *vp, const char **ifaceNamep, jsid *memberIdp) { CallReceiver call = CallReceiverFromVp(vp); RootedObject funobj(cx, &call.callee()); MOZ_ASSERT(JS_ObjectIsFunction(cx, funobj), "JSNative callee should be Function object"); RootedString str(cx, JS_GetFunctionId(JS_GetObjectFunction(funobj))); RootedId methodId(cx, str ? INTERNED_STRING_TO_JSID(cx, str) : JSID_VOID); GetMemberInfo(&call.thisv().toObject(), methodId, ifaceNamep); *memberIdp = methodId; }
static bool RevokeProxy(JSContext* cx, unsigned argc, Value* vp) { CallReceiver rec = CallReceiverFromVp(vp); RootedFunction func(cx, &rec.callee().as<JSFunction>()); RootedObject p(cx, func->getExtendedSlot(ScriptedDirectProxyHandler::REVOKE_SLOT).toObjectOrNull()); if (p) { func->setExtendedSlot(ScriptedDirectProxyHandler::REVOKE_SLOT, NullValue()); MOZ_ASSERT(p->is<ProxyObject>()); p->as<ProxyObject>().setSameCompartmentPrivate(NullValue()); p->as<ProxyObject>().setExtra(ScriptedDirectProxyHandler::HANDLER_EXTRA, NullValue()); } rec.rval().setUndefined(); return true; }