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

Side by Side Diff: libadblockplus-android/jni/JniJsValue.cpp

Issue 29678581: Issue 6000 - Rename "libadblockplus-android" (Closed)
Patch Set: Created Jan. 24, 2018, 6:53 a.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 <https://adblockplus.org/>,
3 * Copyright (C) 2006-present 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 "JniJsValue.h"
21
22 // precached in JNI_OnLoad and released in JNI_OnUnload
23 JniGlobalReference<jclass>* jsValueClass;
24 jmethodID jsValueCtor;
25
26 void JniJsValue_OnLoad(JavaVM* vm, JNIEnv* env, void* reserved)
27 {
28 jsValueClass = new JniGlobalReference<jclass>(env, env->FindClass(PKG("JsValue ")));
29 jsValueCtor = env->GetMethodID(jsValueClass->Get(), "<init>", "(J)V");
30 }
31
32 void JniJsValue_OnUnload(JavaVM* vm, JNIEnv* env, void* reserved)
33 {
34 if (jsValueClass)
35 {
36 delete jsValueClass;
37 jsValueClass = NULL;
38 }
39 }
40
41 jclass GetJsValueClass()
42 {
43 return (jsValueClass != NULL ? jsValueClass->Get() : NULL);
44 }
45
46 static jboolean JNICALL JniIsUndefined(JNIEnv* env, jclass clazz, jlong ptr)
47 {
48 try
49 {
50 return JniGetJsValuePtr(ptr)->IsUndefined() ? JNI_TRUE : JNI_FALSE;
51 }
52 CATCH_THROW_AND_RETURN(env, JNI_FALSE)
53 }
54
55 static jboolean JNICALL JniIsNull(JNIEnv* env, jclass clazz, jlong ptr)
56 {
57 try
58 {
59 return JniGetJsValuePtr(ptr)->IsNull() ? JNI_TRUE : JNI_FALSE;
60 }
61 CATCH_THROW_AND_RETURN(env, JNI_FALSE)
62 }
63
64 static jboolean JNICALL JniIsNumber(JNIEnv* env, jclass clazz, jlong ptr)
65 {
66 try
67 {
68 return JniGetJsValuePtr(ptr)->IsNumber() ? JNI_TRUE : JNI_FALSE;
69 }
70 CATCH_THROW_AND_RETURN(env, JNI_FALSE)
71 }
72
73 static jboolean JNICALL JniIsString(JNIEnv* env, jclass clazz, jlong ptr)
74 {
75 try
76 {
77 return JniGetJsValuePtr(ptr)->IsString() ? JNI_TRUE : JNI_FALSE;
78 }
79 CATCH_THROW_AND_RETURN(env, JNI_FALSE)
80 }
81
82 static jboolean JNICALL JniIsBoolean(JNIEnv* env, jclass clazz, jlong ptr)
83 {
84 try
85 {
86 return JniGetJsValuePtr(ptr)->IsBool() ? JNI_TRUE : JNI_FALSE;
87 }
88 CATCH_THROW_AND_RETURN(env, JNI_FALSE)
89 }
90
91 static jboolean JNICALL JniIsObject(JNIEnv* env, jclass clazz, jlong ptr)
92 {
93 try
94 {
95 return JniGetJsValuePtr(ptr)->IsObject() ? JNI_TRUE : JNI_FALSE;
96 }
97 CATCH_THROW_AND_RETURN(env, JNI_FALSE)
98 }
99
100 static jboolean JNICALL JniIsArray(JNIEnv* env, jclass clazz, jlong ptr)
101 {
102 try
103 {
104 return JniGetJsValuePtr(ptr)->IsArray() ? JNI_TRUE : JNI_FALSE;
105 }
106 CATCH_THROW_AND_RETURN(env, JNI_FALSE)
107 }
108
109 static jboolean JNICALL JniIsFunction(JNIEnv* env, jclass clazz, jlong ptr)
110 {
111 try
112 {
113 return JniGetJsValuePtr(ptr)->IsFunction() ? JNI_TRUE : JNI_FALSE;
114 }
115 CATCH_THROW_AND_RETURN(env, JNI_FALSE)
116 }
117
118 static jstring JNICALL JniAsString(JNIEnv* env, jclass clazz, jlong ptr)
119 {
120 try
121 {
122 AdblockPlus::JsValue* jsValue = JniGetJsValuePtr(ptr);
123 return env->NewStringUTF(jsValue->AsString().c_str());
124 }
125 CATCH_THROW_AND_RETURN(env, 0)
126 }
127
128 static jlong JNICALL JniAsLong(JNIEnv* env, jclass clazz, jlong ptr)
129 {
130 try
131 {
132 return static_cast<jlong>(JniGetJsValuePtr(ptr)->AsInt());
133 }
134 CATCH_THROW_AND_RETURN(env, 0)
135 }
136
137 static jboolean JNICALL JniAsBoolean(JNIEnv* env, jclass clazz, jlong ptr)
138 {
139 try
140 {
141 return JniGetJsValuePtr(ptr)->AsBool() ? JNI_TRUE : JNI_FALSE;
142 }
143 CATCH_THROW_AND_RETURN(env, JNI_FALSE)
144 }
145
146 static jobject JNICALL JniAsList(JNIEnv* env, jclass clazz, jlong ptr)
147 {
148 try
149 {
150 return JniJsValueListToArrayList(env, JniGetJsValuePtr(ptr)->AsList());
151 }
152 CATCH_THROW_AND_RETURN(env, 0)
153 }
154
155 static jobject JNICALL JniGetProperty(JNIEnv* env, jclass clazz, jlong ptr, jstr ing name)
156 {
157 try
158 {
159 return NewJniJsValue(env, JniGetJsValuePtr(ptr)->GetProperty(JniJavaToStdStr ing(env, name)));
160 }
161 CATCH_THROW_AND_RETURN(env, 0)
162 }
163
164 static void JNICALL JniDtor(JNIEnv* env, jclass clazz, jlong ptr)
165 {
166 delete JniLongToTypePtr<AdblockPlus::JsValue>(ptr);
167 }
168
169 jobject NewJniJsValue(JNIEnv* env, AdblockPlus::JsValue&& jsValue, jclass jsValu eClassArg)
170 {
171 auto pJsValue = reinterpret_cast<uintptr_t>(new AdblockPlus::JsValue(std::move (jsValue)));
172 return env->NewObject(jsValueClass->Get(), jsValueCtor, static_cast<jlong>(pJs Value));
173 }
174
175 AdblockPlus::JsValue* JniGetJsValuePtr(jlong ptr)
176 {
177 return JniLongToTypePtr<AdblockPlus::JsValue>(ptr);
178 }
179
180 AdblockPlus::JsValue& JniGetJsValue(jlong ptr)
181 {
182 return *JniLongToTypePtr<AdblockPlus::JsValue>(ptr);
183 }
184
185 jobject JniJsValueListToArrayList(JNIEnv* env, AdblockPlus::JsValueList&& list)
186 {
187 jobject arrayList = NewJniArrayList(env);
188
189 for (AdblockPlus::JsValueList::iterator it = list.begin(), end = list.end(); i t != end; ++it)
190 {
191 JniAddObjectToList(env, arrayList, *JniLocalReference<jobject>(env, NewJniJs Value(env, std::move(*it))));
192 }
193
194 return arrayList;
195 }
196
197 // TODO: List of functions that lack JNI bindings
198 //std::vector<std::string> GetOwnPropertyNames() const;
199 //void SetProperty(const std::string& name, const std::string& val);
200 //void SetProperty(const std::string& name, int64_t val);
201 //void SetProperty(const std::string& name, bool val);
202 //void SetProperty(const std::string& name, JsValue value);
203 //void SetProperty(const std::string& name, const char* val);
204 //inline void SetProperty(const std::string& name, int val);
205 //std::string GetClass() const;
206 //JsValue Call(const JsValueList& params = JsValueList(), AdblockPlus::JsValue t hisPtr = AdblockPlus::JsValue()) const;
207
208 static JNINativeMethod methods[] =
209 {
210 { (char*)"isUndefined", (char*)"(J)Z", (void*)JniIsUndefined },
211 { (char*)"isNull", (char*)"(J)Z", (void*)JniIsNull },
212 { (char*)"isNumber", (char*)"(J)Z", (void*)JniIsNumber },
213 { (char*)"isString", (char*)"(J)Z", (void*)JniIsString },
214 { (char*)"isBoolean", (char*)"(J)Z", (void*)JniIsBoolean },
215 { (char*)"isObject", (char*)"(J)Z", (void*)JniIsObject },
216 { (char*)"isArray", (char*)"(J)Z", (void*)JniIsArray },
217 { (char*)"isFunction", (char*)"(J)Z", (void*)JniIsFunction },
218 { (char*)"asString", (char*)"(J)Ljava/lang/String;", (void*)JniAsString },
219 { (char*)"asLong", (char*)"(J)J", (void*)JniAsLong },
220 { (char*)"asBoolean", (char*)"(J)Z", (void*)JniAsBoolean },
221 { (char*)"asList", (char*)"(J)Ljava/util/List;", (void*)JniAsList },
222 { (char*)"getProperty", (char*)"(JLjava/lang/String;)" TYP("JsValue"), (void*) JniGetProperty },
223 { (char*)"dtor", (char*)"(J)V", (void*)JniDtor }
224 };
225
226 extern "C" JNIEXPORT void JNICALL Java_org_adblockplus_libadblockplus_JsValue_re gisterNatives(JNIEnv *env, jclass clazz)
227 {
228 env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0]));
229 }
OLDNEW

Powered by Google App Engine
This is Rietveld