LEFT | RIGHT |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2015 Eyeo GmbH | 3 * Copyright (C) 2006-2015 Eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 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 | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 16 matching lines...) Expand all Loading... |
27 { | 27 { |
28 JniAddObjectToList(env, list, NewJniSubscription(env, *it)); | 28 JniAddObjectToList(env, list, NewJniSubscription(env, *it)); |
29 } | 29 } |
30 | 30 |
31 return list; | 31 return list; |
32 } | 32 } |
33 | 33 |
34 static AdblockPlus::FilterEngine::ContentType ConvertContentType(JNIEnv *env, | 34 static AdblockPlus::FilterEngine::ContentType ConvertContentType(JNIEnv *env, |
35 jobject jContentType) | 35 jobject jContentType) |
36 { | 36 { |
37 jclass contentTypeClass = env->GetObjectClass(jContentType); | 37 JniLocalReference<jclass> contentTypeClass(env, |
38 jmethodID nameMethod = env->GetMethodID(contentTypeClass, "name", | 38 env->GetObjectClass(jContentType)); |
39 "()Ljava/lang/String;"); | 39 jmethodID nameMethod = env->GetMethodID(*contentTypeClass, "name", |
40 jstring jValue = (jstring) env->CallObjectMethod(jContentType, nameMethod); | 40 "()Ljava/lang/String;"); |
41 const std::string value = JniJavaToStdString(env, jValue); | 41 JniLocalReference<jstring> jValue(env, |
| 42 (jstring) env->CallObjectMethod(jContentType, nameMethod)); |
| 43 const std::string value = JniJavaToStdString(env, *jValue); |
42 return AdblockPlus::FilterEngine::StringToContentType(value); | 44 return AdblockPlus::FilterEngine::StringToContentType(value); |
43 } | 45 } |
44 | 46 |
45 static jlong JNICALL JniCtor(JNIEnv* env, jclass clazz, jlong enginePtr) | 47 static jlong JNICALL JniCtor(JNIEnv* env, jclass clazz, jlong enginePtr) |
46 { | 48 { |
47 try | 49 try |
48 { | 50 { |
49 AdblockPlus::JsEnginePtr& jsEngine = *JniLongToTypePtr<AdblockPlus::JsEngine
Ptr>(enginePtr); | 51 AdblockPlus::JsEnginePtr& jsEngine = *JniLongToTypePtr<AdblockPlus::JsEngine
Ptr>(enginePtr); |
50 return JniPtrToLong(new AdblockPlus::FilterEngine(jsEngine)); | 52 return JniPtrToLong(new AdblockPlus::FilterEngine(jsEngine)); |
51 } | 53 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine
>(ptr); | 89 AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine
>(ptr); |
88 | 90 |
89 try | 91 try |
90 { | 92 { |
91 std::vector<AdblockPlus::FilterPtr> filters = engine->GetListedFilters(); | 93 std::vector<AdblockPlus::FilterPtr> filters = engine->GetListedFilters(); |
92 | 94 |
93 jobject list = NewJniArrayList(env); | 95 jobject list = NewJniArrayList(env); |
94 | 96 |
95 for (std::vector<AdblockPlus::FilterPtr>::iterator it = filters.begin(), end
= filters.end(); it != end; it++) | 97 for (std::vector<AdblockPlus::FilterPtr>::iterator it = filters.begin(), end
= filters.end(); it != end; it++) |
96 { | 98 { |
97 JniAddObjectToList(env, list, NewJniFilter(env, *it)); | 99 JniAddObjectToList(env, list, *JniLocalReference<jobject>(env, NewJniFilte
r(env, *it))); |
98 } | 100 } |
99 | 101 |
100 return list; | 102 return list; |
101 } | 103 } |
102 CATCH_THROW_AND_RETURN(env, 0); | 104 CATCH_THROW_AND_RETURN(env, 0); |
103 } | 105 } |
104 | 106 |
105 static jobject JNICALL JniGetSubscription(JNIEnv* env, jclass clazz, jlong ptr,
jstring jUrl) | 107 static jobject JNICALL JniGetSubscription(JNIEnv* env, jclass clazz, jlong ptr,
jstring jUrl) |
106 { | 108 { |
107 AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine
>(ptr); | 109 AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine
>(ptr); |
108 std::string url = JniJavaToStdString(env, jUrl); | 110 std::string url = JniJavaToStdString(env, jUrl); |
109 | 111 |
110 try | 112 try |
111 { | 113 { |
112 AdblockPlus::SubscriptionPtr subscription = engine->GetSubscription(url); | 114 AdblockPlus::SubscriptionPtr subscription = engine->GetSubscription(url); |
113 | 115 |
114 return NewJniSubscription(env, subscription); | 116 return NewJniSubscription(env, subscription); |
115 } | 117 } |
116 CATCH_THROW_AND_RETURN(env, 0); | 118 CATCH_THROW_AND_RETURN(env, 0); |
117 } | 119 } |
118 | 120 |
119 static jobject JNICALL JniGetNotificationToShow(JNIEnv* env, jclass clazz, jlong
ptr, jstring jUrl) | 121 static jobject JNICALL JniGetNextNotificationToShow(JNIEnv* env, jclass clazz, j
long ptr, jstring jUrl) |
120 { | 122 { |
121 AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine
>(ptr); | 123 AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine
>(ptr); |
122 std::string url; | 124 std::string url = JniJavaToStdString(env, jUrl); |
123 if (jUrl) | |
124 { | |
125 url = JniJavaToStdString(env, jUrl); | |
126 } | |
127 | 125 |
128 try | 126 try |
129 { | 127 { |
130 AdblockPlus::NotificationPtr notification = engine->GetNextNotificationToSho
w(url); | 128 AdblockPlus::NotificationPtr notification = engine->GetNextNotificationToSho
w(url); |
131 | 129 |
132 return NewJniNotification(env, notification); | 130 return NewJniNotification(env, notification); |
133 } | 131 } |
134 CATCH_THROW_AND_RETURN(env, 0); | 132 CATCH_THROW_AND_RETURN(env, 0); |
135 } | 133 } |
136 | 134 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 { | 191 { |
194 AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine
>(ptr); | 192 AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine
>(ptr); |
195 | 193 |
196 try | 194 try |
197 { | 195 { |
198 engine->RemoveFilterChangeCallback(); | 196 engine->RemoveFilterChangeCallback(); |
199 } | 197 } |
200 CATCH_AND_THROW(env) | 198 CATCH_AND_THROW(env) |
201 } | 199 } |
202 | 200 |
203 static void JNICALL JniSetFilterChangeCallback(JNIEnv* env, jclass clazz, jlong
ptr, jlong filterPtr) | 201 static void JNICALL JniSetFilterChangeCallback(JNIEnv* env, jclass clazz, |
204 { | 202 jlong ptr, jlong filterPtr) |
205 AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine
>(ptr); | 203 { |
206 JniFilterChangeCallback* callback = JniLongToTypePtr<JniFilterChangeCallback>(
filterPtr); | 204 AdblockPlus::FilterEngine* engine = |
| 205 JniLongToTypePtr<AdblockPlus::FilterEngine>(ptr); |
| 206 JniFilterChangeCallback* callback = JniLongToTypePtr<JniFilterChangeCallback>( |
| 207 filterPtr); |
207 | 208 |
208 AdblockPlus::FilterEngine::FilterChangeCallback filterCallback = | 209 AdblockPlus::FilterEngine::FilterChangeCallback filterCallback = |
209 std::tr1::bind(&JniFilterChangeCallback::Callback, callback, std::tr1::pla
ceholders::_1, std::tr1::placeholders::_2); | 210 std::tr1::bind(&JniFilterChangeCallback::Callback, callback, |
| 211 std::tr1::placeholders::_1, std::tr1::placeholders::_2); |
210 | 212 |
211 try | 213 try |
212 { | 214 { |
213 engine->SetFilterChangeCallback(filterCallback); | 215 engine->SetFilterChangeCallback(filterCallback); |
214 } | 216 } |
215 CATCH_AND_THROW(env) | 217 CATCH_AND_THROW(env) |
216 } | 218 } |
217 | 219 |
218 static void JNICALL JniForceUpdateCheck(JNIEnv* env, jclass clazz, jlong ptr, jl
ong updaterPtr) | 220 static void JNICALL JniForceUpdateCheck(JNIEnv* env, jclass clazz, jlong ptr, jl
ong updaterPtr) |
219 { | 221 { |
(...skipping 11 matching lines...) Expand all Loading... |
231 std::tr1::placeholders::_1); | 233 std::tr1::placeholders::_1); |
232 } | 234 } |
233 | 235 |
234 try | 236 try |
235 { | 237 { |
236 engine->ForceUpdateCheck(updateCheckDoneCallback); | 238 engine->ForceUpdateCheck(updateCheckDoneCallback); |
237 } | 239 } |
238 CATCH_AND_THROW(env) | 240 CATCH_AND_THROW(env) |
239 } | 241 } |
240 | 242 |
241 static jobject JNICALL JniGetElementHidingSelectors(JNIEnv* env, jclass clazz, j
long ptr, jstring jDomain) | 243 static jobject JNICALL JniGetElementHidingSelectors(JNIEnv* env, jclass clazz, |
242 { | 244 jlong ptr, jstring jDomain) |
243 AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine
>(ptr); | 245 { |
| 246 AdblockPlus::FilterEngine* engine = |
| 247 JniLongToTypePtr<AdblockPlus::FilterEngine>(ptr); |
244 | 248 |
245 std::string domain = JniJavaToStdString(env, jDomain); | 249 std::string domain = JniJavaToStdString(env, jDomain); |
246 | 250 |
247 try | 251 try |
248 { | 252 { |
249 std::vector<std::string> selectors = engine->GetElementHidingSelectors(domai
n); | 253 std::vector<std::string> selectors = engine->GetElementHidingSelectors( |
| 254 domain); |
250 | 255 |
251 jobject list = NewJniArrayList(env); | 256 jobject list = NewJniArrayList(env); |
252 | 257 |
253 for (std::vector<std::string>::iterator it = selectors.begin(), end = select
ors.end(); it != end; it++) | 258 for (std::vector<std::string>::iterator it = selectors.begin(), end = |
| 259 selectors.end(); it != end; it++) |
254 { | 260 { |
255 JniAddObjectToList(env, list, env->NewStringUTF(it->c_str())); | 261 JniAddObjectToList(env, list, |
| 262 *JniLocalReference<jstring>(env, env->NewStringUTF(it->c_str()))); |
256 } | 263 } |
257 | 264 |
258 return list; | 265 return list; |
259 } | 266 } |
260 CATCH_THROW_AND_RETURN(env, 0) | 267 CATCH_THROW_AND_RETURN(env, 0) |
261 } | 268 } |
262 | 269 |
263 static jobject JNICALL JniMatches(JNIEnv* env, jclass clazz, jlong ptr, jstring
jUrl, jobject jContentType, jstring jDocumentUrl) | 270 static jobject JNICALL JniMatches(JNIEnv* env, jclass clazz, jlong ptr, jstring
jUrl, jobject jContentType, jstring jDocumentUrl) |
264 { | 271 { |
265 AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine
>(ptr); | 272 AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine
>(ptr); |
266 | 273 |
267 std::string url = JniJavaToStdString(env, jUrl); | 274 std::string url = JniJavaToStdString(env, jUrl); |
268 AdblockPlus::FilterEngine::ContentType contentType = | 275 AdblockPlus::FilterEngine::ContentType contentType = |
269 ConvertContentType(env, jContentType); | 276 ConvertContentType(env, jContentType); |
270 std::string documentUrl = JniJavaToStdString(env, jDocumentUrl); | 277 std::string documentUrl = JniJavaToStdString(env, jDocumentUrl); |
271 | 278 |
272 try | 279 try |
273 { | 280 { |
274 AdblockPlus::FilterPtr filter = engine->Matches(url, contentType, documentUr
l); | 281 AdblockPlus::FilterPtr filter = engine->Matches(url, contentType, documentUr
l); |
275 | 282 |
276 return NewJniFilter(env, filter); | 283 return NewJniFilter(env, filter); |
277 } | 284 } |
278 CATCH_THROW_AND_RETURN(env, 0) | 285 CATCH_THROW_AND_RETURN(env, 0) |
279 } | 286 } |
280 | 287 |
281 static jobject JNICALL JniMatchesMany(JNIEnv* env, jclass clazz, jlong ptr, jstr
ing jUrl, jobject jContentType, jobjectArray jDocumentUrls) | 288 static jobject JNICALL JniMatchesMany(JNIEnv* env, jclass clazz, jlong ptr, |
282 { | 289 jstring jUrl, jobject jContentType, jobjectArray jDocumentUrls) |
283 AdblockPlus::FilterEngine* engine = JniLongToTypePtr<AdblockPlus::FilterEngine
>(ptr); | 290 { |
| 291 AdblockPlus::FilterEngine* engine = |
| 292 JniLongToTypePtr<AdblockPlus::FilterEngine>(ptr); |
284 | 293 |
285 std::string url = JniJavaToStdString(env, jUrl); | 294 std::string url = JniJavaToStdString(env, jUrl); |
286 AdblockPlus::FilterEngine::ContentType contentType = | 295 AdblockPlus::FilterEngine::ContentType contentType = |
287 ConvertContentType(env, jContentType); | 296 ConvertContentType(env, jContentType); |
288 | 297 |
289 std::vector<std::string> documentUrls; | 298 std::vector<std::string> documentUrls; |
290 | 299 |
291 jsize len = env->GetArrayLength(jDocumentUrls); | 300 jsize len = env->GetArrayLength(jDocumentUrls); |
292 | 301 |
293 for (jsize i = 0; i < len; i++) | 302 for (jsize i = 0; i < len; i++) |
294 { | 303 { |
295 documentUrls.push_back(JniJavaToStdString(env, static_cast<jstring>(env->Get
ObjectArrayElement(jDocumentUrls, i)))); | 304 documentUrls.push_back( |
296 } | 305 JniJavaToStdString(env, |
297 | 306 *JniLocalReference<jstring>(env, |
298 try | 307 static_cast<jstring>(env->GetObjectArrayElement(jDocumentUrls, |
299 { | 308 i))))); |
300 AdblockPlus::FilterPtr filter = engine->Matches(url, contentType, documentUr
ls); | 309 } |
| 310 |
| 311 try |
| 312 { |
| 313 AdblockPlus::FilterPtr filter = engine->Matches(url, contentType, |
| 314 documentUrls); |
301 | 315 |
302 return NewJniFilter(env, filter); | 316 return NewJniFilter(env, filter); |
303 } | 317 } |
304 CATCH_THROW_AND_RETURN(env, 0) | 318 CATCH_THROW_AND_RETURN(env, 0) |
305 } | 319 } |
306 | 320 |
307 static jobject JNICALL JniGetPref(JNIEnv* env, jclass clazz, jlong ptr, jstring
jPref) | 321 static jobject JNICALL JniGetPref(JNIEnv* env, jclass clazz, jlong ptr, jstring
jPref) |
308 { | 322 { |
309 AdblockPlus::FilterEngine* engine = JniLongToTypePtr < AdblockPlus::FilterEngi
ne > (ptr); | 323 AdblockPlus::FilterEngine* engine = JniLongToTypePtr < AdblockPlus::FilterEngi
ne > (ptr); |
310 | 324 |
(...skipping 22 matching lines...) Expand all Loading... |
333 CATCH_AND_THROW(env) | 347 CATCH_AND_THROW(env) |
334 } | 348 } |
335 | 349 |
336 static JNINativeMethod methods[] = | 350 static JNINativeMethod methods[] = |
337 { | 351 { |
338 { (char*)"ctor", (char*)"(J)J", (void*)JniCtor }, | 352 { (char*)"ctor", (char*)"(J)J", (void*)JniCtor }, |
339 { (char*)"isFirstRun", (char*)"(J)Z", (void*)JniIsFirstRun }, | 353 { (char*)"isFirstRun", (char*)"(J)Z", (void*)JniIsFirstRun }, |
340 { (char*)"getFilter", (char*)"(JLjava/lang/String;)" TYP("Filter"), (void*)Jni
GetFilter }, | 354 { (char*)"getFilter", (char*)"(JLjava/lang/String;)" TYP("Filter"), (void*)Jni
GetFilter }, |
341 { (char*)"getListedFilters", (char*)"(J)Ljava/util/List;", (void*)JniGetListed
Filters }, | 355 { (char*)"getListedFilters", (char*)"(J)Ljava/util/List;", (void*)JniGetListed
Filters }, |
342 { (char*)"getSubscription", (char*)"(JLjava/lang/String;)" TYP("Subscription")
, (void*)JniGetSubscription }, | 356 { (char*)"getSubscription", (char*)"(JLjava/lang/String;)" TYP("Subscription")
, (void*)JniGetSubscription }, |
343 { (char*)"getNotificationToShow", (char*)"(JLjava/lang/String;)" TYP("Notifica
tion"), (void*)JniGetNotificationToShow }, | 357 { (char*)"getNextNotificationToShow", (char*)"(JLjava/lang/String;)" TYP("Noti
fication"), (void*)JniGetNextNotificationToShow }, |
344 { (char*)"getListedSubscriptions", (char*)"(J)Ljava/util/List;", (void*)JniGet
ListedSubscriptions }, | 358 { (char*)"getListedSubscriptions", (char*)"(J)Ljava/util/List;", (void*)JniGet
ListedSubscriptions }, |
345 { (char*)"fetchAvailableSubscriptions", (char*)"(J)Ljava/util/List;", (void*)J
niFetchAvailableSubscriptions }, | 359 { (char*)"fetchAvailableSubscriptions", (char*)"(J)Ljava/util/List;", (void*)J
niFetchAvailableSubscriptions }, |
346 { (char*)"setUpdateAvailableCallback", (char*)"(JJ)V", (void*)JniSetUpdateAvai
lableCallback }, | 360 { (char*)"setUpdateAvailableCallback", (char*)"(JJ)V", (void*)JniSetUpdateAvai
lableCallback }, |
347 { (char*)"removeUpdateAvailableCallback", (char*)"(J)V", (void*)JniRemoveUpdat
eAvailableCallback }, | 361 { (char*)"removeUpdateAvailableCallback", (char*)"(J)V", (void*)JniRemoveUpdat
eAvailableCallback }, |
348 { (char*)"setFilterChangeCallback", (char*)"(JJ)V", (void*)JniSetFilterChangeC
allback }, | 362 { (char*)"setFilterChangeCallback", (char*)"(JJ)V", (void*)JniSetFilterChangeC
allback }, |
349 { (char*)"removeFilterChangeCallback", (char*)"(J)V", (void*)JniRemoveFilterCh
angeCallback }, | 363 { (char*)"removeFilterChangeCallback", (char*)"(J)V", (void*)JniRemoveFilterCh
angeCallback }, |
350 { (char*)"forceUpdateCheck", (char*)"(JJ)V", (void*)JniForceUpdateCheck }, | 364 { (char*)"forceUpdateCheck", (char*)"(JJ)V", (void*)JniForceUpdateCheck }, |
351 { (char*)"getElementHidingSelectors", (char*)"(JLjava/lang/String;)Ljava/util/
List;", (void*)JniGetElementHidingSelectors }, | 365 { (char*)"getElementHidingSelectors", (char*)"(JLjava/lang/String;)Ljava/util/
List;", (void*)JniGetElementHidingSelectors }, |
352 { (char*)"matches", (char*)"(JLjava/lang/String;" TYP("FilterEngine$ContentTyp
e") "Ljava/lang/String;)" TYP("Filter"), (void*)JniMatches }, | 366 { (char*)"matches", (char*)"(JLjava/lang/String;" TYP("FilterEngine$ContentTyp
e") "Ljava/lang/String;)" TYP("Filter"), (void*)JniMatches }, |
353 { (char*)"matches", (char*)"(JLjava/lang/String;" TYP("FilterEngine$ContentTyp
e") "[Ljava/lang/String;)" TYP("Filter"), (void*)JniMatchesMany }, | 367 { (char*)"matches", (char*)"(JLjava/lang/String;" TYP("FilterEngine$ContentTyp
e") "[Ljava/lang/String;)" TYP("Filter"), (void*)JniMatchesMany }, |
354 { (char*)"getPref", (char*)"(JLjava/lang/String;)" TYP("JsValue"), (void*)JniG
etPref }, | 368 { (char*)"getPref", (char*)"(JLjava/lang/String;)" TYP("JsValue"), (void*)JniG
etPref }, |
355 { (char*)"setPref", (char*)"(JLjava/lang/String;J)V", (void*)JniSetPref }, | 369 { (char*)"setPref", (char*)"(JLjava/lang/String;J)V", (void*)JniSetPref }, |
356 { (char*)"dtor", (char*)"(J)V", (void*)JniDtor } | 370 { (char*)"dtor", (char*)"(J)V", (void*)JniDtor } |
357 }; | 371 }; |
358 | 372 |
359 extern "C" JNIEXPORT void JNICALL Java_org_adblockplus_libadblockplus_FilterEngi
ne_registerNatives(JNIEnv *env, jclass clazz) | 373 extern "C" JNIEXPORT void JNICALL Java_org_adblockplus_libadblockplus_FilterEngi
ne_registerNatives(JNIEnv *env, jclass clazz) |
360 { | 374 { |
361 env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0])); | 375 env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0])); |
362 } | 376 } |
LEFT | RIGHT |