| Index: libadblockplus-android/jni/JniPlatform.cpp |
| diff --git a/libadblockplus-android/jni/JniPlatform.cpp b/libadblockplus-android/jni/JniPlatform.cpp |
| index 5e067088bca47d2d487fea3fbb728260a6dd696c..ccf96a029256040585cc831964e30ddf4ef76a04 100644 |
| --- a/libadblockplus-android/jni/JniPlatform.cpp |
| +++ b/libadblockplus-android/jni/JniPlatform.cpp |
| @@ -20,6 +20,28 @@ |
| #include "JniCallbacks.h" |
| #include "JniPlatform.h" |
| +/** |
| + * V8IsolateHolder accepts v8:::Isolate ptr in ctor and just returns it in Get(). |
| + * V8IsolateHolder is not taking ownership so it's not releasing isolate ptr. |
| + */ |
| +class V8IsolateHolder : public AdblockPlus::IV8IsolateProvider |
| +{ |
| + public: |
| + V8IsolateHolder(v8::Isolate* isolate_) : isolate(isolate_) |
| + { |
| + } |
| + |
| + v8::Isolate* Get() override |
| + { |
| + return isolate; |
| + } |
| + |
| + private: |
| + V8IsolateHolder(const V8IsolateHolder&); |
| + V8IsolateHolder& operator=(const V8IsolateHolder&); |
| + |
| + v8::Isolate* isolate; |
| +}; |
| static void TransformAppInfo(JNIEnv* env, jobject jAppInfo, AdblockPlus::AppInfo& appInfo) |
| { |
| @@ -70,13 +92,19 @@ static void JNICALL JniDtor(JNIEnv* env, jclass clazz, jlong ptr) |
| delete JniLongToTypePtr<JniPlatform>(ptr); |
| } |
| -static void JNICALL JniSetUpJsEngine(JNIEnv* env, jclass clazz, jlong ptr, jobject jAppInfo) |
| +static void JNICALL JniSetUpJsEngine(JNIEnv* env, jclass clazz, jlong ptr, jobject jAppInfo, jlong v8IsolatePtr) |
| { |
| try |
| { |
| AdblockPlus::AppInfo appInfo; |
| TransformAppInfo(env, jAppInfo, appInfo); |
| - GetPlatformRef(ptr).SetUpJsEngine(appInfo); |
| + std::unique_ptr<AdblockPlus::IV8IsolateProvider> isolateProvider; |
| + if (v8IsolatePtr) |
| + { |
| + isolateProvider.reset(new V8IsolateHolder(JniLongToTypePtr<v8::Isolate>(v8IsolatePtr))); |
| + } |
| + |
| + GetPlatformRef(ptr).SetUpJsEngine(appInfo, std::move(isolateProvider)); |
| } |
| CATCH_AND_THROW(env) |
| } |
| @@ -132,7 +160,7 @@ static JNINativeMethod methods[] = |
| { (char*)"ctor", (char*)"(" TYP("LogSystem") TYP("WebRequest") "Ljava/lang/String;)J", (void*)JniCtor }, |
| { (char*)"dtor", (char*)"(J)V", (void*)JniDtor }, |
| - { (char*)"setUpJsEngine", (char*)"(J" TYP("AppInfo") ")V", (void*)JniSetUpJsEngine }, |
| + { (char*)"setUpJsEngine", (char*)"(J" TYP("AppInfo") "J)V", (void*)JniSetUpJsEngine }, |
| { (char*)"getJsEnginePtr", (char*)"(J)J", (void*)JniGetJsEnginePtr }, |
| { (char*)"setUpFilterEngine", (char*)"(J" TYP("IsAllowedConnectionCallback") ")V", (void*)JniSetUpFilterEngine }, |
| { (char*)"ensureFilterEngine", (char*)"(J)V", (void*)JniEnsureFilterEngine } |