/* @location_class.setProperty */ static JSBool location_set_property(JSContext *ctx, JSObject *obj, jsid id, JSBool strict, jsval *vp) { JSObject *parent_win; /* instance of @window_class */ struct view_state *vs; struct document_view *doc_view; /* This can be called if @obj if not itself an instance of the * appropriate class but has one in its prototype chain. Fail * such calls. */ if (!JS_InstanceOf(ctx, obj, (JSClass *) &location_class, NULL)) return JS_FALSE; parent_win = JS_GetParent(ctx, obj); assert(JS_InstanceOf(ctx, parent_win, (JSClass *) &window_class, NULL)); if_assert_failed return JS_FALSE; vs = (struct view_state *)JS_GetInstancePrivate(ctx, parent_win, (JSClass *) &window_class, NULL); doc_view = vs->doc_view; if (!JSID_IS_INT(id)) return JS_TRUE; switch (JSID_TO_INT(id)) { case JSP_LOC_HREF: location_goto(doc_view, jsval_to_string(ctx, vp)); break; } return JS_TRUE; }
/* @bookmark_class.finalize, @bookmark_folder_class.finalize */ static void bookmark_finalize(JSContext *ctx, JSObject *obj) { struct bookmark *bookmark; assert(JS_InstanceOf(ctx, obj, (JSClass *) &bookmark_class, NULL) || JS_InstanceOf(ctx, obj, (JSClass *) &bookmark_folder_class, NULL)); if_assert_failed return; bookmark = JS_GetPrivate(ctx, obj); /* from @bookmark_class or @bookmark_folder_class */ if (bookmark) object_unlock(bookmark); }
BSONObj toObject( JSObject * o , int depth = 0) { if ( ! o ) return BSONObj(); if ( JS_InstanceOf( _context , o , &bson_ro_class , 0 ) ) { BSONHolder * holder = GETHOLDER( _context , o ); assert( holder ); return holder->_obj.getOwned(); } BSONObj orig; if ( JS_InstanceOf( _context , o , &bson_class , 0 ) ) { BSONHolder * holder = GETHOLDER(_context,o); assert( holder ); if ( ! holder->_modified ) { return holder->_obj; } orig = holder->_obj; } BSONObjBuilder b; if ( ! appendSpecialDBObject( this , b , "value" , OBJECT_TO_JSVAL( o ) , o ) ) { if ( depth == 0 ) { jsval theid = getProperty( o , "_id" ); if ( ! JSVAL_IS_VOID( theid ) ) { append( b , "_id" , theid , EOO , depth + 1 ); } } JSIdArray * properties = JS_Enumerate( _context , o ); assert( properties ); for ( jsint i=0; i<properties->length; i++ ) { jsid id = properties->vector[i]; jsval nameval; assert( JS_IdToValue( _context ,id , &nameval ) ); string name = toString( nameval ); if ( depth == 0 && name == "_id" ) continue; append( b , name , getProperty( o , name.c_str() ) , orig[name].type() , depth + 1 ); } JS_DestroyIdArray( _context , properties ); } return b.obj(); }
static nsInstall * GetNativeThis(JSContext *cx, JSObject *obj, jsval *argv) { // Pass null for argv in the first test to avoid spurious error // reports when called against the File object. The Install-global // methods are considered deprecated in favour of the File-scoped ones, // so if we get neither here we'll mention File in the report to point // authors at the new way. if (JS_InstanceOf(cx, obj, &InstallClass, nsnull) || JS_InstanceOf(cx, obj, &FileOpClass, argv)) { return (nsInstall *)JS_GetPrivate(cx, obj); } return nsnull; }
GType gjs_gtype_get_actual_gtype (JSContext *context, JSObject *object) { GType gtype = G_TYPE_INVALID; jsval gtype_val = JSVAL_VOID; JS_BeginRequest(context); if (JS_InstanceOf(context, object, &gjs_gtype_class, NULL)) { gtype = GPOINTER_TO_SIZE(priv_from_js(context, object)); goto out; } /* OK, we don't have a GType wrapper object -- grab the "$gtype" * property on that and hope it's a GType wrapper object */ if (!JS_GetProperty(context, object, "$gtype", >ype_val) || !JSVAL_IS_OBJECT(gtype_val)) { /* OK, so we're not a class. But maybe we're an instance. Check for "constructor" and recurse on that. */ if (!JS_GetProperty(context, object, "constructor", >ype_val)) goto out; } if (JSVAL_IS_OBJECT(gtype_val)) gtype = gjs_gtype_get_actual_gtype(context, JSVAL_TO_OBJECT(gtype_val)); out: JS_EndRequest(context); return gtype; }
JavaPackage_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { if (!JS_InstanceOf(cx, obj, &JavaPackage_class, argv)) return JS_FALSE; return JavaPackage_convert(cx, obj, JSTYPE_STRING, rval); }
/* @bookmark_folder_class.getProperty */ static JSBool bookmark_folder_get_property(JSContext *ctx, JSObject *obj, jsid id, jsval *vp) { struct bookmark *bookmark; struct bookmark *folder; unsigned char *title = NULL; /* This can be called if @obj if not itself an instance of the * appropriate class but has one in its prototype chain. Fail * such calls. */ if (!JS_InstanceOf(ctx, obj, (JSClass *) &bookmark_folder_class, NULL)) return JS_FALSE; folder = JS_GetInstancePrivate(ctx, obj, (JSClass *) &bookmark_folder_class, NULL); *vp = JSVAL_NULL; if (!jsval_to_bookmark_string(ctx, id, &title)) return JS_FALSE; bookmark = get_bookmark_by_name(folder, title); if (bookmark) { *vp = OBJECT_TO_JSVAL(smjs_get_bookmark_object(bookmark)); } mem_free(title); return JS_TRUE; }
static JSBool JSB_IOSiAP_paymentWithProduct(JSContext *cx, uint32_t argc, jsval *vp) { JSB_PRECONDITION2(argc > 0, cx, JS_FALSE, "Invalid number of arguments"); jsval *argv = JS_ARGV(cx,vp); JSObject *obj = (JSObject *)JS_THIS_OBJECT(cx, vp); IOSiAP_Bridge *bridge = (IOSiAP_Bridge *)JS_GetPrivate(obj); // safety check for type JSObject *productObj = JSVAL_TO_OBJECT(argv[0]); if (NULL == productObj) { JS_SET_RVAL(cx, vp, BOOLEAN_TO_JSVAL(JS_FALSE)); return JS_TRUE; } if (JS_FALSE == JS_InstanceOf(cx, productObj, JSB_Product_class, NULL)) { JS_SET_RVAL(cx, vp, BOOLEAN_TO_JSVAL(JS_FALSE)); return JS_TRUE; } IOSProduct *product = (IOSProduct *)JS_GetPrivate(productObj); int quantity = 1; if (argc > 1 && JSVAL_IS_INT(argv[1])) { quantity = JSVAL_TO_INT(argv[1]); } bridge->iap->paymentWithProduct(product, quantity); JS_SET_RVAL(cx, vp, BOOLEAN_TO_JSVAL(JS_TRUE)); return JS_TRUE; }
// // Native method DirRename // JSBool PR_CALLBACK InstallFileOpDirRename(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { nsInstall *nativeThis = GetNativeThis(cx, obj, argv); if (!nativeThis) return JS_FALSE; PRInt32 nativeRet; nsAutoString b1; JSObject *jsObj; nsInstallFolder *folder; *rval = INT_TO_JSVAL(nsInstall::UNEXPECTED_ERROR); if(argc >= 2) { // public int DirRename (String aSourceFolder, // String aTargetFolder); ConvertJSValToStr(b1, cx, argv[1]); // fix: nsFileSpec::Rename() does not accept new name as a // nsFileSpec type. It only accepts a char* type for the new name // This is a bug with nsFileSpec. A char* will be used until // nsFileSpec if fixed. // nsFileSpec fsB1(b1); if (argv[0] == JSVAL_NULL || !JSVAL_IS_OBJECT(argv[0])) //argv[0] MUST be a jsval { *rval = INT_TO_JSVAL(nsInstall::INVALID_ARGUMENTS); return JS_TRUE; } jsObj = JSVAL_TO_OBJECT(argv[0]); if (!JS_InstanceOf(cx, jsObj, &FileSpecObjectClass, nsnull)) { *rval = INT_TO_JSVAL(nsInstall::INVALID_ARGUMENTS); return JS_TRUE; } folder = (nsInstallFolder*)JS_GetPrivate(cx, jsObj); if(!folder || NS_OK != nativeThis->FileOpDirRename(*folder, b1, &nativeRet)) { return JS_TRUE; } *rval = INT_TO_JSVAL(nativeRet); } else { JS_ReportError(cx, "Function DirRename requires 2 parameters"); return JS_TRUE; } return JS_TRUE; }
/* * Common subroutine of generator_(next|send|throw|close) methods. */ static JSBool generator_op(JSContext *cx, JSGeneratorOp op, jsval *vp, uintN argc) { JSObject *obj; JSGenerator *gen; jsval arg; obj = JS_THIS_OBJECT(cx, vp); if (!JS_InstanceOf(cx, obj, &js_GeneratorClass, vp + 2)) return JS_FALSE; gen = (JSGenerator *) JS_GetPrivate(cx, obj); if (gen == NULL) { /* This happens when obj is the generator prototype. See bug 352885. */ goto closed_generator; } if (gen->state == JSGEN_NEWBORN) { switch (op) { case JSGENOP_NEXT: case JSGENOP_THROW: break; case JSGENOP_SEND: if (argc >= 1 && !JSVAL_IS_VOID(vp[2])) { js_ReportValueError(cx, JSMSG_BAD_GENERATOR_SEND, JSDVG_SEARCH_STACK, vp[2], NULL); return JS_FALSE; } break; default: JS_ASSERT(op == JSGENOP_CLOSE); gen->state = JSGEN_CLOSED; return JS_TRUE; } } else if (gen->state == JSGEN_CLOSED) { closed_generator: switch (op) { case JSGENOP_NEXT: case JSGENOP_SEND: return js_ThrowStopIteration(cx); case JSGENOP_THROW: JS_SetPendingException(cx, argc >= 1 ? vp[2] : JSVAL_VOID); return JS_FALSE; default: JS_ASSERT(op == JSGENOP_CLOSE); return JS_TRUE; } } arg = ((op == JSGENOP_SEND || op == JSGENOP_THROW) && argc != 0) ? vp[2] : JSVAL_VOID; if (!SendToGenerator(cx, op, obj, gen, arg)) return JS_FALSE; *vp = gen->frame.rval; return JS_TRUE; }
static bool js_value_is_regexp(JohnsonRuntime* runtime, jsval maybe_regexp) { JSContext * context = johnson_get_current_context(runtime); PREPARE_RUBY_JROOTS(context, 1); JROOT(maybe_regexp); JSBool result = JS_InstanceOf(context, JSVAL_TO_OBJECT(maybe_regexp), &js_RegExpClass, NULL); JRETURN_RUBY(result ? true : false); }
static JSBool bool_valueOf(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { if (!JS_InstanceOf(cx, obj, &boolean_class, argv)) return JS_FALSE; *rval = OBJ_GET_SLOT(cx, obj, JSSLOT_PRIVATE); return JS_TRUE; }
// // Native method DirGetParent // JSBool PR_CALLBACK InstallFileOpDirGetParent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { nsInstall *nativeThis = GetNativeThis(cx, obj, argv); if (!nativeThis) return JS_FALSE; JSObject *jsObj; nsInstallFolder *parentFolder, *folder; *rval = JSVAL_NULL; // public int DirGetParent (nsInstallFolder NativeFolderPath); if ( argc == 0 || argv[0] == JSVAL_NULL || !JSVAL_IS_OBJECT(argv[0])) //argv[0] MUST be a jsval { // error, return NULL return JS_TRUE; } jsObj = JSVAL_TO_OBJECT(argv[0]); if (!JS_InstanceOf(cx, jsObj, &FileSpecObjectClass, nsnull)) { // error, return NULL return JS_TRUE; } folder = (nsInstallFolder*)JS_GetPrivate(cx, jsObj); if(!folder || NS_OK != nativeThis->FileOpDirGetParent(*folder, &parentFolder)) { return JS_TRUE; } if ( parentFolder ) { /* Now create the new JSObject */ JSObject *fileSpecObject; fileSpecObject = JS_NewObject(cx, &FileSpecObjectClass, gFileSpecProto, NULL); if (fileSpecObject) { JS_SetPrivate(cx, fileSpecObject, parentFolder); if (fileSpecObject) { *rval = OBJECT_TO_JSVAL(fileSpecObject); } } } return JS_TRUE; }
loc_reload(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval) { if (!JS_InstanceOf(cx, obj, &lm_location_class, argv)) return JS_FALSE; return url_load(cx, obj, get_url_string(cx, obj), (JSVAL_IS_BOOLEAN(argv[0]) && JSVAL_TO_BOOLEAN(argv[0])) ? NET_SUPER_RELOAD : NET_NORMAL_RELOAD); }
/* @smjs_globhist_item_class.setProperty */ static JSBool smjs_globhist_item_set_property(JSContext *ctx, JSObject *obj, jsid id, JSBool strict, jsval *vp) { struct global_history_item *history_item; /* This can be called if @obj if not itself an instance of the * appropriate class but has one in its prototype chain. Fail * such calls. */ if (!JS_InstanceOf(ctx, obj, (JSClass *) &smjs_globhist_item_class, NULL)) return JS_FALSE; history_item = JS_GetInstancePrivate(ctx, obj, (JSClass *) &smjs_globhist_item_class, NULL); if (!history_item) return JS_FALSE; if (!JSID_IS_INT(id)) return JS_FALSE; switch (JSID_TO_INT(id)) { case GLOBHIST_TITLE: { JSString *jsstr = JS_ValueToString(smjs_ctx, *vp); unsigned char *str = JS_EncodeString(smjs_ctx, jsstr); mem_free_set(&history_item->title, stracpy(str)); return JS_TRUE; } case GLOBHIST_URL: { JSString *jsstr = JS_ValueToString(smjs_ctx, *vp); unsigned char *str = JS_EncodeString(smjs_ctx, jsstr); mem_free_set(&history_item->url, stracpy(str)); return JS_TRUE; } case GLOBHIST_LAST_VISIT: { uint32 seconds; /* Bug 923: Assumes time_t values fit in uint32. */ JS_ValueToECMAUint32(smjs_ctx, *vp, &seconds); history_item->last_visit = seconds; return JS_TRUE; } default: /* Unrecognized integer property ID; someone is using * the object as an array. SMJS builtin classes (e.g. * js_RegExpClass) just return JS_TRUE in this case. * Do the same here. */ return JS_TRUE; } }
getClass(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { JSObject *obj_arg, *JavaClass_obj; JavaObjectWrapper *java_wrapper; JavaClassDescriptor *class_descriptor; JNIEnv *jEnv; JSJavaThreadState *jsj_env; if (argc != 1 || !JSVAL_IS_OBJECT(argv[0]) || !(obj_arg = JSVAL_TO_OBJECT(argv[0])) || (!JS_InstanceOf(cx, obj_arg, &JavaObject_class, 0) && !JS_InstanceOf(cx, obj_arg, &JavaArray_class, 0))) { JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL, JSJMSG_NEED_JOBJECT_ARG); return JS_FALSE; } java_wrapper = JS_GetPrivate(cx, obj_arg); if (!java_wrapper) { JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL, JSJMSG_PROTO_GETCLASS); return JS_FALSE; } jsj_env = jsj_EnterJava(cx, &jEnv); if (!jEnv) return JS_FALSE; class_descriptor = java_wrapper->class_descriptor; JavaClass_obj = jsj_new_JavaClass(cx, jEnv, NULL, class_descriptor); if (!JavaClass_obj) { jsj_ExitJava(jsj_env); return JS_FALSE; } *rval = OBJECT_TO_JSVAL(JavaClass_obj); jsj_ExitJava(jsj_env); return JS_TRUE; }
// // Native method FileUnixLinkCreate // JSBool PR_CALLBACK InstallFileOpFileUnixLink(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { nsInstall *nativeThis = GetNativeThis(cx, obj, argv); if (!nativeThis) return JS_FALSE; PRInt32 nativeRet; //nsAutoString b0; PRInt32 b1; JSObject *jsObj; nsInstallFolder *folder; *rval = JSVAL_NULL; if(argc >= 2) { // public int FileUnixLinkCreate (String aSourceFolder, // Number aFlags); b1 = JSVAL_TO_INT(argv[1]); if (argv[0] == JSVAL_NULL || !JSVAL_IS_OBJECT(argv[0])) //argv[0] MUST be a jsval { *rval = INT_TO_JSVAL(nsInstall::INVALID_ARGUMENTS); return JS_TRUE; } jsObj = JSVAL_TO_OBJECT(argv[0]); if (!JS_InstanceOf(cx, jsObj, &FileSpecObjectClass, nsnull)) { *rval = INT_TO_JSVAL(nsInstall::INVALID_ARGUMENTS); return JS_TRUE; } folder = (nsInstallFolder*)JS_GetPrivate(cx, jsObj); if(NS_OK != nativeThis->FileOpFileUnixLink(*folder, b1, &nativeRet)) { return JS_TRUE; } *rval = INT_TO_JSVAL(nativeRet); } else { JS_ReportError(cx, "Function FileUnixLink requires 2 parameters"); return JS_TRUE; } return JS_TRUE; }
// // Helper function to get native object // // This is our own version of JS_GetInstancePrivate() that in addition // performs the delayed creation of the native InstallTrigger if necessary // static nsIDOMInstallTriggerGlobal* getTriggerNative(JSContext *cx, JSObject *obj) { if (!JS_InstanceOf(cx, obj, &InstallTriggerGlobalClass, nsnull)) return nsnull; nsIDOMInstallTriggerGlobal *native = (nsIDOMInstallTriggerGlobal*)JS_GetPrivate(cx, obj); if (!native) { // xpinstall script contexts delay creation of the native. CreateNativeObject(cx, obj, &native); } return native; }
static JSBool define_meta_properties(JSContext *context, JSObject *module_obj, const char *full_path, const char *module_name, JSObject *parent) { gboolean parent_is_module; /* We define both __moduleName__ and __parentModule__ to null * on the root importer */ parent_is_module = parent && JS_InstanceOf(context, parent, &gjs_importer_class, NULL); gjs_debug(GJS_DEBUG_IMPORTER, "Defining parent %p of %p '%s' is mod %d", parent, module_obj, module_name ? module_name : "<root>", parent_is_module); if (full_path != NULL) { if (!JS_DefineProperty(context, module_obj, "__file__", STRING_TO_JSVAL(JS_NewStringCopyZ(context, full_path)), NULL, NULL, /* don't set ENUMERATE since we wouldn't want to copy * this symbol to any other object for example. */ JSPROP_READONLY | JSPROP_PERMANENT)) return JS_FALSE; } if (!JS_DefineProperty(context, module_obj, "__moduleName__", parent_is_module ? STRING_TO_JSVAL(JS_NewStringCopyZ(context, module_name)) : JSVAL_NULL, NULL, NULL, /* don't set ENUMERATE since we wouldn't want to copy * this symbol to any other object for example. */ JSPROP_READONLY | JSPROP_PERMANENT)) return JS_FALSE; if (!JS_DefineProperty(context, module_obj, "__parentModule__", parent_is_module ? OBJECT_TO_JSVAL(parent) : JSVAL_NULL, NULL, NULL, /* don't set ENUMERATE since we wouldn't want to copy * this symbol to any other object for example. */ JSPROP_READONLY | JSPROP_PERMANENT)) return JS_FALSE; return JS_TRUE; }
/* @location_class.getProperty */ static JSBool location_get_property(JSContext *ctx, JSObject *obj, jsid id, jsval *vp) { JSObject *parent_win; /* instance of @window_class */ struct view_state *vs; /* This can be called if @obj if not itself an instance of the * appropriate class but has one in its prototype chain. Fail * such calls. */ if (!JS_InstanceOf(ctx, obj, (JSClass *) &location_class, NULL)) return JS_FALSE; parent_win = JS_GetParent(ctx, obj); assert(JS_InstanceOf(ctx, parent_win, (JSClass *) &window_class, NULL)); if_assert_failed return JS_FALSE; vs = (struct view_state *)JS_GetInstancePrivate(ctx, parent_win, (JSClass *) &window_class, NULL); if (!JSID_IS_INT(id)) return JS_TRUE; undef_to_jsval(ctx, vp); switch (JSID_TO_INT(id)) { case JSP_LOC_HREF: astring_to_jsval(ctx, vp, get_uri_string(vs->uri, URI_ORIGINAL)); break; default: /* Unrecognized integer property ID; someone is using * the object as an array. SMJS builtin classes (e.g. * js_RegExpClass) just return JS_TRUE in this case * and leave *@vp unchanged. Do the same here. * (Actually not quite the same, as we already used * @undef_to_jsval.) */ break; } return JS_TRUE; }
// // Native method FileModDateChanged // JSBool PR_CALLBACK InstallFileOpFileModDateChanged(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { nsInstall *nativeThis = GetNativeThis(cx, obj, argv); if (!nativeThis) return JS_FALSE; PRInt32 nativeRet; JSObject *jsObj; nsInstallFolder *folder; *rval = BOOLEAN_TO_JSVAL(PR_FALSE); if(argc >= 2) { // public int FileModDateChanged (nsInstallFolder aSourceFolder, // Number aOldDate); jsdouble dval = *(JSVAL_TO_DOUBLE(argv[1])); if (argv[0] == JSVAL_NULL || !JSVAL_IS_OBJECT(argv[0])) //argv[0] MUST be a jsval { *rval = *rval = BOOLEAN_TO_JSVAL(PR_FALSE); return JS_TRUE; } jsObj = JSVAL_TO_OBJECT(argv[0]); if (!JS_InstanceOf(cx, jsObj, &FileSpecObjectClass, nsnull)) { *rval = BOOLEAN_TO_JSVAL(PR_FALSE); return JS_TRUE; } folder = (nsInstallFolder*)JS_GetPrivate(cx, jsObj); if(!folder || NS_OK != nativeThis->FileOpFileModDateChanged(*folder, dval, &nativeRet)) { return JS_TRUE; } *rval = BOOLEAN_TO_JSVAL(nativeRet); } else { JS_ReportError(cx, "Function FileModDateChanged requires 2 parameters"); return JS_TRUE; } return JS_TRUE; }
/* @smjs_globhist_item_class.finalize */ static void smjs_globhist_item_finalize(JSContext *ctx, JSObject *obj) { struct global_history_item *history_item; assert(JS_InstanceOf(ctx, obj, (JSClass *) &smjs_globhist_item_class, NULL)); if_assert_failed return; history_item = JS_GetInstancePrivate(ctx, obj, (JSClass *) &smjs_globhist_item_class, NULL); if (history_item) object_unlock(history_item); }
JSBool replaceChild(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval) { JSObject * newChildObj, *refChildObj; nsCOMPtr<nsIDOMNode> newChild, refChild, mNode, outNode; JS_BeginRequest(cx); if(!JS_ConvertArguments(cx, argc, argv, "o o", &newChildObj, &refChildObj)) { JS_ReportError(cx, "Error converting arguments in replaceChild"); JS_EndRequest(cx); return JS_FALSE; } if(!JS_InstanceOf(cx, newChildObj, &lDOMNodeClass, NULL) || !JS_InstanceOf(cx, refChildObj, &lDOMNodeClass, NULL)) { JS_ReportWarning(cx, "Arguments to replaceChild must both be DOMNode objects."); JS_EndRequest(cx); return JS_TRUE; } newChild = (nsIDOMNode*)JS_GetPrivate(cx, newChildObj); refChild = (nsIDOMNode*)JS_GetPrivate(cx, refChildObj); mNode = (nsIDOMNode*)JS_GetPrivate(cx, obj); EnterCriticalSection(&domStateLock); domState = 1; if(mNode->ReplaceChild(newChild, refChild, getter_AddRefs(outNode)) == NS_OK) { JSObject * retObj = JS_NewObject(cx, &lDOMNodeClass, lDOMNodeProto, obj); *rval = OBJECT_TO_JSVAL(retObj); JS_SetPrivate(cx, retObj, outNode); } else *rval = JSVAL_FALSE; LeaveCriticalSection(&domStateLock); JS_EndRequest(cx); return JS_TRUE; }
// // Native method DirRemove // JSBool PR_CALLBACK InstallFileOpDirRemove(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { nsInstall *nativeThis = GetNativeThis(cx, obj, argv); if (!nativeThis) return JS_FALSE; PRInt32 nativeRet; PRBool bRecursive = PR_FALSE; JSObject *jsObj; nsInstallFolder *folder; *rval = INT_TO_JSVAL(nsInstall::UNEXPECTED_ERROR); // public int DirRemove (nsInstallFolder aNativeFolderPath, // Bool aRecursive); if ( argc == 0 || argv[0] == JSVAL_NULL || !JSVAL_IS_OBJECT(argv[0])) //argv[0] MUST be a jsval { *rval = INT_TO_JSVAL(nsInstall::INVALID_ARGUMENTS); return JS_TRUE; } jsObj = JSVAL_TO_OBJECT(argv[0]); if (!JS_InstanceOf(cx, jsObj, &FileSpecObjectClass, nsnull)) { *rval = INT_TO_JSVAL(nsInstall::INVALID_ARGUMENTS); return JS_TRUE; } folder = (nsInstallFolder*)JS_GetPrivate(cx, jsObj); if( argc > 1 && !ConvertJSValToBool(&bRecursive, cx, argv[1])) { JS_ReportError(cx, "2nd parameter needs to be a Boolean value"); return JS_TRUE; } if(!folder || NS_OK != nativeThis->FileOpDirRemove(*folder, bRecursive, &nativeRet)) { return JS_TRUE; } *rval = INT_TO_JSVAL(nativeRet); return JS_TRUE; }
/* @bookmark_class.setProperty */ static JSBool bookmark_set_property(JSContext *ctx, JSObject *obj, jsid id, JSBool strict, jsval *vp) { struct bookmark *bookmark; jsid tmp; unsigned char *title = NULL; unsigned char *url = NULL; int ok; /* This can be called if @obj if not itself an instance of the * appropriate class but has one in its prototype chain. Fail * such calls. */ if (!JS_InstanceOf(ctx, obj, (JSClass *) &bookmark_class, NULL)) return JS_FALSE; bookmark = JS_GetInstancePrivate(ctx, obj, (JSClass *) &bookmark_class, NULL); if (!bookmark) return JS_FALSE; if (!JSID_IS_INT(id)) return JS_FALSE; switch (JSID_TO_INT(id)) { case BOOKMARK_TITLE: if (!JS_ValueToId(ctx, *vp, &tmp)) return JS_FALSE; if (!jsval_to_bookmark_string(ctx, tmp, &title)) return JS_FALSE; break; case BOOKMARK_URL: if (!JS_ValueToId(ctx, *vp, &tmp)) return JS_FALSE; if (!jsval_to_bookmark_string(ctx, tmp, &url)) return JS_FALSE; break; default: /* Unrecognized integer property ID; someone is using * the object as an array. SMJS builtin classes (e.g. * js_RegExpClass) just return JS_TRUE in this case. * Do the same here. */ return JS_TRUE; } ok = update_bookmark(bookmark, get_cp_index("UTF-8"), title, url); mem_free_if(title); mem_free_if(url); return ok ? JS_TRUE : JS_FALSE; }
bool appendSpecialDBObject( Convertor * c , BSONObjBuilder& b , const string& name , JSObject * o ){ if ( JS_InstanceOf( c->_context , o , &object_id_class , 0 ) ){ OID oid; oid.init( c->getString( o , "str" ) ); b.append( name.c_str() , oid ); return true; } if ( JS_InstanceOf( c->_context , o , &minkey_class , 0 ) ){ b.appendMinKey( name.c_str() ); return true; } if ( JS_InstanceOf( c->_context , o , &maxkey_class , 0 ) ){ b.appendMaxKey( name.c_str() ); return true; } if ( JS_InstanceOf( c->_context , o , ×tamp_class , 0 ) ){ b.appendTimestamp( name.c_str() , (unsigned long long)c->getNumber( o , "t" ) , (unsigned int )c->getNumber( o , "i" ) ); return true; } { jsdouble d = js_DateGetMsecSinceEpoch( c->_context , o ); if ( d ){ b.appendDate( name.c_str() , (unsigned long long)d ); return true; } } return false; }
static JSBool location_set_property_href(JSContext *ctx, JSHandleObject hobj, JSHandleId hid, JSBool strict, JSMutableHandleValue hvp) { ELINKS_CAST_PROP_PARAMS JSObject *parent_win; /* instance of @window_class */ struct view_state *vs; struct document_view *doc_view; /* This can be called if @obj if not itself an instance of the * appropriate class but has one in its prototype chain. Fail * such calls. */ if (!JS_InstanceOf(ctx, obj, &location_class, NULL)) return JS_FALSE; parent_win = JS_GetParent(obj); assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL)); if_assert_failed return JS_FALSE; vs = JS_GetInstancePrivate(ctx, parent_win, &window_class, NULL); doc_view = vs->doc_view; location_goto(doc_view, jsval_to_string(ctx, vp)); return JS_TRUE; }
JSBool g2_register_event(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval) { LPSTR callback = NULL; LPTSTR domEvent = NULL; JSObject * target = NULL; JS_BeginRequest(cx); if(!JS_ConvertArguments(cx, argc, argv, "o W/ s", &target, &domEvent, &callback)) { JS_ReportError(cx, "Error parsing arguments in registerevent."); JS_EndRequest(cx); return JS_FALSE; } if(!JS_InstanceOf(cx, target, &lDOMNodeClass, NULL)) { JS_ReportWarning(cx, "Cannot register an event for anything besides a DOM node"); JS_EndRequest(cx); return JS_TRUE; } PrivateData * mPrivate = (PrivateData*)JS_GetPrivate(cx, obj); nsIDOMNode * mNode = (nsIDOMNode*)JS_GetPrivate(cx, target); DOMEventListener * newListener = new DOMEventListener(mPrivate, callback); newListener->AddRef(); nsCOMPtr<nsIDOMEventTarget> realTarget = do_QueryInterface(mNode); nsDependentString typeString(domEvent); EnterCriticalSection(&domStateLock); nsresult rv = realTarget->AddEventListener(typeString, newListener, PR_FALSE); LeaveCriticalSection(&domStateLock); if(NS_SUCCEEDED(rv)) { newListener->next = mPrivate->mDOMListener; mPrivate->mDOMListener = newListener; mPrivate->nDOMListeners++; *rval = JSVAL_TRUE; } else { newListener->Release(); *rval = JSVAL_FALSE; } return JS_TRUE; }
event_receiver_handle_event(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval) { JSObject *eventObj; if (argc != 1) return JS_TRUE; if (!JSVAL_IS_OBJECT(argv[0]) && !JS_ConvertValue(cx, argv[0], JSTYPE_OBJECT, &argv[0])) return JS_FALSE; eventObj = JSVAL_TO_OBJECT(argv[0]); if (!JS_InstanceOf(cx, eventObj, &lm_event_class, argv)) return JS_FALSE; return lm_HandleEvent(cx, obj, eventObj, JSVAL_NULL, rval); }
static JSBool InitEventObject(JSContext *cx, JSObject *obj, JSEvent *pEvent) { MochaDecoder *decoder; XP_ASSERT(JS_InstanceOf(cx, obj, &lm_event_class, NULL)); if (!JS_SetPrivate(cx, obj, pEvent)) { JS_free(cx, pEvent); return JS_FALSE; } decoder = JS_GetPrivate(cx, JS_GetGlobalObject(cx)); pEvent->decoder = HOLD_BACK_COUNT(decoder); pEvent->saved = JS_TRUE; return JS_TRUE; }