summaryrefslogtreecommitdiffstats
path: root/src/plugins/android/qandroidwebview.cpp
diff options
context:
space:
mode:
authorChristian StrΓΈmme <christian.stromme@qt.io>2022-04-22 15:32:11 +0200
committerChristian StrΓΈmme <christian.stromme@qt.io>2022-05-09 12:38:03 +0200
commit3702c4ccc19155840b3058631acf5cc015561df0 (patch)
treea692b6cc686a7c13d11363909033d94ee6d13dcd /src/plugins/android/qandroidwebview.cpp
parenta9a707de9279622d2db170ce76d44603e6674cf2 (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.cpp46
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]);