Index: libadblockplus-android/jni/JniFilterEngine.cpp |
diff --git a/libadblockplus-android/jni/JniFilterEngine.cpp b/libadblockplus-android/jni/JniFilterEngine.cpp |
index f9981f024922c74874f6a70c096c21cb23dc8e6e..f568279a8b26f307698e7233eb09809b376440d0 100644 |
--- a/libadblockplus-android/jni/JniFilterEngine.cpp |
+++ b/libadblockplus-android/jni/JniFilterEngine.cpp |
@@ -44,12 +44,31 @@ static AdblockPlus::FilterEngine::ContentType ConvertContentType(JNIEnv *env, |
return AdblockPlus::FilterEngine::StringToContentType(value); |
} |
-static jlong JNICALL JniCtor(JNIEnv* env, jclass clazz, jlong enginePtr) |
+static jlong JNICALL JniCtor(JNIEnv* env, jclass clazz, jlong jsEnginePtr, jlong isAllowedConnectionCallbackPtr) |
{ |
try |
{ |
- AdblockPlus::JsEnginePtr& jsEngine = *JniLongToTypePtr<AdblockPlus::JsEnginePtr>(enginePtr); |
- return JniPtrToLong(new AdblockPlus::FilterEngine(jsEngine)); |
+ AdblockPlus::JsEnginePtr& jsEngine = *JniLongToTypePtr<AdblockPlus::JsEnginePtr>(jsEnginePtr); |
+ AdblockPlus::FilterEnginePtr filterEngine; |
+ |
+ if (isAllowedConnectionCallbackPtr != 0) |
+ { |
+ AdblockPlus::FilterEngine::CreateParameters createParameters; |
+ JniIsAllowedConnectionTypeCallback* callback = |
+ JniLongToTypePtr<JniIsAllowedConnectionTypeCallback>(isAllowedConnectionCallbackPtr); |
+ |
+ AdblockPlus::FilterEngine::IsConnectionAllowedCallback cppCallback = |
+ std::bind(&JniIsAllowedConnectionTypeCallback::Callback, callback, std::placeholders::_1); |
+ createParameters.isConnectionAllowed = cppCallback; |
+ |
+ filterEngine = AdblockPlus::FilterEngine::Create(jsEngine, createParameters); |
+ } |
+ else |
+ { |
+ filterEngine = AdblockPlus::FilterEngine::Create(jsEngine); |
+ } |
+ |
+ return JniPtrToLong(filterEngine.get()); |
} |
CATCH_THROW_AND_RETURN(env, 0) |
} |
@@ -434,9 +453,44 @@ static jstring JNICALL JniGetHostFromURL(JNIEnv* env, jclass clazz, jlong ptr, j |
CATCH_THROW_AND_RETURN(env, 0) |
} |
+static void JNICALL JniSetAllowedConnectionType(JNIEnv* env, jclass clazz, jlong ptr, jstring jvalue) |
+{ |
+ AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine>(ptr); |
+ |
+ std::string* value = NULL; |
+ if (jvalue != NULL) |
+ { |
+ std::string stdValue = JniJavaToStdString(env, jvalue); |
+ value = &stdValue; |
+ } |
+ |
+ try |
+ { |
+ engine->SetAllowedConnectionType(value); |
+ } |
+ CATCH_AND_THROW(env) |
+} |
+ |
+static jstring JNICALL JniGetAllowedConnectionType(JNIEnv* env, jclass clazz, jlong ptr) |
+{ |
+ try |
+ { |
+ AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine>(ptr); |
+ std::unique_ptr<std::string> value = engine->GetAllowedConnectionType(); |
+ |
+ if (value == NULL) |
+ { |
+ return NULL; |
+ } |
+ |
+ return JniStdStringToJava(env, *value.get()); |
+ } |
+ CATCH_THROW_AND_RETURN(env, 0) |
+} |
+ |
static JNINativeMethod methods[] = |
{ |
- { (char*)"ctor", (char*)"(J)J", (void*)JniCtor }, |
+ { (char*)"ctor", (char*)"(JJ)J", (void*)JniCtor }, |
{ (char*)"isFirstRun", (char*)"(J)Z", (void*)JniIsFirstRun }, |
{ (char*)"getFilter", (char*)"(JLjava/lang/String;)" TYP("Filter"), (void*)JniGetFilter }, |
{ (char*)"getListedFilters", (char*)"(J)Ljava/util/List;", (void*)JniGetListedFilters }, |
@@ -459,6 +513,8 @@ static JNINativeMethod methods[] = |
{ (char*)"getPref", (char*)"(JLjava/lang/String;)" TYP("JsValue"), (void*)JniGetPref }, |
{ (char*)"setPref", (char*)"(JLjava/lang/String;J)V", (void*)JniSetPref }, |
{ (char*)"getHostFromURL", (char*)"(JLjava/lang/String;)Ljava/lang/String;", (void*)JniGetHostFromURL }, |
+ { (char*)"setAllowedConnectionType", (char*)"(JLjava/lang/String;)V", (void*)JniSetAllowedConnectionType }, |
+ { (char*)"getAllowedConnectionType", (char*)"(J)Ljava/lang/String;", (void*)JniGetAllowedConnectionType }, |
{ (char*)"dtor", (char*)"(J)V", (void*)JniDtor } |
}; |