Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qt6-webview for openSUSE:Factory checked in at 2024-04-08 17:38:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qt6-webview (Old) and /work/SRC/openSUSE:Factory/.qt6-webview.new.1905 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qt6-webview" Mon Apr 8 17:38:19 2024 rev:16 rq:1165814 version:6.7.0 Changes: -------- --- /work/SRC/openSUSE:Factory/qt6-webview/qt6-webview.changes 2024-03-28 14:11:51.092064728 +0100 +++ /work/SRC/openSUSE:Factory/.qt6-webview.new.1905/qt6-webview.changes 2024-04-08 17:50:10.565044199 +0200 @@ -1,0 +2,6 @@ +Tue Apr 2 13:40:06 UTC 2024 - Christophe Marin <christo...@krop.fr> + +- Update to 6.7.0: + * https://www.qt.io/blog/qt-6.7-released + +------------------------------------------------------------------- Old: ---- qtwebview-everywhere-src-6.6.3.tar.xz New: ---- qtwebview-everywhere-src-6.7.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qt6-webview.spec ++++++ --- /var/tmp/diff_new_pack.cGtfDN/_old 2024-04-08 17:50:11.121064720 +0200 +++ /var/tmp/diff_new_pack.cGtfDN/_new 2024-04-08 17:50:11.125064867 +0200 @@ -16,8 +16,8 @@ # -%define real_version 6.6.3 -%define short_version 6.6 +%define real_version 6.7.0 +%define short_version 6.7 %define tar_name qtwebview-everywhere-src %define tar_suffix %{nil} # @@ -27,7 +27,7 @@ %endif # Name: qt6-webview%{?pkg_suffix} -Version: 6.6.3 +Version: 6.7.0 Release: 0 Summary: Qt 6 WebView library License: LGPL-3.0-only OR (GPL-2.0-only OR GPL-3.0-or-later) @@ -46,7 +46,7 @@ BuildRequires: cmake(Qt6WebEngineCore) = %{real_version} BuildRequires: cmake(Qt6WebEngineQuick) = %{real_version} # Only available where qtwebengine is -ExclusiveArch: aarch64 x86_64 riscv64 +ExclusiveArch: aarch64 x86_64 %x86_64 riscv64 %if "%{qt6_flavor}" == "docs" BuildRequires: qt6-tools %{qt6_doc_packages} ++++++ qtwebview-everywhere-src-6.6.3.tar.xz -> qtwebview-everywhere-src-6.7.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebview-everywhere-src-6.6.3/.cmake.conf new/qtwebview-everywhere-src-6.7.0/.cmake.conf --- old/qtwebview-everywhere-src-6.6.3/.cmake.conf 2024-03-19 15:23:24.000000000 +0100 +++ new/qtwebview-everywhere-src-6.7.0/.cmake.conf 2024-03-23 03:14:31.000000000 +0100 @@ -1,3 +1,4 @@ -set(QT_REPO_MODULE_VERSION "6.6.3") +set(QT_REPO_MODULE_VERSION "6.7.0") set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1") set(QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_AS_CONST=1") +list(APPEND QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_FOREACH=1") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebview-everywhere-src-6.6.3/.tag new/qtwebview-everywhere-src-6.7.0/.tag --- old/qtwebview-everywhere-src-6.6.3/.tag 2024-03-19 15:23:24.000000000 +0100 +++ new/qtwebview-everywhere-src-6.7.0/.tag 2024-03-23 03:14:31.000000000 +0100 @@ -1 +1 @@ -2ba692f13a218edd824ae6307791faeb24c5a48b +7548ee6677e7e9c02f51edff8676c1c29e2d108f diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebview-everywhere-src-6.6.3/coin/axivion/ci_config_linux.json new/qtwebview-everywhere-src-6.7.0/coin/axivion/ci_config_linux.json --- old/qtwebview-everywhere-src-6.6.3/coin/axivion/ci_config_linux.json 2024-03-19 15:23:24.000000000 +0100 +++ new/qtwebview-everywhere-src-6.7.0/coin/axivion/ci_config_linux.json 2024-03-23 03:14:31.000000000 +0100 @@ -1,9 +1,5 @@ { "Project": { - "Git": { - "_active": true, - "sourceserver_gitdir": "/data/axivion/databases/$(env:TESTED_MODULE_COIN).git" - }, "BuildSystemIntegration": { "child_order": [ "GCCSetup", @@ -32,29 +28,14 @@ "build/qml/*/lib*.so*.ir" ], "ir": "build/$(env:TESTED_MODULE_COIN).ir" - }, - "Project-GlobalOptions": { - "directory": "../work/qt/$(env:TESTED_MODULE_COIN)", - "ir": "build/$(env:TESTED_MODULE_COIN).ir", - "name": "qt_$(env:TESTED_MODULE_COIN)_dev_$(env:TARGET_OS_COIN)" - } - }, - "Results": { - "Dashboard": { - "dashboard_url": "https://axivion-srv.ci.qt.io/axivion/" - }, - "Database": { - "ci_mode": { - "directory": "/data/axivion/databases" - } } }, "_Format": "1.0", - "_Version": "trunk-9e0ef9c5818", + "_Version": "7.6.2", "_VersionNum": [ 7, 6, - 9999, - 11489 + 2, + 12725 ] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebview-everywhere-src-6.6.3/dependencies.yaml new/qtwebview-everywhere-src-6.7.0/dependencies.yaml --- old/qtwebview-everywhere-src-6.6.3/dependencies.yaml 2024-03-19 15:23:24.000000000 +0100 +++ new/qtwebview-everywhere-src-6.7.0/dependencies.yaml 2024-03-23 03:14:31.000000000 +0100 @@ -1,7 +1,7 @@ dependencies: ../qtdeclarative: - ref: ab5521fd1a637739c7e91def84caa84426055aff + ref: e6d14fcdc95713f65367499629f93fb1f1e35ec9 required: true ../qtwebengine: - ref: ee8f63ea4b325404529f231273adf1fb6eb874d1 + ref: 1a3e3a233d91037215851ac2821397fc9a846e64 required: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebview-everywhere-src-6.6.3/examples/webview/CMakeLists.txt new/qtwebview-everywhere-src-6.7.0/examples/webview/CMakeLists.txt --- old/qtwebview-everywhere-src-6.6.3/examples/webview/CMakeLists.txt 2024-03-19 15:23:24.000000000 +0100 +++ new/qtwebview-everywhere-src-6.7.0/examples/webview/CMakeLists.txt 2024-03-23 03:14:31.000000000 +0100 @@ -1,6 +1,6 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause -if(TARGET Qt::WebView) +if(TARGET Qt6::WebView) qt_internal_add_example(minibrowser) endif() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebview-everywhere-src-6.6.3/examples/webview/minibrowser/CMakeLists.txt new/qtwebview-everywhere-src-6.7.0/examples/webview/minibrowser/CMakeLists.txt --- old/qtwebview-everywhere-src-6.6.3/examples/webview/minibrowser/CMakeLists.txt 2024-03-19 15:23:24.000000000 +0100 +++ new/qtwebview-everywhere-src-6.7.0/examples/webview/minibrowser/CMakeLists.txt 2024-03-23 03:14:31.000000000 +0100 @@ -24,11 +24,11 @@ ) target_link_libraries(minibrowser PUBLIC - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick - Qt::WebView + Qt6::Core + Qt6::Gui + Qt6::Qml + Qt6::Quick + Qt6::WebView ) # Resources: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebview-everywhere-src-6.6.3/src/jar/src/org/qtproject/qt/android/view/QtAndroidWebViewController.java new/qtwebview-everywhere-src-6.7.0/src/jar/src/org/qtproject/qt/android/view/QtAndroidWebViewController.java --- old/qtwebview-everywhere-src-6.6.3/src/jar/src/org/qtproject/qt/android/view/QtAndroidWebViewController.java 2024-03-19 15:23:24.000000000 +0100 +++ new/qtwebview-everywhere-src-6.7.0/src/jar/src/org/qtproject/qt/android/view/QtAndroidWebViewController.java 2024-03-23 03:14:31.000000000 +0100 @@ -59,8 +59,8 @@ private native void c_onReceivedTitle(long id, String title); private native void c_onRunJavaScriptResult(long id, long callbackId, String result); private native void c_onReceivedError(long id, int errorCode, String description, String url); - private native void c_onCookieAdded(long id, boolean result, String domain, String name); - private native void c_onCookieRemoved(long id, boolean result, String domain, String name); + private static native void c_onCookieAdded(long id, boolean result, String domain, String name); + private static native void c_onCookieRemoved(long id, boolean result, String domain, String name); // We need to block the UI thread in some cases, if it takes to long we should timeout before // ANR kicks in... Usually the hard limit is set to 10s and if exceed that then we're in trouble. @@ -627,7 +627,7 @@ }); } - private void setCookieImp(final String url, final String cookieString, ValueCallback<Boolean> callback) + private static void setCookieImp(final String url, final String cookieString, ValueCallback<Boolean> callback) { CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); @@ -639,13 +639,13 @@ } } - public void setCookie(final String url, final String cookieString) + public static void setCookie(final long id, final String url, final String cookieString) { setCookieImp(url, cookieString, new ValueCallback<Boolean>() { @Override public void onReceiveValue(Boolean value) { try { - c_onCookieAdded(m_id, value, url, cookieString.split("=")[0]); + c_onCookieAdded(id, value, url, cookieString.split("=")[0]); } catch (Exception e) { e.printStackTrace(); } @@ -653,7 +653,7 @@ }); } - private boolean hasValidCookie(final String url, final String cookieString) + private static boolean hasValidCookie(final String url, final String cookieString) { CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeExpiredCookie(); @@ -677,12 +677,12 @@ return cookieFound; } - private String getExpireString() + private static String getExpireString() { return "expires=\"Thu, 1 Jan 1970 00:00:00 GMT\""; } - public void removeCookie(final String url, final String cookieString) + public static void removeCookie(final long id, final String url, final String cookieString) { // We need to work with what we have // 1. Check if there's cookies for the url @@ -696,7 +696,7 @@ try { // 3. Verify that the cookie was indeed removed final boolean removed = (hadCookie && !hasValidCookie(url, cookieString)); - c_onCookieRemoved(m_id, removed, url, cookieString.split("=")[0]); + c_onCookieRemoved(id, removed, url, cookieString.split("=")[0]); } catch (Exception e) { e.printStackTrace(); } @@ -705,7 +705,7 @@ } } - public void removeCookies() { + public static void removeCookies() { try { CookieManager.getInstance().removeAllCookies(null); } catch (Exception e) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebview-everywhere-src-6.6.3/src/plugins/android/qandroidwebview.cpp new/qtwebview-everywhere-src-6.7.0/src/plugins/android/qandroidwebview.cpp --- old/qtwebview-everywhere-src-6.6.3/src/plugins/android/qandroidwebview.cpp 2024-03-19 15:23:24.000000000 +0100 +++ new/qtwebview-everywhere-src-6.7.0/src/plugins/android/qandroidwebview.cpp 2024-03-23 03:14:31.000000000 +0100 @@ -7,24 +7,29 @@ #include <QtCore/private/qjnihelpers_p.h> #include <QtCore/qjniobject.h> -#include <QtCore/qmap.h> -#include <android/bitmap.h> -#include <QtGui/qguiapplication.h> +#include <QtCore/qset.h> #include <QtCore/qjsondocument.h> #include <QtCore/qjsonobject.h> #include <QtCore/qurl.h> #include <QtCore/qdebug.h> +#include <QtCore/qthread.h> +#include <QtCore/qabstracteventdispatcher.h> + +#include <QtGui/qguiapplication.h> -#include <QAbstractEventDispatcher> -#include <QThread> +#include <android/bitmap.h> +#include <android/log.h> QT_BEGIN_NAMESPACE -QAndroidWebViewSettingsPrivate::QAndroidWebViewSettingsPrivate(QJniObject viewController, QObject *p) - : QAbstractWebViewSettings(p) - , m_viewController(viewController) -{ +Q_DECLARE_JNI_CLASS(Bitmap, "android/graphics/Bitmap"); +using namespace QtJniTypes; +using namespace Qt::StringLiterals; + +QAndroidWebViewSettingsPrivate::QAndroidWebViewSettingsPrivate(const WebViewController &viewController, QObject *p) + : QAbstractWebViewSettings(p), m_viewController(viewController) +{ } bool QAndroidWebViewSettingsPrivate::localStorageEnabled() const @@ -49,51 +54,30 @@ void QAndroidWebViewSettingsPrivate::setLocalContentCanAccessFileUrls(bool enabled) { - m_viewController.callMethod<void>("setAllowFileAccessFromFileURLs", "(Z)V", enabled); + m_viewController.callMethod<void>("setAllowFileAccessFromFileURLs", enabled); } void QAndroidWebViewSettingsPrivate::setJavascriptEnabled(bool enabled) { - m_viewController.callMethod<void>("setJavaScriptEnabled", "(Z)V", enabled); + m_viewController.callMethod<void>("setJavaScriptEnabled", enabled); } void QAndroidWebViewSettingsPrivate::setLocalStorageEnabled(bool enabled) { - m_viewController.callMethod<void>("setLocalStorageEnabled", "(Z)V", enabled); + m_viewController.callMethod<void>("setLocalStorageEnabled", enabled); } void QAndroidWebViewSettingsPrivate::setAllowFileAccess(bool enabled) { - m_viewController.callMethod<void>("setAllowFileAccess", "(Z)V", enabled); + m_viewController.callMethod<void>("setAllowFileAccess", enabled); } -static const char qtAndroidWebViewControllerClass[] = "org/qtproject/qt/android/view/QtAndroidWebViewController"; - -//static bool favIcon(JNIEnv *env, jobject icon, QImage *image) -//{ -// // TODO: -// AndroidBitmapInfo bitmapInfo; -// if (AndroidBitmap_getInfo(env, icon, &bitmapInfo) != ANDROID_BITMAP_RESULT_SUCCESS) -// return false; - -// void *pixelData; -// if (AndroidBitmap_lockPixels(env, icon, &pixelData) != ANDROID_BITMAP_RESULT_SUCCESS) -// return false; - -// *image = QImage::fromData(static_cast<const uchar *>(pixelData), bitmapInfo.width * bitmapInfo.height); -// AndroidBitmap_unlockPixels(env, icon); - -// return true; -//} - -typedef QMap<quintptr, QAndroidWebViewPrivate *> WebViews; +typedef QSet<QAndroidWebViewPrivate *> WebViews; Q_GLOBAL_STATIC(WebViews, g_webViews) QAndroidWebViewPrivate::QAndroidWebViewPrivate(QObject *p) - : QAbstractWebView(p) - , m_id(reinterpret_cast<quintptr>(this)) - , m_callbackId(0) - , m_window(0) + : QAbstractWebView(p) , m_callbackId(0) , m_window(nullptr) + , m_viewController(nullptr) , m_webView(nullptr) { // QtAndroidWebViewController constructor blocks a qGuiThread until // the WebView is created and configured in UI thread. @@ -104,26 +88,22 @@ eventDispatcher->processEvents( QEventLoop::ExcludeUserInputEvents|QEventLoop::ExcludeSocketNotifiers); } - m_viewController = QJniObject(qtAndroidWebViewControllerClass, - "(Landroid/app/Activity;J)V", - QtAndroidPrivate::activity(), - m_id); + m_viewController = WebViewController(QtAndroidPrivate::activity(), reinterpret_cast<jlong>(this)); QtAndroidPrivate::releaseAndroidDeadlockProtector(); - m_webView = m_viewController.callObjectMethod("getWebView", - "()Landroid/webkit/WebView;"); + m_webView = m_viewController.callMethod<WebView>("getWebView"); m_settings = new QAndroidWebViewSettingsPrivate(m_viewController, this); m_window = QWindow::fromWinId(reinterpret_cast<WId>(m_webView.object())); - g_webViews->insert(m_id, this); + g_webViews->insert(this); connect(qApp, &QGuiApplication::applicationStateChanged, this, &QAndroidWebViewPrivate::onApplicationStateChanged); } QAndroidWebViewPrivate::~QAndroidWebViewPrivate() { - g_webViews->take(m_id); + g_webViews->remove(this); if (m_window != 0) { m_window->setVisible(false); m_window->setParent(0); @@ -135,52 +115,40 @@ QString QAndroidWebViewPrivate::httpUserAgent() const { - return QString( m_viewController.callObjectMethod<jstring>("getUserAgent").toString()); + return m_viewController.callMethod<QString>("getUserAgent"); } void QAndroidWebViewPrivate::setHttpUserAgent(const QString &userAgent) { - m_viewController.callMethod<void>("setUserAgent", - "(Ljava/lang/String;)V", - QJniObject::fromString(userAgent).object()); + m_viewController.callMethod<void>("setUserAgent", userAgent); Q_EMIT httpUserAgentChanged(userAgent); } QUrl QAndroidWebViewPrivate::url() const { - return QUrl::fromUserInput(m_viewController.callObjectMethod<jstring>("getUrl").toString()); + return QUrl::fromUserInput(m_viewController.callMethod<QString>("getUrl")); } void QAndroidWebViewPrivate::setUrl(const QUrl &url) { - m_viewController.callMethod<void>("loadUrl", - "(Ljava/lang/String;)V", - QJniObject::fromString(url.toString()).object()); + m_viewController.callMethod<void>("loadUrl", url.toString()); } void QAndroidWebViewPrivate::loadHtml(const QString &html, const QUrl &baseUrl) { - const QJniObject &htmlString = QJniObject::fromString(html); - const QJniObject &mimeTypeString = QJniObject::fromString(QLatin1String("text/html;charset=UTF-8")); - - baseUrl.isEmpty() ? m_viewController.callMethod<void>("loadData", - "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", - htmlString.object(), - mimeTypeString.object(), - 0) + const QString mimeTypeString = u"text/html;charset=UTF-8"_s; + baseUrl.isEmpty() ? m_viewController.callMethod<void>("loadData", html, mimeTypeString, + jstring(nullptr)) : m_viewController.callMethod<void>("loadDataWithBaseURL", - "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", - QJniObject::fromString(baseUrl.toString()).object(), - htmlString.object(), - mimeTypeString.object(), - 0, - 0); + baseUrl.toString(), + html, mimeTypeString, + jstring(nullptr), jstring(nullptr)); } bool QAndroidWebViewPrivate::canGoBack() const { - return m_viewController.callMethod<jboolean>("canGoBack"); + return m_viewController.callMethod<bool>("canGoBack"); } void QAndroidWebViewPrivate::goBack() @@ -190,7 +158,7 @@ bool QAndroidWebViewPrivate::canGoForward() const { - return m_viewController.callMethod<jboolean>("canGoForward"); + return m_viewController.callMethod<bool>("canGoForward"); } void QAndroidWebViewPrivate::goForward() @@ -205,7 +173,7 @@ QString QAndroidWebViewPrivate::title() const { - return m_viewController.callObjectMethod<jstring>("getTitle").toString(); + return m_viewController.callMethod<QString>("getTitle"); } void QAndroidWebViewPrivate::setGeometry(const QRect &geometry) @@ -233,10 +201,7 @@ Q_EMIT javaScriptResult(callbackId, QVariant()); } - m_viewController.callMethod<void>("runJavaScript", - "(Ljava/lang/String;J)V", - static_cast<jstring>(QJniObject::fromString(script).object()), - callbackId); + m_viewController.callMethod<void>("runJavaScript", script, jlong(callbackId)); } QAbstractWebViewSettings *QAndroidWebViewPrivate::getSettings() const @@ -247,27 +212,23 @@ void QAndroidWebViewPrivate::setCookie(const QString &domain, const QString &name, const QString &value) { QNativeInterface::QAndroidApplication::runOnAndroidMainThread([=]() { - m_viewController.callMethod<void>("setCookie", - "(Ljava/lang/String;Ljava/lang/String;)V", - static_cast<jstring>(QJniObject::fromString(domain).object()), - static_cast<jstring>(QJniObject::fromString(name + "=" + value).object())); + const QString cookie = name + u'=' + value; + WebViewController::callStaticMethod<void>("setCookie", jlong(this), domain, cookie); }); } void QAndroidWebViewPrivate::deleteCookie(const QString &domain, const QString &name) { QNativeInterface::QAndroidApplication::runOnAndroidMainThread([=]() { - 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.split(u'=').at(0) + u'=').object())); + const QString cookie = name.split(u'=').at(0) + u'='; + WebViewController::callStaticMethod<void>("removeCookie", jlong(this), domain, cookie); }); } void QAndroidWebViewPrivate::deleteAllCookies() { QNativeInterface::QAndroidApplication::runOnAndroidMainThread([=]() { - m_viewController.callMethod<void>("removeCookies"); + WebViewController::callStaticMethod<void>("removeCookies"); }); } @@ -278,12 +239,12 @@ int QAndroidWebViewPrivate::loadProgress() const { - return m_viewController.callMethod<jint>("getProgress"); + return m_viewController.callMethod<int>("getProgress"); } bool QAndroidWebViewPrivate::isLoading() const { - return m_viewController.callMethod<jboolean>("isLoading"); + return m_viewController.callMethod<bool>("isLoading"); } void QAndroidWebViewPrivate::setParentView(QObject *view) @@ -328,9 +289,9 @@ Q_UNUSED(env); Q_UNUSED(thiz); - const WebViews &wv = (*g_webViews); - QAndroidWebViewPrivate *wc = static_cast<QAndroidWebViewPrivate *>(wv[id]); - if (!wc) + Q_ASSERT(id); + QAndroidWebViewPrivate *wc = reinterpret_cast<QAndroidWebViewPrivate *>(id); + if (!g_webViews->contains(wc)) return; const QString &resultString = QJniObject(result).toString(); @@ -349,6 +310,7 @@ jsonValue.isNull() ? resultString : jsonValue.toVariant()); } +Q_DECLARE_JNI_NATIVE_METHOD(c_onRunJavaScriptResult) static void c_onPageFinished(JNIEnv *env, jobject thiz, @@ -357,9 +319,10 @@ { Q_UNUSED(env); Q_UNUSED(thiz); - const WebViews &wv = (*g_webViews); - QAndroidWebViewPrivate *wc = wv[id]; - if (!wc) + + Q_ASSERT(id); + QAndroidWebViewPrivate *wc = reinterpret_cast<QAndroidWebViewPrivate *>(id); + if (!g_webViews->contains(wc)) return; QWebViewLoadRequestPrivate loadRequest(QUrl(QJniObject(url).toString()), @@ -367,20 +330,23 @@ QString()); Q_EMIT wc->loadingChanged(loadRequest); } +Q_DECLARE_JNI_NATIVE_METHOD(c_onPageFinished) static void c_onPageStarted(JNIEnv *env, jobject thiz, jlong id, jstring url, - jobject icon) + Bitmap icon) { Q_UNUSED(env); Q_UNUSED(thiz); Q_UNUSED(icon); - const WebViews &wv = (*g_webViews); - QAndroidWebViewPrivate *wc = wv[id]; - if (!wc) + + Q_ASSERT(id); + QAndroidWebViewPrivate *wc = reinterpret_cast<QAndroidWebViewPrivate *>(id); + if (!g_webViews->contains(wc)) return; + QWebViewLoadRequestPrivate loadRequest(QUrl(QJniObject(url).toString()), QWebView::LoadStartedStatus, QString()); @@ -393,6 +359,7 @@ // if (favIcon(env, icon, &image)) // Q_EMIT wc->iconChanged(image); } +Q_DECLARE_JNI_NATIVE_METHOD(c_onPageStarted) static void c_onProgressChanged(JNIEnv *env, jobject thiz, @@ -401,36 +368,38 @@ { Q_UNUSED(env); Q_UNUSED(thiz); - const WebViews &wv = (*g_webViews); - QAndroidWebViewPrivate *wc = wv[id]; - if (!wc) + + Q_ASSERT(id); + QAndroidWebViewPrivate *wc = reinterpret_cast<QAndroidWebViewPrivate *>(id); + if (!g_webViews->contains(wc)) return; Q_EMIT wc->loadProgressChanged(newProgress); } +Q_DECLARE_JNI_NATIVE_METHOD(c_onProgressChanged) static void c_onReceivedIcon(JNIEnv *env, jobject thiz, jlong id, - jobject icon) + Bitmap icon) { Q_UNUSED(env); Q_UNUSED(thiz); - Q_UNUSED(id); Q_UNUSED(icon); - const WebViews &wv = (*g_webViews); - QAndroidWebViewPrivate *wc = wv[id]; - if (!wc) + Q_ASSERT(id); + QAndroidWebViewPrivate *wc = reinterpret_cast<QAndroidWebViewPrivate *>(id); + if (!g_webViews->contains(wc)) return; - if (!icon) + if (!icon.isValid()) return; // QImage image; // if (favIcon(env, icon, &image)) // Q_EMIT wc->iconChanged(image); } +Q_DECLARE_JNI_NATIVE_METHOD(c_onReceivedIcon) static void c_onReceivedTitle(JNIEnv *env, jobject thiz, @@ -439,14 +408,16 @@ { Q_UNUSED(env); Q_UNUSED(thiz); - const WebViews &wv = (*g_webViews); - QAndroidWebViewPrivate *wc = wv[id]; - if (!wc) + + Q_ASSERT(id); + QAndroidWebViewPrivate *wc = reinterpret_cast<QAndroidWebViewPrivate *>(id); + if (!g_webViews->contains(wc)) return; const QString &qTitle = QJniObject(title).toString(); Q_EMIT wc->titleChanged(qTitle); } +Q_DECLARE_JNI_NATIVE_METHOD(c_onReceivedTitle) static void c_onReceivedError(JNIEnv *env, jobject thiz, @@ -459,18 +430,20 @@ Q_UNUSED(thiz); Q_UNUSED(errorCode); - const WebViews &wv = (*g_webViews); - QAndroidWebViewPrivate *wc = wv[id]; - if (!wc) + Q_ASSERT(id); + QAndroidWebViewPrivate *wc = reinterpret_cast<QAndroidWebViewPrivate *>(id); + if (!g_webViews->contains(wc)) return; + QWebViewLoadRequestPrivate loadRequest(QUrl(QJniObject(url).toString()), QWebView::LoadFailedStatus, QJniObject(description).toString()); Q_EMIT wc->loadingChanged(loadRequest); } +Q_DECLARE_JNI_NATIVE_METHOD(c_onReceivedError) static void c_onCookieAdded(JNIEnv *env, - jobject thiz, + jclass thiz, jlong id, jboolean result, jstring domain, @@ -479,17 +452,18 @@ Q_UNUSED(env); Q_UNUSED(thiz); - if (result) { - const WebViews &wv = (*g_webViews); - QAndroidWebViewPrivate *wc = wv[id]; - if (!wc) - return; + Q_ASSERT(id); + QAndroidWebViewPrivate *wc = reinterpret_cast<QAndroidWebViewPrivate *>(id); + if (!g_webViews->contains(wc)) + return; + + if (result) Q_EMIT wc->cookieAdded(QJniObject(domain).toString(), QJniObject(name).toString()); - } } +Q_DECLARE_JNI_NATIVE_METHOD(c_onCookieAdded) static void c_onCookieRemoved(JNIEnv *env, - jobject thiz, + jclass thiz, jlong id, jboolean result, jstring domain, @@ -498,54 +472,37 @@ Q_UNUSED(env); Q_UNUSED(thiz); - if (result) { - const WebViews &wv = (*g_webViews); - QAndroidWebViewPrivate *wc = wv[id]; - if (!wc) - return; + Q_ASSERT(id); + QAndroidWebViewPrivate *wc = reinterpret_cast<QAndroidWebViewPrivate *>(id); + if (!g_webViews->contains(wc)) + return; + + if (result) Q_EMIT wc->cookieRemoved(QJniObject(domain).toString(), QJniObject(name).toString()); - } } +Q_DECLARE_JNI_NATIVE_METHOD(c_onCookieRemoved) -JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* /*reserved*/) +JNIEXPORT jint JNI_OnLoad(JavaVM* /* vm */, void* /*reserved*/) { static bool initialized = false; if (initialized) return JNI_VERSION_1_6; initialized = true; - typedef union { - JNIEnv *nativeEnvironment; - void *venv; - } UnionJNIEnvToVoid; - - UnionJNIEnvToVoid uenv; - uenv.venv = NULL; - - if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_6) != JNI_OK) - return JNI_ERR; - - JNIEnv *env = uenv.nativeEnvironment; - jclass clazz = QtAndroidPrivate::findClass(qtAndroidWebViewControllerClass, env); - if (!clazz) - return JNI_ERR; - - JNINativeMethod methods[] = { - {"c_onPageFinished", "(JLjava/lang/String;)V", reinterpret_cast<void *>(c_onPageFinished)}, - {"c_onPageStarted", "(JLjava/lang/String;Landroid/graphics/Bitmap;)V", reinterpret_cast<void *>(c_onPageStarted)}, - {"c_onProgressChanged", "(JI)V", reinterpret_cast<void *>(c_onProgressChanged)}, - {"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_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]); - - if (env->RegisterNatives(clazz, methods, nMethods) != JNI_OK) + if (!WebViewController::registerNativeMethods({ + Q_JNI_NATIVE_METHOD(c_onRunJavaScriptResult), + Q_JNI_NATIVE_METHOD(c_onPageFinished), + Q_JNI_NATIVE_METHOD(c_onPageStarted), + Q_JNI_NATIVE_METHOD(c_onProgressChanged), + Q_JNI_NATIVE_METHOD(c_onReceivedIcon), + Q_JNI_NATIVE_METHOD(c_onReceivedTitle), + Q_JNI_NATIVE_METHOD(c_onReceivedError), + Q_JNI_NATIVE_METHOD(c_onCookieAdded), + Q_JNI_NATIVE_METHOD(c_onCookieRemoved), + })) { + qCritical("Failed to register native methods for WebViewController"); return JNI_ERR; + } return JNI_VERSION_1_6; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebview-everywhere-src-6.6.3/src/plugins/android/qandroidwebview_p.h new/qtwebview-everywhere-src-6.7.0/src/plugins/android/qandroidwebview_p.h --- old/qtwebview-everywhere-src-6.6.3/src/plugins/android/qandroidwebview_p.h 2024-03-19 15:23:24.000000000 +0100 +++ new/qtwebview-everywhere-src-6.7.0/src/plugins/android/qandroidwebview_p.h 2024-03-23 03:14:31.000000000 +0100 @@ -19,16 +19,21 @@ #include <QtCore/qurl.h> #include <QtGui/qwindow.h> #include <QtCore/qjniobject.h> +#include <QtCore/qjnitypes.h> #include <private/qabstractwebview_p.h> +Q_DECLARE_JNI_CLASS(WebViewController, "org/qtproject/qt/android/view/QtAndroidWebViewController"); +Q_DECLARE_JNI_CLASS(WebView, "android/webkit/WebView"); + QT_BEGIN_NAMESPACE class QAndroidWebViewSettingsPrivate : public QAbstractWebViewSettings { Q_OBJECT public: - explicit QAndroidWebViewSettingsPrivate(QJniObject viewController, QObject *p = nullptr); + explicit QAndroidWebViewSettingsPrivate(const QtJniTypes::WebViewController &viewController, + QObject *p = nullptr); bool localStorageEnabled() const; bool javascriptEnabled() const; @@ -42,7 +47,7 @@ void setAllowFileAccess(bool enabled); private: - QJniObject m_viewController; + QtJniTypes::WebViewController m_viewController; }; class QAndroidWebViewPrivate : public QAbstractWebView @@ -87,11 +92,10 @@ void onApplicationStateChanged(Qt::ApplicationState state); private: - quintptr m_id; quint64 m_callbackId; QWindow *m_window; - QJniObject m_viewController; - QJniObject m_webView; + QtJniTypes::WebViewController m_viewController; + QtJniTypes::WebView m_webView; QAndroidWebViewSettingsPrivate *m_settings; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebview-everywhere-src-6.6.3/src/plugins/darwin/qdarwinwebview_p.h new/qtwebview-everywhere-src-6.7.0/src/plugins/darwin/qdarwinwebview_p.h --- old/qtwebview-everywhere-src-6.6.3/src/plugins/darwin/qdarwinwebview_p.h 2024-03-19 15:23:24.000000000 +0100 +++ new/qtwebview-everywhere-src-6.7.0/src/plugins/darwin/qdarwinwebview_p.h 2024-03-23 03:14:31.000000000 +0100 @@ -21,6 +21,8 @@ #include <private/qabstractwebview_p.h> +#include <QtCore/qpointer.h> + #if defined(Q_OS_IOS) && defined(__OBJC__) #include <UIKit/UIGestureRecognizer.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebview-everywhere-src-6.6.3/src/plugins/webengine/qwebenginewebview_p.h new/qtwebview-everywhere-src-6.7.0/src/plugins/webengine/qwebenginewebview_p.h --- old/qtwebview-everywhere-src-6.6.3/src/plugins/webengine/qwebenginewebview_p.h 2024-03-19 15:23:24.000000000 +0100 +++ new/qtwebview-everywhere-src-6.7.0/src/plugins/webengine/qwebenginewebview_p.h 2024-03-23 03:14:31.000000000 +0100 @@ -25,6 +25,8 @@ #include <QtWebEngineQuick/QQuickWebEngineProfile> #include <QtWebEngineQuick/private/qquickwebenginesettings_p.h> +#include <QtCore/qpointer.h> + QT_BEGIN_NAMESPACE class QQuickWebEngineView; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebview-everywhere-src-6.6.3/src/webview/qwebview_p.h new/qtwebview-everywhere-src-6.7.0/src/webview/qwebview_p.h --- old/qtwebview-everywhere-src-6.6.3/src/webview/qwebview_p.h 2024-03-19 15:23:24.000000000 +0100 +++ new/qtwebview-everywhere-src-6.7.0/src/webview/qwebview_p.h 2024-03-23 03:14:31.000000000 +0100 @@ -23,6 +23,8 @@ #include <QtCore/qvariant.h> #include <QtGui/qimage.h> +#include <QtCore/qpointer.h> + QT_BEGIN_NAMESPACE class QWebViewLoadRequestPrivate; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebview-everywhere-src-6.6.3/sync.profile new/qtwebview-everywhere-src-6.7.0/sync.profile --- old/qtwebview-everywhere-src-6.6.3/sync.profile 2024-03-19 15:23:24.000000000 +0100 +++ new/qtwebview-everywhere-src-6.7.0/sync.profile 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +0,0 @@ -%modules = ( # path to module name map - "QtWebView" => "$basedir/src/webview", - "QtWebViewQuick" => "$basedir/src/quick" -); -%moduleheaders = ( # restrict the module headers to those found in relative path -);