static jobject JNICALL JniGetProperty(JNIEnv* env, jclass clazz, jlong ptr, jstring name) { try { return NewJniJsValue(env, JniGetJsValue(ptr)->GetProperty(JniJavaToStdString(env, name))); } CATCH_THROW_AND_RETURN(env, 0) }
static jobject JNICALL JniNewBooleanValue(JNIEnv* env, jclass clazz, jlong ptr, jboolean value) { AdblockPlus::JsEnginePtr& engine = *JniLongToTypePtr<AdblockPlus::JsEnginePtr>(ptr); try { AdblockPlus::JsValuePtr jsValue = engine->NewValue(value == JNI_TRUE ? true : false); return NewJniJsValue(env, jsValue); } CATCH_THROW_AND_RETURN(env, 0) }
static jobject JNICALL JniNewLongValue(JNIEnv* env, jclass clazz, jlong ptr, jlong value) { AdblockPlus::JsEnginePtr& engine = *JniLongToTypePtr<AdblockPlus::JsEnginePtr>(ptr); try { AdblockPlus::JsValuePtr jsValue = engine->NewValue(static_cast<int64_t>(value)); return NewJniJsValue(env, jsValue); } CATCH_THROW_AND_RETURN(env, 0) }
static jobject JNICALL JniGetPref(JNIEnv* env, jclass clazz, jlong ptr, jstring jPref) { AdblockPlus::FilterEngine& engine = GetFilterEngineRef(ptr); std::string pref = JniJavaToStdString(env, jPref); try { return NewJniJsValue(env, engine.GetPref(pref)); } CATCH_THROW_AND_RETURN(env, 0) }
static jobject JNICALL JniNewStringValue(JNIEnv* env, jclass clazz, jlong ptr, jstring value) { AdblockPlus::JsEnginePtr& engine = *JniLongToTypePtr<AdblockPlus::JsEnginePtr>(ptr); try { std::string strValue = JniJavaToStdString(env, value); AdblockPlus::JsValuePtr jsValue = engine->NewValue(strValue); return NewJniJsValue(env, jsValue); } CATCH_THROW_AND_RETURN(env, 0) }
jobject JniJsValueListToArrayList(JNIEnv* env, AdblockPlus::JsValueList& list) { jobject arrayList = NewJniArrayList(env); for (AdblockPlus::JsValueList::iterator it = list.begin(), end = list.end(); it != end; ++it) { JniAddObjectToList(env, arrayList, *JniLocalReference<jobject>(env, NewJniJsValue(env, *it))); } return arrayList; }
static jobject JNICALL JniEvaluate(JNIEnv* env, jclass clazz, jlong ptr, jstring jSource, jstring jFilename) { AdblockPlus::JsEnginePtr& engine = *JniLongToTypePtr<AdblockPlus::JsEnginePtr>(ptr); std::string source = JniJavaToStdString(env, jSource); std::string filename = JniJavaToStdString(env, jFilename); try { AdblockPlus::JsValuePtr jsValue = engine->Evaluate(source, filename); return NewJniJsValue(env, jsValue); } CATCH_THROW_AND_RETURN(env, 0) }
void JniFilterChangeCallback::Callback(const std::string& arg, const AdblockPlus::JsValuePtr jsValue) { JNIEnvAcquire env(GetJavaVM()); jclass clazz = env->GetObjectClass(GetCallbackObject()); jmethodID method = env->GetMethodID(clazz, "filterChangeCallback", "(Ljava/lang/String;" TYP("JsValue") ")V"); if (method) { jstring jArg = env->NewStringUTF(arg.c_str()); jobject jJsValue = NewJniJsValue(*env, jsValue, jsValueClass->Get()); env->CallVoidMethod(GetCallbackObject(), method, jArg, jJsValue); } CheckAndLogJavaException(*env); }