bool GlobalObject::isRuntimeCodeGenEnabled(JSContext *cx) { HeapSlot &v = getSlotRef(RUNTIME_CODEGEN_ENABLED); if (v.isUndefined()) { /* * If there are callbacks, make sure that the CSP callback is installed * and that it permits runtime code generation, then cache the result. */ JSCSPEvalChecker allows = cx->runtime->securityCallbacks->contentSecurityPolicyAllows; v.set(this, RUNTIME_CODEGEN_ENABLED, BooleanValue(!allows || allows(cx))); } return !v.isFalse(); }
bool GlobalObject::isEvalAllowed(JSContext *cx) { Value &v = getSlotRef(EVAL_ALLOWED); if (v.isUndefined()) { JSSecurityCallbacks *callbacks = JS_GetSecurityCallbacks(cx); /* * If there are callbacks, make sure that the CSP callback is installed * and that it permits eval(), then cache the result. */ v.setBoolean((!callbacks || !callbacks->contentSecurityPolicyAllows) || callbacks->contentSecurityPolicyAllows(cx)); } return !v.isFalse(); }
bool GlobalObject::isRuntimeCodeGenEnabled(JSContext *cx) { Value &v = getSlotRef(RUNTIME_CODEGEN_ENABLED); if (v.isUndefined()) { JSSecurityCallbacks *callbacks = JS_GetSecurityCallbacks(cx); /* * If there are callbacks, make sure that the CSP callback is installed * and that it permits runtime code generation, then cache the result. */ v.setBoolean((!callbacks || !callbacks->contentSecurityPolicyAllows) || callbacks->contentSecurityPolicyAllows(cx)); } return !v.isFalse(); }