diff --git a/java/org/cef/callback/CefQueryCallback_N.java b/java/org/cef/callback/CefQueryCallback_N.java index 14b32e3a..b57859a9 100644 --- a/java/org/cef/callback/CefQueryCallback_N.java +++ b/java/org/cef/callback/CefQueryCallback_N.java @@ -5,7 +5,10 @@ package org.cef.callback; class CefQueryCallback_N extends CefNativeAdapter implements CefQueryCallback { - CefQueryCallback_N() {} + private boolean persistent_; + + CefQueryCallback_N() { + } @Override protected void finalize() throws Throwable { @@ -31,6 +34,15 @@ public void failure(int error_code, String error_message) { } } + private void makePersistent() { + this.persistent_ = true; + } + + private boolean getIsPersistent() { + return this.persistent_; + } + private final native void N_Success(long self, String response); + private final native void N_Failure(long self, int error_code, String error_message); } diff --git a/native/CefQueryCallback_N.cpp b/native/CefQueryCallback_N.cpp index 017ff1aa..f5959049 100644 --- a/native/CefQueryCallback_N.cpp +++ b/native/CefQueryCallback_N.cpp @@ -31,7 +31,12 @@ Java_org_cef_callback_CefQueryCallback_1N_N_1Success(JNIEnv* env, if (!callback) return; callback->Success(GetJNIString(env, response)); - ClearSelf(env, obj); + + bool persistent = false; + JNI_CALL_BOOLEAN_METHOD(persistent, env, obj, "getIsPersistent", "()Z"); + + if (!persistent) + ClearSelf(env, obj); } JNIEXPORT void JNICALL diff --git a/native/message_router_handler.cpp b/native/message_router_handler.cpp index 793ccf7c..20fb0feb 100644 --- a/native/message_router_handler.cpp +++ b/native/message_router_handler.cpp @@ -44,6 +44,9 @@ bool MessageRouterHandler::OnQuery( jboolean jresult = JNI_FALSE; + if (persistent) + JNI_CALL_VOID_METHOD(env, jcallback.get(), "makePersistent", "()V"); + JNI_CALL_METHOD(env, handle_, "onQuery", "(Lorg/cef/browser/CefBrowser;Lorg/cef/browser/" "CefFrame;JLjava/lang/String;ZLorg/cef/"