| Left: | ||
| Right: | 
| OLD | NEW | 
|---|---|
| (Empty) | |
| 1 /* | |
| 2 * This file is part of Adblock Plus <http://adblockplus.org/>, | |
| 3 * Copyright (C) 2006-2014 Eyeo GmbH | |
| 4 * | |
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | |
| 6 * it under the terms of the GNU General Public License version 3 as | |
| 7 * published by the Free Software Foundation. | |
| 8 * | |
| 9 * Adblock Plus is distributed in the hope that it will be useful, | |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 12 * GNU General Public License for more details. | |
| 13 * | |
| 14 * You should have received a copy of the GNU General Public License | |
| 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | |
| 16 */ | |
| 17 | |
| 18 #include <AdblockPlus.h> | |
| 19 #include "Utils.h" | |
| 20 #include "JniCallbacks.h" | |
| 21 | |
| 22 static void TransformAppInfo(JNIEnv* env, jobject jAppInfo, AdblockPlus::AppInfo & appInfo) | |
| 23 { | |
| 24 jclass clazz = env->GetObjectClass(jAppInfo); | |
| 25 | |
| 26 appInfo.application = AdblockPlus::Android::JniGetStringField(env, clazz, jApp Info, "application"); | |
| 27 appInfo.applicationVersion = AdblockPlus::Android::JniGetStringField(env, claz z, jAppInfo, "applicationVersion"); | |
| 28 appInfo.id = AdblockPlus::Android::JniGetStringField(env, clazz, jAppInfo, "id "); | |
| 29 appInfo.locale = AdblockPlus::Android::JniGetStringField(env, clazz, jAppInfo, "locale"); | |
| 30 appInfo.name = AdblockPlus::Android::JniGetStringField(env, clazz, jAppInfo, " name"); | |
| 31 appInfo.version = AdblockPlus::Android::JniGetStringField(env, clazz, jAppInfo , "version"); | |
| 32 | |
| 33 appInfo.developmentBuild = AdblockPlus::Android::JniGetBooleanField(env, clazz , jAppInfo, "developmentBuild"); | |
| 34 } | |
| 35 | |
| 36 static jlong JNICALL JniCtor(JNIEnv* env, jclass clazz, jobject jAppInfo) | |
| 37 { | |
| 38 AdblockPlus::AppInfo appInfo; | |
| 39 | |
| 40 TransformAppInfo(env, jAppInfo, appInfo); | |
| 41 | |
| 42 TRY | |
| 43 { | |
| 44 return AdblockPlus::Android::JniPtr2Long(new AdblockPlus::JsEnginePtr(Adbloc kPlus::JsEngine::New(appInfo))); | |
| 45 } | |
| 46 CATCH_THROW_AND_RETURN(env, 0) | |
| 47 } | |
| 48 | |
| 49 static void JNICALL JniDtor(JNIEnv* env, jclass clazz, jlong ptr) | |
| 50 { | |
| 51 delete AdblockPlus::Android::JniLong2TypePtr<AdblockPlus::JsEnginePtr>(ptr); | |
| 52 } | |
| 53 | |
| 54 static void JNICALL JniSetEventCallback(JNIEnv* env, jclass clazz, jlong ptr, js tring jEventName, jlong jCallbackPtr) | |
| 55 { | |
| 56 AdblockPlus::JsEnginePtr& engine = *AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::JsEnginePtr>(ptr); | |
| 57 | |
| 58 AdblockPlus::Android::JniEventCallback* callback = AdblockPlus::Android::JniLo ng2TypePtr<AdblockPlus::Android::JniEventCallback>( | |
| 59 jCallbackPtr); | |
| 60 std::string eventName = AdblockPlus::Android::JniJava2StdString(env, jEventNam e); | |
| 61 AdblockPlus::JsEngine::EventCallback eCallback = std::tr1::bind(&AdblockPlus:: Android::JniEventCallback::Callback, callback, | |
| 62 std::tr1::placeholders::_1); | |
| 63 | |
| 64 TRY | |
| 65 { | |
| 66 engine->SetEventCallback(eventName, eCallback); | |
| 67 } | |
| 68 CATCH_AND_THROW(env) | |
| 69 } | |
| 70 | |
| 71 static void JNICALL JniRemoveEventCallback(JNIEnv* env, jclass clazz, jlong ptr, jstring jEventName) | |
| 72 { | |
| 73 AdblockPlus::JsEnginePtr& engine = *AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::JsEnginePtr>(ptr); | |
| 74 | |
| 75 std::string eventName = AdblockPlus::Android::JniJava2StdString(env, jEventNam e); | |
| 76 | |
| 77 TRY | |
| 78 { | |
| 79 engine->RemoveEventCallback(eventName); | |
| 80 } | |
| 81 CATCH_AND_THROW(env) | |
| 82 } | |
| 83 | |
| 84 static jobject JNICALL JniEvaluate(JNIEnv* env, jclass clazz, jlong ptr, jstring jSource, jstring jFilename) | |
| 85 { | |
| 86 AdblockPlus::JsEnginePtr& engine = *AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::JsEnginePtr>(ptr); | |
| 87 | |
| 88 std::string source = AdblockPlus::Android::JniJava2StdString(env, jSource); | |
| 89 std::string filename = AdblockPlus::Android::JniJava2StdString(env, jFilename) ; | |
| 90 | |
| 91 TRY | |
| 92 { | |
| 93 AdblockPlus::JsValuePtr jsValue = engine->Evaluate(source, filename); | |
| 94 return AdblockPlus::Android::NewJniJsValue(env, jsValue); | |
| 95 } | |
| 96 CATCH_THROW_AND_RETURN(env, 0) | |
| 97 } | |
| 98 | |
| 99 static void JNICALL JniTriggerEvent(JNIEnv* env, jclass clazz, jlong ptr, jstrin g jEventName, jarray jJsPtrs) | |
| 100 { | |
| 101 AdblockPlus::JsEnginePtr& engine = *AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::JsEnginePtr>(ptr); | |
| 102 std::string eventName = AdblockPlus::Android::JniJava2StdString(env, jEventNam e); | |
| 103 AdblockPlus::JsValueList args; | |
| 104 | |
| 105 if (jJsPtrs) | |
| 106 { | |
| 107 jlong* ptrs = (jlong*)env->GetPrimitiveArrayCritical(jJsPtrs, 0); | |
| 108 | |
| 109 jsize length = env->GetArrayLength(jJsPtrs); | |
| 110 | |
| 111 for (jsize i = 0; i < length; i++) | |
| 112 { | |
| 113 args.push_back(AdblockPlus::Android::JniGetJsValuePtr(ptrs[i])); | |
| 114 } | |
| 115 | |
| 116 env->ReleasePrimitiveArrayCritical(jJsPtrs, ptrs, JNI_ABORT); | |
| 117 } | |
| 118 | |
| 119 TRY | |
| 120 { | |
| 121 engine->TriggerEvent(eventName, args); | |
| 122 } | |
| 123 CATCH_AND_THROW(env) | |
| 124 } | |
| 125 | |
| 126 static void JNICALL JniSetDefaultFileSystem(JNIEnv* env, jclass clazz, jlong ptr , jstring jBasePath) | |
| 127 { | |
| 128 AdblockPlus::JsEnginePtr& engine = *AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::JsEnginePtr>(ptr); | |
| 129 | |
| 130 TRY | |
| 131 { | |
| 132 AdblockPlus::FileSystemPtr fileSystem(new AdblockPlus::DefaultFileSystem()); | |
| 133 | |
| 134 std::string basePath = AdblockPlus::Android::JniJava2StdString(env, jBasePat h); | |
| 135 reinterpret_cast<AdblockPlus::DefaultFileSystem*>(fileSystem.get())->SetBase Path(basePath); | |
| 136 | |
| 137 engine->SetFileSystem(fileSystem); | |
| 138 } | |
| 139 CATCH_AND_THROW(env) | |
| 140 } | |
| 141 | |
| 142 static void JNICALL JniSetDefaultWebRequest(JNIEnv* env, jclass clazz, jlong ptr ) | |
| 143 { | |
| 144 AdblockPlus::JsEnginePtr& engine = *AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::JsEnginePtr>(ptr); | |
| 145 | |
| 146 TRY | |
| 147 { | |
| 148 AdblockPlus::WebRequestPtr webRequest(new AdblockPlus::DefaultWebRequest()); | |
| 149 | |
| 150 engine->SetWebRequest(webRequest); | |
| 151 } | |
| 152 CATCH_AND_THROW(env) | |
| 153 } | |
| 154 | |
| 155 static void JNICALL JniSetDefaultLogSystem(JNIEnv* env, jclass clazz, jlong ptr) | |
| 156 { | |
| 157 AdblockPlus::JsEnginePtr& engine = *AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::JsEnginePtr>(ptr); | |
| 158 | |
| 159 TRY | |
| 160 { | |
| 161 AdblockPlus::LogSystemPtr logSystem(new AdblockPlus::DefaultLogSystem()); | |
| 162 | |
| 163 engine->SetLogSystem(logSystem); | |
| 164 } | |
| 165 CATCH_AND_THROW(env) | |
| 166 } | |
| 167 | |
| 168 static void JNICALL JniSetLogSystem(JNIEnv* env, jclass clazz, jlong ptr, jlong logSystemPtr) | |
| 169 { | |
| 170 AdblockPlus::JsEnginePtr& engine = *AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::JsEnginePtr>(ptr); | |
| 171 | |
| 172 TRY | |
| 173 { | |
| 174 AdblockPlus::LogSystemPtr logSystem(AdblockPlus::Android::JniLong2TypePtr<Ad blockPlus::Android::JniLogSystemCallback>(logSystemPtr)); | |
| 175 | |
| 176 engine->SetLogSystem(logSystem); | |
| 177 } | |
| 178 CATCH_AND_THROW(env) | |
| 179 } | |
| 180 | |
| 181 static void JNICALL JniSetWebRequest(JNIEnv* env, jclass clazz, jlong ptr, jlong webRequestPtr) | |
| 182 { | |
| 183 AdblockPlus::JsEnginePtr& engine = *AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::JsEnginePtr>(ptr); | |
| 184 | |
| 185 TRY | |
| 186 { | |
| 187 AdblockPlus::WebRequestPtr& webRequest = *AdblockPlus::Android::JniLong2Type Ptr<AdblockPlus::WebRequestPtr>(webRequestPtr); | |
| 188 | |
| 189 engine->SetWebRequest(webRequest); | |
| 190 } | |
| 191 CATCH_AND_THROW(env) | |
| 192 } | |
| 193 | |
| 194 static jobject JNICALL JniNewLongValue(JNIEnv* env, jclass clazz, jlong ptr, jlo ng value) | |
| 195 { | |
| 196 AdblockPlus::JsEnginePtr& engine = *AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::JsEnginePtr>(ptr); | |
| 197 | |
| 198 TRY | |
| 199 { | |
| 200 AdblockPlus::JsValuePtr jsValue = engine->NewValue(static_cast<int64_t>(valu e)); | |
| 201 return AdblockPlus::Android::NewJniJsValue(env, jsValue); | |
| 202 } | |
| 203 CATCH_THROW_AND_RETURN(env, 0) | |
| 204 } | |
| 205 | |
| 206 static jobject JNICALL JniNewBooleanValue(JNIEnv* env, jclass clazz, jlong ptr, jboolean value) | |
| 207 { | |
| 208 AdblockPlus::JsEnginePtr& engine = *AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::JsEnginePtr>(ptr); | |
| 209 | |
| 210 TRY | |
| 211 { | |
| 212 AdblockPlus::JsValuePtr jsValue = engine->NewValue(value == JNI_TRUE ? true : false); | |
| 213 return AdblockPlus::Android::NewJniJsValue(env, jsValue); | |
| 214 } | |
| 215 CATCH_THROW_AND_RETURN(env, 0) | |
| 216 } | |
| 217 | |
| 218 static jobject JNICALL JniNewStringValue(JNIEnv* env, jclass clazz, jlong ptr, j string value) | |
| 219 { | |
| 220 AdblockPlus::JsEnginePtr& engine = *AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::JsEnginePtr>(ptr); | |
| 221 | |
| 222 TRY | |
| 223 { | |
| 224 std::string strValue = AdblockPlus::Android::JniJava2StdString(env, value); | |
| 225 AdblockPlus::JsValuePtr jsValue = engine->NewValue(strValue); | |
| 226 return AdblockPlus::Android::NewJniJsValue(env, jsValue); | |
| 227 } | |
| 228 CATCH_THROW_AND_RETURN(env, 0) | |
| 229 } | |
| 230 | |
| 231 //JsValuePtr NewObject(); | |
| 
 
Felix Dahlke
2014/03/28 08:29:00
Old code? Not a fan of leaving commented out code
 
René Jeschke
2014/03/28 10:59:15
Not old code, but 'not-yet-implemented' functional
 
Felix Dahlke
2014/03/28 11:27:18
No that's perfectly fine, would be helpful to add
 
 | |
| 232 //JsValuePtr NewCallback(v8::InvocationCallback callback); | |
| 233 //static JsEnginePtr FromArguments(const v8::Arguments& arguments); | |
| 234 //JsValueList ConvertArguments(const v8::Arguments& arguments); | |
| 235 | |
| 236 static JNINativeMethod methods[] = | |
| 237 { | |
| 238 { (char*)"ctor", (char*)"(" TYP("AppInfo") ")J", (void*)JniCtor }, | |
| 239 { (char*)"dtor", (char*)"(J)V", (void*)JniDtor }, | |
| 240 | |
| 241 { (char*)"setEventCallback", (char*)"(JLjava/lang/String;J)V", (void*)JniSetEven tCallback }, | |
| 242 { (char*)"removeEventCallback", (char*)"(JLjava/lang/String;)V", (void*)JniRemov eEventCallback }, | |
| 243 { (char*)"triggerEvent", (char*)"(JLjava/lang/String;[J)V", (void*)JniTriggerEve nt }, | |
| 244 | |
| 245 { (char*)"evaluate", (char*)"(JLjava/lang/String;Ljava/lang/String;)" TYP("JsVal ue"), (void*)JniEvaluate }, | |
| 246 | |
| 247 { (char*)"setDefaultFileSystem", (char*)"(JLjava/lang/String;)V", (void*)JniSetD efaultFileSystem }, | |
| 248 { (char*)"setLogSystem", (char*)"(JJ)V", (void*)JniSetLogSystem }, | |
| 249 { (char*)"setDefaultLogSystem", (char*)"(J)V", (void*)JniSetDefaultLogSystem }, | |
| 250 { (char*)"setWebRequest", (char*)"(JJ)V", (void*)JniSetWebRequest }, | |
| 251 { (char*)"setDefaultWebRequest", (char*)"(J)V", (void*)JniSetDefaultWebRequest } , | |
| 252 | |
| 253 { (char*)"newValue", (char*)"(JJ)"TYP("JsValue"), (void*)JniNewLongValue }, | |
| 254 { (char*)"newValue", (char*)"(JZ)"TYP("JsValue"), (void*)JniNewBooleanValue }, | |
| 255 { (char*)"newValue", (char*)"(JLjava/lang/String;)"TYP("JsValue"), (void*)JniNew StringValue }, | |
| 256 | |
| 257 }; | |
| 258 | |
| 259 extern "C" JNIEXPORT void JNICALL Java_org_adblockplus_android_api_JsEngine_regi sterNatives(JNIEnv *env, jclass clazz) | |
| 260 { | |
| 261 env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0])); | |
| 262 } | |
| OLD | NEW |