Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: jni/JniFilterEngine.cpp

Issue 6606493159784448: New JNI bindings (Closed)
Patch Set: Cleaned up namespace usage in cpp files. Created March 20, 2014, 3:17 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
(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 jlong JNICALL JniCtor(JNIEnv* env, jclass clazz, jlong enginePtr)
23 {
24 TRY
25 {
26 AdblockPlus::JsEnginePtr& jsEngine = *AdblockPlus::Android::JniLong2TypePtr< AdblockPlus::JsEnginePtr>(enginePtr);
27 return AdblockPlus::Android::JniPtr2Long(new AdblockPlus::FilterEngine(jsEng ine));
28 }
29 CATCH_THROW_AND_RETURN(env, 0)
30 }
31
32 static void JNICALL JniDtor(JNIEnv* env, jclass clazz, jlong ptr)
33 {
34 delete AdblockPlus::Android::JniLong2TypePtr<AdblockPlus::FilterEngine>(ptr);
35 }
36
37 static jboolean JNICALL JniIsFirstRun(JNIEnv* env, jclass clazz, jlong ptr)
38 {
39 TRY
40 {
41 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Ad blockPlus::FilterEngine>(ptr);
42
43 return engine->IsFirstRun() ? JNI_TRUE : JNI_FALSE;
44 }
45 CATCH_THROW_AND_RETURN(env, JNI_FALSE);
46 }
47
48 static jobject JNICALL JniGetFilter(JNIEnv* env, jclass clazz, jlong ptr, jstrin g jText)
49 {
50 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::FilterEngine>(ptr);
51 std::string text = AdblockPlus::Android::JniJava2StdString(env, jText);
52
53 TRY
54 {
55 AdblockPlus::FilterPtr filter = engine->GetFilter(text);
56
57 return AdblockPlus::Android::NewJniFilter(env, filter);
58 }
59 CATCH_THROW_AND_RETURN(env, 0);
60 }
61
62 static jobject JNICALL JniGetListedFilters(JNIEnv* env, jclass clazz, jlong ptr)
63 {
64 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::FilterEngine>(ptr);
65
66 TRY
67 {
68 std::vector<AdblockPlus::FilterPtr> filters = engine->GetListedFilters();
69
70 jobject list = AdblockPlus::Android::NewJniArrayList(env);
71
72 for (std::vector<AdblockPlus::FilterPtr>::iterator it = filters.begin(), end = filters.end(); it != end; it++)
73 {
74 AdblockPlus::Android::JniAddObjectToList(env, list, AdblockPlus::Android:: NewJniFilter(env, *it));
75 }
76
77 return list;
78 }
79 CATCH_THROW_AND_RETURN(env, 0);
80 }
81
82 static jobject JNICALL JniGetSubscription(JNIEnv* env, jclass clazz, jlong ptr, jstring jUrl)
83 {
84 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::FilterEngine>(ptr);
85 std::string url = AdblockPlus::Android::JniJava2StdString(env, jUrl);
86
87 TRY
88 {
89 AdblockPlus::SubscriptionPtr subscription = engine->GetSubscription(url);
90
91 return AdblockPlus::Android::NewJniSubscription(env, subscription);
92 }
93 CATCH_THROW_AND_RETURN(env, 0);
94 }
95
96 static jobject JNICALL JniGetListedSubscriptions(JNIEnv* env, jclass clazz, jlon g ptr)
97 {
98 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::FilterEngine>(ptr);
99
100 TRY
101 {
102 std::vector<AdblockPlus::SubscriptionPtr> filters = engine->GetListedSubscri ptions();
103
104 jobject list = AdblockPlus::Android::NewJniArrayList(env);
105
106 for (std::vector<AdblockPlus::SubscriptionPtr>::iterator it = filters.begin( ), end = filters.end(); it != end; it++)
107 {
108 AdblockPlus::Android::JniAddObjectToList(env, list, AdblockPlus::Android:: NewJniSubscription(env, *it));
109 }
110
111 return list;
112 }
113 CATCH_THROW_AND_RETURN(env, 0);
114 }
115
116 // FIXME: Code duplication
Felix Dahlke 2014/03/28 08:29:00 That should probably be fixed :)
117 static jobject JNICALL JniFetchAvailableSubscriptions(JNIEnv* env, jclass clazz, jlong ptr)
118 {
119 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::FilterEngine>(ptr);
120
121 TRY
122 {
123 std::vector<AdblockPlus::SubscriptionPtr> filters = engine->FetchAvailableSu bscriptions();
124
125 jobject list = AdblockPlus::Android::NewJniArrayList(env);
126
127 for (std::vector<AdblockPlus::SubscriptionPtr>::iterator it = filters.begin( ), end = filters.end(); it != end; it++)
128 {
129 AdblockPlus::Android::JniAddObjectToList(env, list, AdblockPlus::Android:: NewJniSubscription(env, *it));
130 }
131
132 return list;
133 }
134 CATCH_THROW_AND_RETURN(env, 0);
135 }
136
137 static void JNICALL JniRemoveFilterChangeCallback(JNIEnv* env, jclass clazz, jlo ng ptr)
138 {
139 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::FilterEngine>(ptr);
140
141 TRY
142 {
143 engine->RemoveFilterChangeCallback();
144 }
145 CATCH_AND_THROW(env)
146 }
147
148 static void JNICALL JniSetFilterChangeCallback(JNIEnv* env, jclass clazz, jlong ptr, jlong filterPtr)
149 {
150 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::FilterEngine>(ptr);
151 AdblockPlus::Android::JniFilterChangeCallback* callback = AdblockPlus::Android ::JniLong2TypePtr<
152 AdblockPlus::Android::JniFilterChangeCallback>(filterPtr);
153
154 AdblockPlus::FilterEngine::FilterChangeCallback filterCallback = std::tr1::bin d(&AdblockPlus::Android::JniFilterChangeCallback::Callback,
155 callback, std::tr1::placeholders::_1, std::tr1::placeholders::_2);
156
157 TRY
158 {
159 engine->SetFilterChangeCallback(filterCallback);
160 }
161 CATCH_AND_THROW(env)
162 }
163
164 static void JNICALL JniForceUpdateCheck(JNIEnv* env, jclass clazz, jlong ptr, jl ong updaterPtr)
165 {
166 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::FilterEngine>(ptr);
167 AdblockPlus::Android::JniUpdaterCallback* callback = AdblockPlus::Android::Jni Long2TypePtr<AdblockPlus::Android::JniUpdaterCallback>(
168 updaterPtr);
169
170 AdblockPlus::FilterEngine::UpdaterCallback updaterCallback = 0;
171
172 if (updaterPtr)
173 {
174 updaterCallback = std::tr1::bind(&AdblockPlus::Android::JniUpdaterCallback:: Callback, callback, std::tr1::placeholders::_1);
175 }
176
177 TRY
178 {
179 engine->ForceUpdateCheck(updaterCallback);
180 }
181 CATCH_AND_THROW(env)
182 }
183
184 static jobject JNICALL JniGetElementHidingSelectors(JNIEnv* env, jclass clazz, j long ptr, jstring jDomain)
185 {
186 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::FilterEngine>(ptr);
187
188 std::string domain = AdblockPlus::Android::JniJava2StdString(env, jDomain);
189
190 TRY
191 {
192 std::vector<std::string> selectors = engine->GetElementHidingSelectors(domai n);
193
194 jobject list = AdblockPlus::Android::NewJniArrayList(env);
195
196 for (std::vector<std::string>::iterator it = selectors.begin(), end = select ors.end(); it != end; it++)
197 {
198 AdblockPlus::Android::JniAddObjectToList(env, list, env->NewStringUTF(it-> c_str()));
199 }
200
201 return list;
202 }
203 CATCH_THROW_AND_RETURN(env, 0)
204 }
205
206 static jobject JNICALL JniMatches(JNIEnv* env, jclass clazz, jlong ptr, jstring jUrl, jstring jContentType, jstring jDocumentUrl)
207 {
208 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::FilterEngine>(ptr);
209
210 std::string url = AdblockPlus::Android::JniJava2StdString(env, jUrl);
211 std::string contentType = AdblockPlus::Android::JniJava2StdString(env, jConten tType);
212 std::string documentUrl = AdblockPlus::Android::JniJava2StdString(env, jDocume ntUrl);
213
214 TRY
215 {
216 AdblockPlus::FilterPtr filter = engine->Matches(url, contentType, documentUr l);
217
218 return AdblockPlus::Android::NewJniFilter(env, filter);
219 }
220 CATCH_THROW_AND_RETURN(env, 0)
221 }
222
223 static jobject JNICALL JniMatchesMany(JNIEnv* env, jclass clazz, jlong ptr, jstr ing jUrl, jstring jContentType, jobjectArray jDocumentUrls)
224 {
225 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::FilterEngine>(ptr);
226
227 std::string url = AdblockPlus::Android::JniJava2StdString(env, jUrl);
228 std::string contentType = AdblockPlus::Android::JniJava2StdString(env, jConten tType);
229
230 std::vector<std::string> documentUrls;
231
232 jsize len = env->GetArrayLength(jDocumentUrls);
233
234 for (jsize i = 0; i < len; i++)
235 {
236 documentUrls.push_back(
237 AdblockPlus::Android::JniJava2StdString(env, static_cast<jstring>(env->G etObjectArrayElement(jDocumentUrls, i))));
238 }
239
240 TRY
241 {
242 AdblockPlus::FilterPtr filter = engine->Matches(url, contentType, documentUr ls);
243
244 return AdblockPlus::Android::NewJniFilter(env, filter);
245 }
246 CATCH_THROW_AND_RETURN(env, 0)
247 }
248
249 static jobject JNICALL JniGetPref(JNIEnv* env, jclass clazz, jlong ptr, jstring jPref)
250 {
251 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::FilterEngine>(ptr);
252
253 std::string pref = AdblockPlus::Android::JniJava2StdString(env, jPref);
254
255 TRY
256 {
257 AdblockPlus::JsValuePtr value = engine->GetPref(pref);
258
259 return AdblockPlus::Android::NewJniJsValue(env, value);
260 }
261 CATCH_THROW_AND_RETURN(env, 0)
262 }
263
264 static void JNICALL JniSetPref(JNIEnv* env, jclass clazz, jlong ptr, jstring jPr ef, jlong jsValue)
265 {
266 AdblockPlus::FilterEngine* engine = AdblockPlus::Android::JniLong2TypePtr<Adbl ockPlus::FilterEngine>(ptr);
267
268 std::string pref = AdblockPlus::Android::JniJava2StdString(env, jPref);
269 AdblockPlus::JsValuePtr value = AdblockPlus::Android::JniGetJsValuePtr(jsValue );
270
271 TRY
272 {
273 engine->SetPref(pref, value);
274 }
275 CATCH_AND_THROW(env)
276 }
277
278 static JNINativeMethod methods[] =
279 {
280 { (char*)"ctor", (char*)"(J)J", (void*)JniCtor },
281 { (char*)"isFirstRun", (char*)"(J)Z", (void*)JniIsFirstRun },
282 { (char*)"getFilter", (char*)"(JLjava/lang/String;)" TYP("Filter"), (void*)JniGe tFilter },
283 { (char*)"getListedFilters", (char*)"(J)Ljava/util/List;", (void*)JniGetListedFi lters },
284 { (char*)"getSubscription", (char*)"(JLjava/lang/String;)" TYP("Subscription"), (void*)JniGetSubscription },
285 { (char*)"getListedSubscriptions", (char*)"(J)Ljava/util/List;", (void*)JniGetLi stedSubscriptions },
286 { (char*)"fetchAvailableSubscriptions", (char*)"(J)Ljava/util/List;", (void*)Jni FetchAvailableSubscriptions },
287 { (char*)"setFilterChangeCallback", (char*)"(JJ)V", (void*)JniSetFilterChangeCal lback },
288 { (char*)"removeFilterChangeCallback", (char*)"(J)V", (void*)JniRemoveFilterChan geCallback },
289 { (char*)"forceUpdateCheck", (char*)"(JJ)V", (void*)JniForceUpdateCheck },
290 { (char*)"getElementHidingSelectors", (char*)"(JLjava/lang/String;)Ljava/util/Li st;", (void*)JniGetElementHidingSelectors },
291 { (char*)"matches", (char*)"(JLjava/lang/String;Ljava/lang/String;Ljava/lang/Str ing;)" TYP("Filter"), (void*)JniMatches },
292 { (char*)"matches", (char*)"(JLjava/lang/String;Ljava/lang/String;[Ljava/lang/St ring;)" TYP("Filter"), (void*)JniMatchesMany },
293 { (char*)"getPref", (char*)"(JLjava/lang/String;)" TYP("JsValue"), (void*)JniGet Pref },
294 { (char*)"setPref", (char*)"(JLjava/lang/String;J)V", (void*)JniSetPref },
295 { (char*)"dtor", (char*)"(J)V", (void*)JniDtor }, };
296
297 extern "C" JNIEXPORT void JNICALL Java_org_adblockplus_android_api_FilterEngine_ registerNatives(JNIEnv *env, jclass clazz)
298 {
299 env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0]));
300 }
OLDNEW

Powered by Google App Engine
This is Rietveld