diff spidermonkey-playground.cpp @ 9:fcefc3e5a9df

Added a runtime access check callback.
author Atul Varma <varmaa@toolness.com>
date Fri, 19 Jun 2009 12:50:42 -0700
parents e14f496e6e08
children 16a605ff036c
line wrap: on
line diff
--- a/spidermonkey-playground.cpp	Fri Jun 19 12:22:52 2009 -0700
+++ b/spidermonkey-playground.cpp	Fri Jun 19 12:50:42 2009 -0700
@@ -188,6 +188,20 @@
   return JSTRAP_CONTINUE;
 }
 
+static JSBool checkAccess(JSContext *cx, JSObject *obj, jsval id,
+                          JSAccessMode mode, jsval *vp)
+{
+  if (JSVAL_IS_STRING(id)) {
+    char *str;
+    if (!JS_ConvertArguments(cx, 1, &id, "s", &str)) {
+      printf("checkAccess() string conversion failed!\n");
+      return JS_FALSE;
+    }
+    printf("checkAccess: %s\n", str);
+  }
+  return JS_LookupPropertyById(cx, obj, id, vp);
+}
+
 static JSFunctionSpec tcb_global_functions[] = {
   JS_FS("print",   print,   1, 0, 0),
   JS_FS("wrap",    wrap,    2, 0, 0),
@@ -196,6 +210,12 @@
   JS_FS_END
 };
 
+static JSSecurityCallbacks securityCallbacks = {
+  checkAccess,
+  NULL,
+  NULL
+};
+
 int main(int argc, const char *argv[])
 {
   /* JS variables. */
@@ -208,6 +228,8 @@
   if (rt == NULL)
     return 1;
 
+  JS_SetRuntimeSecurityCallbacks(rt, &securityCallbacks);
+
   /* Create a context. */
   tcb_cx = JS_NewContext(rt, 8192);
   if (tcb_cx == NULL)