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

Side by Side Diff: libadblockplus-android/jni/JniJsEngine.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 "JniCallbacks.h"
21
22 static AdblockPlus::JsEngine& GetJsEngineRef(jlong ptr)
23 {
24 return *JniLongToTypePtr<AdblockPlus::JsEngine>(ptr);
25 }
26
27 static void JNICALL JniSetEventCallback(JNIEnv* env, jclass clazz, jlong ptr, js tring jEventName, jlong jCallbackPtr)
28 {
29 AdblockPlus::JsEngine& engine = GetJsEngineRef(ptr);
30
31 JniEventCallback* callback = JniLongToTypePtr<JniEventCallback>(jCallbackPtr);
32 std::string eventName = JniJavaToStdString(env, jEventName);
33
34 auto eCallback = [callback](AdblockPlus::JsValueList&& params)
35 {
36 callback->Callback(std::move(params));
37 };
38
39 try
40 {
41 engine.SetEventCallback(eventName, eCallback);
42 }
43 CATCH_AND_THROW(env)
44 }
45
46 static void JNICALL JniRemoveEventCallback(JNIEnv* env, jclass clazz, jlong ptr, jstring jEventName)
47 {
48 AdblockPlus::JsEngine& engine = GetJsEngineRef(ptr);
49
50 std::string eventName = JniJavaToStdString(env, jEventName);
51
52 try
53 {
54 engine.RemoveEventCallback(eventName);
55 }
56 CATCH_AND_THROW(env)
57 }
58
59 static jobject JNICALL JniEvaluate(JNIEnv* env, jclass clazz, jlong ptr, jstring jSource, jstring jFilename)
60 {
61 AdblockPlus::JsEngine& engine = GetJsEngineRef(ptr);
62
63 std::string source = JniJavaToStdString(env, jSource);
64 std::string filename = JniJavaToStdString(env, jFilename);
65
66 try
67 {
68 return NewJniJsValue(env, engine.Evaluate(source, filename));
69 }
70 CATCH_THROW_AND_RETURN(env, 0)
71 }
72
73 static void JNICALL JniTriggerEvent(JNIEnv* env, jclass clazz, jlong ptr, jstrin g jEventName, jarray jJsPtrs)
74 {
75 AdblockPlus::JsEngine& engine = GetJsEngineRef(ptr);
76 std::string eventName = JniJavaToStdString(env, jEventName);
77 AdblockPlus::JsValueList args;
78
79 if (jJsPtrs)
80 {
81 jlong* ptrs = (jlong*)env->GetPrimitiveArrayCritical(jJsPtrs, 0);
82
83 jsize length = env->GetArrayLength(jJsPtrs);
84
85 for (jsize i = 0; i < length; i++)
86 {
87 args.push_back(JniGetJsValue(ptrs[i]));
88 }
89
90 env->ReleasePrimitiveArrayCritical(jJsPtrs, ptrs, JNI_ABORT);
91 }
92
93 try
94 {
95 engine.TriggerEvent(eventName, std::move(args));
96 }
97 CATCH_AND_THROW(env)
98 }
99
100 static jobject JNICALL JniNewLongValue(JNIEnv* env, jclass clazz, jlong ptr, jlo ng value)
101 {
102 AdblockPlus::JsEngine& engine = GetJsEngineRef(ptr);
103
104 try
105 {
106 return NewJniJsValue(env, engine.NewValue(static_cast<int64_t>(value)));
107 }
108 CATCH_THROW_AND_RETURN(env, 0)
109 }
110
111 static jobject JNICALL JniNewBooleanValue(JNIEnv* env, jclass clazz, jlong ptr, jboolean value)
112 {
113 AdblockPlus::JsEngine& engine = GetJsEngineRef(ptr);
114
115 try
116 {
117 return NewJniJsValue(env, engine.NewValue(value == JNI_TRUE ? true : false)) ;
118 }
119 CATCH_THROW_AND_RETURN(env, 0)
120 }
121
122 static jobject JNICALL JniNewStringValue(JNIEnv* env, jclass clazz, jlong ptr, j string value)
123 {
124 AdblockPlus::JsEngine& engine = GetJsEngineRef(ptr);
125
126 try
127 {
128 std::string strValue = JniJavaToStdString(env, value);
129 return NewJniJsValue(env, engine.NewValue(strValue));
130 }
131 CATCH_THROW_AND_RETURN(env, 0)
132 }
133
134 // TODO: List of functions that lack JNI bindings
135 //JsValuePtr NewObject();
136 //JsValuePtr NewCallback(v8::InvocationCallback callback);
137 //static JsEnginePtr FromArguments(const v8::Arguments& arguments);
138 //JsValueList ConvertArguments(const v8::Arguments& arguments);
139
140 static JNINativeMethod methods[] =
141 {
142 { (char*)"setEventCallback", (char*)"(JLjava/lang/String;J)V", (void*)JniSetEv entCallback },
143 { (char*)"removeEventCallback", (char*)"(JLjava/lang/String;)V", (void*)JniRem oveEventCallback },
144 { (char*)"triggerEvent", (char*)"(JLjava/lang/String;[J)V", (void*)JniTriggerE vent },
145
146 { (char*)"evaluate", (char*)"(JLjava/lang/String;Ljava/lang/String;)" TYP("JsV alue"), (void*)JniEvaluate },
147
148 { (char*)"newValue", (char*)"(JJ)" TYP("JsValue"), (void*)JniNewLongValue },
149 { (char*)"newValue", (char*)"(JZ)" TYP("JsValue"), (void*)JniNewBooleanValue } ,
150 { (char*)"newValue", (char*)"(JLjava/lang/String;)" TYP("JsValue"), (void*)Jni NewStringValue }
151 };
152
153 extern "C" JNIEXPORT void JNICALL Java_org_adblockplus_libadblockplus_JsEngine_r egisterNatives(JNIEnv *env, jclass clazz)
154 {
155 env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0]));
156 }
OLDNEW

Powered by Google App Engine
This is Rietveld