diff options
author | Christian StrΓΈmme <christian.stromme@qt.io> | 2022-04-22 15:32:11 +0200 |
---|---|---|
committer | Christian StrΓΈmme <christian.stromme@qt.io> | 2022-05-09 12:38:03 +0200 |
commit | 3702c4ccc19155840b3058631acf5cc015561df0 (patch) | |
tree | a692b6cc686a7c13d11363909033d94ee6d13dcd /src/plugins/android/qandroidwebview.cpp | |
parent | a9a707de9279622d2db170ce76d44603e6674cf2 (diff) |
Fix crash due to missing native functions for the cookie APIs
The cookie API that was added in 317e13cb2d97 missed the registration
and implementation for the native java functions needed for notifying
when a cookie got added/removed.
Fixes: QTBUG-102801
Pick-to: 6.3
Change-Id: I7594f75abba17b6ff1843d5349af085f90aae9b1
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src/plugins/android/qandroidwebview.cpp')
-rw-r--r-- | src/plugins/android/qandroidwebview.cpp | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/src/plugins/android/qandroidwebview.cpp b/src/plugins/android/qandroidwebview.cpp index d142e0c..b291608 100644 --- a/src/plugins/android/qandroidwebview.cpp +++ b/src/plugins/android/qandroidwebview.cpp @@ -225,10 +225,10 @@ void QAndroidWebViewPrivate::setCookie(const QString &domain, const QString &nam void QAndroidWebViewPrivate::deleteCookie(const QString &domain, const QString &name) { QNativeInterface::QAndroidApplication::runOnAndroidMainThread([=]() { - m_viewController.callMethod<void>("setCookie", + m_viewController.callMethod<void>("removeCookie", "(Ljava/lang/String;Ljava/lang/String;)V", static_cast<jstring>(QJniObject::fromString(domain).object()), - static_cast<jstring>(QJniObject::fromString(name + "=" + "").object())); + static_cast<jstring>(QJniObject::fromString(name.split(u'=').at(0) + u'=').object())); }); } @@ -437,6 +437,44 @@ static void c_onReceivedError(JNIEnv *env, Q_EMIT wc->loadingChanged(loadRequest); } +static void c_onCookieAdded(JNIEnv *env, + jobject thiz, + jlong id, + jboolean result, + jstring domain, + jstring name) +{ + Q_UNUSED(env); + Q_UNUSED(thiz); + + if (result) { + const WebViews &wv = (*g_webViews); + QAndroidWebViewPrivate *wc = wv[id]; + if (!wc) + return; + Q_EMIT wc->cookieAdded(QJniObject(domain).toString(), QJniObject(name).toString()); + } +} + +static void c_onCookieRemoved(JNIEnv *env, + jobject thiz, + jlong id, + jboolean result, + jstring domain, + jstring name) +{ + Q_UNUSED(env); + Q_UNUSED(thiz); + + if (result) { + const WebViews &wv = (*g_webViews); + QAndroidWebViewPrivate *wc = wv[id]; + if (!wc) + return; + Q_EMIT wc->cookieRemoved(QJniObject(domain).toString(), QJniObject(name).toString()); + } +} + JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* /*reserved*/) { static bool initialized = false; @@ -467,7 +505,9 @@ JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* /*reserved*/) {"c_onReceivedIcon", "(JLandroid/graphics/Bitmap;)V", reinterpret_cast<void *>(c_onReceivedIcon)}, {"c_onReceivedTitle", "(JLjava/lang/String;)V", reinterpret_cast<void *>(c_onReceivedTitle)}, {"c_onRunJavaScriptResult", "(JJLjava/lang/String;)V", reinterpret_cast<void *>(c_onRunJavaScriptResult)}, - {"c_onReceivedError", "(JILjava/lang/String;Ljava/lang/String;)V", reinterpret_cast<void *>(c_onReceivedError)} + {"c_onReceivedError", "(JILjava/lang/String;Ljava/lang/String;)V", reinterpret_cast<void *>(c_onReceivedError)}, + {"c_onCookieAdded", "(JZLjava/lang/String;Ljava/lang/String;)V", reinterpret_cast<void *>(c_onCookieAdded)}, + {"c_onCookieRemoved", "(JZLjava/lang/String;Ljava/lang/String;)V", reinterpret_cast<void *>(c_onCookieRemoved)} }; const int nMethods = sizeof(methods) / sizeof(methods[0]); |