Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qt6-webchannel for openSUSE:Factory checked in at 2022-04-20 16:56:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qt6-webchannel (Old) and /work/SRC/openSUSE:Factory/.qt6-webchannel.new.1941 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qt6-webchannel" Wed Apr 20 16:56:11 2022 rev:6 rq:970815 version:6.3.0 Changes: -------- --- /work/SRC/openSUSE:Factory/qt6-webchannel/qt6-webchannel.changes 2022-03-29 18:15:13.787120876 +0200 +++ /work/SRC/openSUSE:Factory/.qt6-webchannel.new.1941/qt6-webchannel.changes 2022-04-20 16:56:32.978579311 +0200 @@ -1,0 +2,11 @@ +Fri Apr 8 11:57:03 UTC 2022 - Christophe Giboudeaux <[email protected]> + +- Update to 6.3.0: + * https://www.qt.io/blog/qt-6.3-released + +------------------------------------------------------------------- +Tue Mar 29 12:28:44 UTC 2022 - Christophe Giboudeaux <[email protected]> + +- Update to 6.3.0-rc + +------------------------------------------------------------------- Old: ---- qtwebchannel-everywhere-src-6.2.4.tar.xz New: ---- qtwebchannel-everywhere-src-6.3.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qt6-webchannel.spec ++++++ --- /var/tmp/diff_new_pack.0cYJoL/_old 2022-04-20 16:56:33.642579931 +0200 +++ /var/tmp/diff_new_pack.0cYJoL/_new 2022-04-20 16:56:33.646579935 +0200 @@ -1,7 +1,7 @@ # # spec file for package qt6-webchannel # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,8 +16,8 @@ # -%define real_version 6.2.4 -%define short_version 6.2 +%define real_version 6.3.0 +%define short_version 6.3 %define tar_name qtwebchannel-everywhere-src %define tar_suffix %{nil} # @@ -27,7 +27,7 @@ %endif # Name: qt6-webchannel%{?pkg_suffix} -Version: 6.2.4 +Version: 6.3.0 Release: 0 Summary: Qt 6 WebChannel library License: LGPL-3.0-only OR (GPL-2.0-only OR GPL-3.0-or-later) @@ -36,6 +36,7 @@ Source99: qt6-webchannel-rpmlintrc BuildRequires: fdupes BuildRequires: qt6-core-private-devel +BuildRequires: cmake(Qt6Concurrent) BuildRequires: cmake(Qt6Core) BuildRequires: cmake(Qt6Gui) BuildRequires: cmake(Qt6Qml) ++++++ qtwebchannel-everywhere-src-6.2.4.tar.xz -> qtwebchannel-everywhere-src-6.3.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/.QT-ENTERPRISE-LICENSE-AGREEMENT new/qtwebchannel-everywhere-src-6.3.0/.QT-ENTERPRISE-LICENSE-AGREEMENT --- old/qtwebchannel-everywhere-src-6.2.4/.QT-ENTERPRISE-LICENSE-AGREEMENT 2022-03-10 11:21:31.748042600 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/.QT-ENTERPRISE-LICENSE-AGREEMENT 2022-04-06 19:56:41.233723000 +0200 @@ -1,5 +1,5 @@ QT LICENSE AGREEMENT -Agreement version 4.4 +Agreement version 4.4.1 This Qt License Agreement ("Agreement") is a legal agreement for the licensing of Licensed Software (as defined below) between The Qt Company (as defined @@ -233,7 +233,7 @@ United States or a legal entity incorporated outside of the United States or having its registered office outside of the United States, The Qt Company Ltd., a Finnish company with its registered office at - Bertel Jungin aukio D3A, 02600 Espoo, Finland. + Miestentie 7, 02150 Espoo, Finland. "Third-Party Software" shall have the meaning set forth in Section 4. @@ -1054,8 +1054,8 @@ - Appendix 1: Licensed Software details - Appendix 2: Pricing - Appendix 3: Add-on Software details (optional) -- Appendix 4: Non-commercial and educational Licenses (optional) -- Appendix 5: Small business and startup Licenses (optional) +- Appendix 4: Small business and startup Licenses (optional) +- Appendix 5: Non-commercial and educational Licenses (optional) - Appendix 6: License Reporting (optional) - Appendix 7: Marketing Rights (optional) - Appendix 8: Intentionally left blank (optional) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/.cmake.conf new/qtwebchannel-everywhere-src-6.3.0/.cmake.conf --- old/qtwebchannel-everywhere-src-6.2.4/.cmake.conf 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/.cmake.conf 2022-04-06 00:48:10.000000000 +0200 @@ -1,2 +1,2 @@ -set(QT_REPO_MODULE_VERSION "6.2.4") -set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "") +set(QT_REPO_MODULE_VERSION "6.3.0") +set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/.qmake.conf new/qtwebchannel-everywhere-src-6.3.0/.qmake.conf --- old/qtwebchannel-everywhere-src-6.2.4/.qmake.conf 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/.qmake.conf 1970-01-01 01:00:00.000000000 +0100 @@ -1,4 +0,0 @@ -load(qt_build_config) -CONFIG += warning_clean - -MODULE_VERSION = 6.2.4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/.tag new/qtwebchannel-everywhere-src-6.3.0/.tag --- old/qtwebchannel-everywhere-src-6.2.4/.tag 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/.tag 2022-04-06 00:48:10.000000000 +0200 @@ -1 +1 @@ -d6c00c7be359fe25846ed3d95f96afa36c4d11b1 +00b8395603060f46b11a3b5b486a35b3d98b23b2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/CMakeLists.txt new/qtwebchannel-everywhere-src-6.3.0/CMakeLists.txt --- old/qtwebchannel-everywhere-src-6.2.4/CMakeLists.txt 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/CMakeLists.txt 2022-04-06 00:48:10.000000000 +0200 @@ -14,7 +14,7 @@ set(QT_USE_FIXED_QT_ADD_RESOURCE_BASE TRUE) find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core) # special case -find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS Quick Test QuickTest WebSockets) # special case +find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS Concurrent Quick Test QuickTest WebSockets) # special case if(INTEGRITY) message(NOTICE "Skipping the build as the condition \"NOT INTEGRITY\" is not met.") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/dependencies.yaml new/qtwebchannel-everywhere-src-6.3.0/dependencies.yaml --- old/qtwebchannel-everywhere-src-6.2.4/dependencies.yaml 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/dependencies.yaml 2022-04-06 00:48:10.000000000 +0200 @@ -1,10 +1,10 @@ dependencies: ../qtbase: - ref: d3b5353380797f3b67599ccebc5dc916057681e5 + ref: 9554d315aa74eaba1726405ee09117e2ebc6111f required: true ../qtdeclarative: - ref: 26140891b4b77e2e8292f75e9d20f5798a2bd247 + ref: 2a45651292f45eca3d1f9fa518a8ebfcac647f18 required: false ../qtwebsockets: - ref: 6dd991743fbd5b997392ac24997f97822df82053 + ref: d70576339842499c76c86444667500fa7244aa1a required: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/examples/CMakeLists.txt new/qtwebchannel-everywhere-src-6.3.0/examples/CMakeLists.txt --- old/qtwebchannel-everywhere-src-6.2.4/examples/CMakeLists.txt 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/examples/CMakeLists.txt 2022-04-06 00:48:10.000000000 +0200 @@ -1,5 +1,3 @@ -# Generated from examples.pro. - qt_examples_build_begin(EXTERNAL_BUILD) add_subdirectory(webchannel) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/examples/webchannel/CMakeLists.txt new/qtwebchannel-everywhere-src-6.3.0/examples/webchannel/CMakeLists.txt --- old/qtwebchannel-everywhere-src-6.2.4/examples/webchannel/CMakeLists.txt 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/examples/webchannel/CMakeLists.txt 2022-04-06 00:48:10.000000000 +0200 @@ -1,17 +1,14 @@ -# Generated from webchannel.pro. - -# special case begin # These are all TEMPLATE = aux #qt_internal_add_example(nodejs) #qt_internal_add_example(qwclient) #qt_internal_add_example(chatclient-html) -# special case end + if(TARGET Qt::WebSockets) qt_internal_add_example(chatserver-cpp) - # special case begin + # This one is TEMPLATE = aux too #qt_internal_add_example(chatclient-qml) - # special case end + endif() if(TARGET Qt::WebSockets AND TARGET Qt::Widgets) qt_internal_add_example(standalone) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/examples/webchannel/chatserver-cpp/CMakeLists.txt new/qtwebchannel-everywhere-src-6.3.0/examples/webchannel/chatserver-cpp/CMakeLists.txt --- old/qtwebchannel-everywhere-src-6.2.4/examples/webchannel/chatserver-cpp/CMakeLists.txt 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/examples/webchannel/chatserver-cpp/CMakeLists.txt 2022-04-06 00:48:10.000000000 +0200 @@ -1,23 +1,15 @@ -# Generated from chatserver-cpp.pro. - cmake_minimum_required(VERSION 3.16) project(chatserver LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") + set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/webchannel/chatserver-cpp") -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS WebSockets) -find_package(Qt6 COMPONENTS WebChannel) +find_package(Qt6 REQUIRED COMPONENTS Core WebChannel WebSockets) qt_add_executable(chatserver ../shared/websocketclientwrapper.cpp ../shared/websocketclientwrapper.h @@ -25,10 +17,12 @@ chatserver.cpp chatserver.h main.cpp ) + set_target_properties(chatserver PROPERTIES WIN32_EXECUTABLE FALSE MACOSX_BUNDLE TRUE ) + target_link_libraries(chatserver PUBLIC Qt::Core Qt::WebChannel diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/examples/webchannel/standalone/CMakeLists.txt new/qtwebchannel-everywhere-src-6.3.0/examples/webchannel/standalone/CMakeLists.txt --- old/qtwebchannel-everywhere-src-6.2.4/examples/webchannel/standalone/CMakeLists.txt 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/examples/webchannel/standalone/CMakeLists.txt 2022-04-06 00:48:10.000000000 +0200 @@ -1,25 +1,16 @@ -# Generated from standalone.pro. - cmake_minimum_required(VERSION 3.16) project(standalone LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") + set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/webchannel/standalone") -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS Gui) -find_package(Qt6 COMPONENTS WebChannel) -find_package(Qt6 COMPONENTS Widgets) -find_package(Qt6 COMPONENTS WebSockets) +find_package(Qt6 REQUIRED COMPONENTS Core Gui WebChannel WebSockets Widgets) qt_add_executable(standalone ../shared/websocketclientwrapper.cpp ../shared/websocketclientwrapper.h @@ -28,16 +19,17 @@ dialog.cpp dialog.h dialog.ui main.cpp ) + set_target_properties(standalone PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE ) -# special case begin + # pro2cmake generates invalid cmake syntax here target_compile_definitions(standalone PUBLIC "BUILD_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\"" ) -# special case end + target_link_libraries(standalone PUBLIC Qt::Core Qt::Gui diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.2.4/QtWebChannel/private/qmetaobjectpublisher_p.h new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.2.4/QtWebChannel/private/qmetaobjectpublisher_p.h --- old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.2.4/QtWebChannel/private/qmetaobjectpublisher_p.h 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.2.4/QtWebChannel/private/qmetaobjectpublisher_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -#include "../../../../../src/webchannel/qmetaobjectpublisher_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.2.4/QtWebChannel/private/qqmlwebchannelattached_p.h new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.2.4/QtWebChannel/private/qqmlwebchannelattached_p.h --- old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.2.4/QtWebChannel/private/qqmlwebchannelattached_p.h 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.2.4/QtWebChannel/private/qqmlwebchannelattached_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -#include "../../../../../src/webchannel/qqmlwebchannelattached_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.2.4/QtWebChannel/private/qwebchannel_p.h new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.2.4/QtWebChannel/private/qwebchannel_p.h --- old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.2.4/QtWebChannel/private/qwebchannel_p.h 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.2.4/QtWebChannel/private/qwebchannel_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -#include "../../../../../src/webchannel/qwebchannel_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.2.4/QtWebChannel/private/signalhandler_p.h new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.2.4/QtWebChannel/private/signalhandler_p.h --- old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.2.4/QtWebChannel/private/signalhandler_p.h 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.2.4/QtWebChannel/private/signalhandler_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -#include "../../../../../src/webchannel/signalhandler_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.2.4/QtWebChannel/private/variantargument_p.h new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.2.4/QtWebChannel/private/variantargument_p.h --- old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.2.4/QtWebChannel/private/variantargument_p.h 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.2.4/QtWebChannel/private/variantargument_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -#include "../../../../../src/webchannel/variantargument_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.3.0/QtWebChannel/private/qmetaobjectpublisher_p.h new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.3.0/QtWebChannel/private/qmetaobjectpublisher_p.h --- old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.3.0/QtWebChannel/private/qmetaobjectpublisher_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.3.0/QtWebChannel/private/qmetaobjectpublisher_p.h 2022-04-06 00:48:10.000000000 +0200 @@ -0,0 +1 @@ +#include "../../../../../src/webchannel/qmetaobjectpublisher_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.3.0/QtWebChannel/private/qqmlwebchannelattached_p.h new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.3.0/QtWebChannel/private/qqmlwebchannelattached_p.h --- old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.3.0/QtWebChannel/private/qqmlwebchannelattached_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.3.0/QtWebChannel/private/qqmlwebchannelattached_p.h 2022-04-06 00:48:10.000000000 +0200 @@ -0,0 +1 @@ +#include "../../../../../src/webchannel/qqmlwebchannelattached_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.3.0/QtWebChannel/private/qwebchannel_p.h new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.3.0/QtWebChannel/private/qwebchannel_p.h --- old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.3.0/QtWebChannel/private/qwebchannel_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.3.0/QtWebChannel/private/qwebchannel_p.h 2022-04-06 00:48:10.000000000 +0200 @@ -0,0 +1 @@ +#include "../../../../../src/webchannel/qwebchannel_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.3.0/QtWebChannel/private/signalhandler_p.h new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.3.0/QtWebChannel/private/signalhandler_p.h --- old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.3.0/QtWebChannel/private/signalhandler_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.3.0/QtWebChannel/private/signalhandler_p.h 2022-04-06 00:48:10.000000000 +0200 @@ -0,0 +1 @@ +#include "../../../../../src/webchannel/signalhandler_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.3.0/QtWebChannel/private/variantargument_p.h new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.3.0/QtWebChannel/private/variantargument_p.h --- old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/6.3.0/QtWebChannel/private/variantargument_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/6.3.0/QtWebChannel/private/variantargument_p.h 2022-04-06 00:48:10.000000000 +0200 @@ -0,0 +1 @@ +#include "../../../../../src/webchannel/variantargument_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/qtwebchannelversion.h new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/qtwebchannelversion.h --- old/qtwebchannel-everywhere-src-6.2.4/include/QtWebChannel/qtwebchannelversion.h 2022-03-10 11:21:31.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/include/QtWebChannel/qtwebchannelversion.h 2022-04-06 19:56:41.000000000 +0200 @@ -2,8 +2,8 @@ #ifndef QT_QTWEBCHANNEL_VERSION_H #define QT_QTWEBCHANNEL_VERSION_H -#define QTWEBCHANNEL_VERSION_STR "6.2.4" +#define QTWEBCHANNEL_VERSION_STR "6.3.0" -#define QTWEBCHANNEL_VERSION 0x060204 +#define QTWEBCHANNEL_VERSION 0x060300 #endif // QT_QTWEBCHANNEL_VERSION_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/qtwebchannel.pro new/qtwebchannel-everywhere-src-6.3.0/qtwebchannel.pro --- old/qtwebchannel-everywhere-src-6.2.4/qtwebchannel.pro 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/qtwebchannel.pro 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +0,0 @@ -requires(!integrity) - -load(qt_parts) - -OTHER_FILES += \ - sync.profile \ - .qmake.conf \ - dependencies.yaml \ - coin/module_config.yaml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/src/imports/imports.pro new/qtwebchannel-everywhere-src-6.3.0/src/imports/imports.pro --- old/qtwebchannel-everywhere-src-6.2.4/src/imports/imports.pro 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/src/imports/imports.pro 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -TEMPLATE = subdirs - -SUBDIRS += webchannel diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/src/imports/webchannel/webchannel.pro new/qtwebchannel-everywhere-src-6.3.0/src/imports/webchannel/webchannel.pro --- old/qtwebchannel-everywhere-src-6.2.4/src/imports/webchannel/webchannel.pro 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/src/imports/webchannel/webchannel.pro 1970-01-01 01:00:00.000000000 +0100 @@ -1,12 +0,0 @@ -QT = core quick webchannel-private - -INCLUDEPATH += ../../webchannel -VPATH += ../../webchannel - -IMPORT_VERSION = 1.$$QT_MINOR_VERSION -TARGETPATH = QtWebChannel - -SOURCES += \ - plugin.cpp - -load(qml_plugin) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/src/src.pro new/qtwebchannel-everywhere-src-6.3.0/src/src.pro --- old/qtwebchannel-everywhere-src-6.2.4/src/src.pro 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/src/src.pro 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -TEMPLATE = subdirs - -SUBDIRS += webchannel - -qtHaveModule(quick) { - SUBDIRS += imports - imports.depends = webchannel -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/CMakeLists.txt new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/CMakeLists.txt --- old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/CMakeLists.txt 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/CMakeLists.txt 2022-04-06 00:48:10.000000000 +0200 @@ -17,6 +17,7 @@ Qt::Core PRIVATE_MODULE_INTERFACE Qt::CorePrivate + GENERATE_CPP_EXPORTS ) # Resources: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/doc/qtwebchannel.qdocconf new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/doc/qtwebchannel.qdocconf --- old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/doc/qtwebchannel.qdocconf 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/doc/qtwebchannel.qdocconf 2022-04-06 00:48:10.000000000 +0200 @@ -15,10 +15,6 @@ qhp.QtWebChannel.indexTitle = Qt WebChannel qhp.QtWebChannel.indexRoot = -qhp.QtWebChannel.filterAttributes = qtwebchannel $QT_VERSION qtrefdoc -qhp.QtWebChannel.customFilters.Qt.name = QtWebChannel $QT_VERSION -qhp.QtWebChannel.customFilters.Qt.filterAttributes = qtwebchannel $QT_VERSION - qhp.QtWebChannel.subprojects = classes qml examples javascript qhp.QtWebChannel.subprojects.classes.title = C++ Classes @@ -57,5 +53,3 @@ navigation.landingpage = "Qt WebChannel" navigation.cppclassespage = "Qt WebChannel C++ Classes" navigation.qmltypespage = "Qt WebChannel QML Types" - -manifestmeta.highlighted.names += "QtWebChannel/Qt WebChannel Standalone Example" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/doc/src/index.qdoc new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/doc/src/index.qdoc --- old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/doc/src/index.qdoc 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/doc/src/index.qdoc 2022-04-06 00:48:10.000000000 +0200 @@ -33,56 +33,55 @@ Qt WebChannel enables peer-to-peer communication between a server (QML/C++ application) and a client (HTML/JavaScript or QML application). It is - supported out of the box by \l{Qt WebEngine}. In addition it can work on all - browsers that support \l{Qt WebSockets}{WebSockets}, enabling Qt WebChannel - clients to run in any JavaScript environment (including QML). This requires - the implementation of a custom transport based on Qt WebSockets. - - The module provides a JavaScript library for seamless integration of C++ - and QML applications with HTML/JavaScript and QML clients. The clients must use the - JavaScript library to access the serialized QObjects published by the host - applications. - - \section1 Getting Started - - To use these classes in your application, use the following include - statement: - - \code - #include <QtWebChannel/QtWebChannel> - \endcode - - To link against the module, add this line to your \l qmake \c .pro file: - - \code - QT += webchannel - \endcode - - The QML types are accessed by using: - \qml \QtMinorVersion - import QtWebChannel 1.\1 - \endqml + supported out of the box by \l{Qt WebEngine}. In addition, it can work on + all browsers that support \l{Qt WebSockets}{WebSockets}, enabling Qt + WebChannel clients to run in any JavaScript environment (including QML). + This requires implementing a custom transport based on Qt WebSockets. - \section1 Licenses + The module provides a JavaScript library for seamless integration of C++ and + QML applications with HTML/JavaScript and QML clients. The clients must use + the JavaScript library to access the serialized QObjects published by the + host applications. - Qt WebChannel is available under commercial licenses from \l{The Qt Company}. - In addition, it is available under free software licenses. - These free software licenses are - \l{GNU Lesser General Public License, version 3}, or - the \l{GNU General Public License, version 2}. - See \l{Qt Licensing} for further details. + \section1 Using the Module + + \section2 QML API + + \include {module-use.qdocinc} {using the qml api} {QtWebChannel} + + \section2 C++ API + + \include {module-use.qdocinc} {using the c++ api} + + \section3 Building with CMake + + \include {module-use.qdocinc} {building with cmake} {WebChannel} - \section1 API Reference + \section3 Building with qmake + + \include {module-use.qdocinc} {building_with_qmake} {webchannel} + + \section1 Examples \list - \li \l{Qt WebChannel JavaScript API}{JavaScript API} - \li \l{Qt WebChannel C++ Classes}{C++ API} - \li \l{Qt WebChannel QML Types}{QML API} + \li \l {Qt WebChannel Examples} {Examples} \endlist - \section1 Examples + \section1 Reference \list - \li \l{Qt WebChannel Examples}{Examples} + \li \l {Qt WebChannel JavaScript API} {JavaScript API} + \li \l {Qt WebChannel C++ Classes} {C++ API} + \li \l {Qt WebChannel QML Types} {QML API} \endlist + + \section1 Licenses + + Qt WebChannel is available under commercial licenses from + \l{The Qt Company}. + In addition, it is available under free software licenses. + These free software licenses are + \l{GNU Lesser General Public License, version 3}, or + the \l{GNU General Public License, version 2}. + See \l{Qt Licensing} for further details. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/qmetaobjectpublisher.cpp new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/qmetaobjectpublisher.cpp --- old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/qmetaobjectpublisher.cpp 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/qmetaobjectpublisher.cpp 2022-04-06 00:48:10.000000000 +0200 @@ -44,6 +44,9 @@ #include "qwebchannelabstracttransport.h" #include <QEvent> +#if QT_CONFIG(future) +#include <QFuture> +#endif #include <QJsonDocument> #include <QDebug> #include <QJsonObject> @@ -177,9 +180,83 @@ return response; } +#if QT_CONFIG(future) +QMetaType resultTypeOfQFuture(QByteArrayView typeName) +{ + if (!typeName.startsWith("QFuture<") || !typeName.endsWith('>')) + return {}; + + return QMetaType::fromName(typeName.sliced(8, typeName.length() - 9)); } -Q_DECLARE_TYPEINFO(OverloadResolutionCandidate, Q_MOVABLE_TYPE); +template<typename Func> +void attachContinuationToFutureInVariant(const QVariant &result, QPointer<QObject> contextObject, + Func continuation) +{ + Q_ASSERT(result.canConvert<QFuture<void>>()); + + // QMetaObject::invokeMethod() indirection to work around an issue with passing + // a context object to QFuture::then(). See below. + const auto safeContinuation = [contextObject, continuation=std::move(continuation)] + (const QVariant &result) + { + if (!contextObject) + return; + + QMetaObject::invokeMethod(contextObject.get(), [continuation, result] { + continuation(result); + }); + }; + + auto f = result.value<QFuture<void>>(); + + // Be explicit about what we capture so that we don't accidentally run into + // threading issues. + f.then([resultType=resultTypeOfQFuture(result.typeName()), f, continuation=safeContinuation] + { + if (!resultType.isValid() || resultType == QMetaType::fromType<void>()) { + continuation(QVariant{}); + return; + } + + auto iface = QFutureInterfaceBase::get(f); + // If we pass a context object to f.then() and the future originates in a + // different thread, this assertions fails. Why? + // For the time being, work around that with QMetaObject::invokeMethod() + // in safeSendResponse(). + Q_ASSERT(iface.resultCount() > 0); + + QMutexLocker<QMutex> locker(&iface.mutex()); + if (iface.resultStoreBase().resultAt(0).isVector()) { + locker.unlock(); + // This won't work because we cannot generically get a QList<T> into + // a QVariant with T only known at runtime. + // TBH, I don't know how to trigger this. + qWarning() << "Result lists in a QFuture return value are not supported!"; + continuation(QVariant{}); + return; + } + + // pointer<void>() wouldn't compile because of the isVector-codepath + // using QList<T> in that method. We're not taking that path anyway (see the + // above check), so we can use char instead to not break strict aliasing + // requirements. + const auto data = iface.resultStoreBase().resultAt(0).pointer<char>(); + locker.unlock(); + + const QVariant result(resultType, data); + continuation(result); + }).onCanceled([continuation=safeContinuation] { + // Will catch both failure and cancellation. + // Maybe send something more meaningful? + continuation(QVariant{}); + }); +} +#endif + +} + +Q_DECLARE_TYPEINFO(OverloadResolutionCandidate, Q_RELOCATABLE_TYPE); void QWebChannelPropertyChangeNotifier::notify( QPropertyObserver *self, QUntypedPropertyData *) @@ -1055,9 +1132,29 @@ method.toInt(-1), message.value(KEY_ARGS).toArray()); } - if (!publisherExists || !transportExists) - return; - transport->sendMessage(createResponse(message.value(KEY_ID), wrapResult(result, transport))); + + auto sendResponse = [publisherExists, transportExists, id=message.value(KEY_ID)] + (const QVariant &result) + { + if (!publisherExists || !transportExists) + return; + + Q_ASSERT(QThread::currentThread() == publisherExists->thread()); + + const auto wrappedResult = + publisherExists->wrapResult(result, transportExists.get()); + transportExists->sendMessage(createResponse(id, wrappedResult)); + }; + +#if QT_CONFIG(future) + if (result.canConvert<QFuture<void>>()) { + attachContinuationToFutureInVariant(result, publisherExists.get(), sendResponse); + } else { + sendResponse(result); + } +#else + sendResponse(result); +#endif } else if (type == TypeConnectToSignal) { signalHandlerFor(object)->connectTo(object, message.value(KEY_SIGNAL).toInt(-1)); } else if (type == TypeDisconnectFromSignal) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/qwebchannel.cpp new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/qwebchannel.cpp --- old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/qwebchannel.cpp 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/qwebchannel.cpp 2022-04-06 00:48:10.000000000 +0200 @@ -66,6 +66,9 @@ On the client side, a JavaScript object will be created for any published C++ QObject. It mirrors the C++ object's API and thus is intuitively useable. + QWebChannel transparently supports QFuture. When a client calls a method that returns a QFuture, + QWebChannel will send a response with the QFuture result only after the QFuture has finished. + The C++ QWebChannel API makes it possible to talk to any HTML client, which could run on a local or even remote machine. The only limitation is that the HTML client supports the JavaScript features used by \c{qwebchannel.js}. As such, one can interact diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/qwebchannelglobal.h new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/qwebchannelglobal.h --- old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/qwebchannelglobal.h 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/qwebchannelglobal.h 2022-04-06 00:48:10.000000000 +0200 @@ -41,19 +41,6 @@ #define QTWEBCHANNEL_H #include <QtCore/qglobal.h> - -QT_BEGIN_NAMESPACE - -#ifndef QT_STATIC -# if defined(QT_BUILD_WEBCHANNEL_LIB) -# define Q_WEBCHANNEL_EXPORT Q_DECL_EXPORT -# else -# define Q_WEBCHANNEL_EXPORT Q_DECL_IMPORT -# endif -#else -# define Q_WEBCHANNEL_EXPORT -#endif - -QT_END_NAMESPACE +#include <QtWebChannel/qtwebchannelexports.h> #endif // QTWEBCHANNEL_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/webchannel.pro new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/webchannel.pro --- old/qtwebchannel-everywhere-src-6.2.4/src/webchannel/webchannel.pro 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/src/webchannel/webchannel.pro 1970-01-01 01:00:00.000000000 +0100 @@ -1,49 +0,0 @@ -TARGET = QtWebChannel -QT = core-private -CONFIG += warn_on strict_flags - -QMAKE_DOCS = $$PWD/doc/qtwebchannel.qdocconf - -RESOURCES += \ - resources.qrc - -QTQUICK_COMPILER_SKIPPED_RESOURCES += \ - resources.qrc - -OTHER_FILES = \ - qwebchannel.js - -PUBLIC_HEADERS += \ - qwebchannel.h \ - qwebchannelabstracttransport.h - -PRIVATE_HEADERS += \ - qwebchannel_p.h \ - qmetaobjectpublisher_p.h \ - variantargument_p.h \ - signalhandler_p.h - -SOURCES += \ - qwebchannel.cpp \ - qmetaobjectpublisher.cpp \ - qwebchannelabstracttransport.cpp - -qtHaveModule(qml) { - QT += qml - - SOURCES += \ - qqmlwebchannel.cpp \ - qqmlwebchannelattached.cpp - - PUBLIC_HEADERS += \ - qqmlwebchannel.h - - PRIVATE_HEADERS += \ - qqmlwebchannelattached_p.h -} else { - DEFINES += QT_NO_JSVALUE -} - -HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS - -load(qt_module) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/tests/auto/auto.pro new/qtwebchannel-everywhere-src-6.3.0/tests/auto/auto.pro --- old/qtwebchannel-everywhere-src-6.2.4/tests/auto/auto.pro 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/tests/auto/auto.pro 1970-01-01 01:00:00.000000000 +0100 @@ -1,7 +0,0 @@ -TEMPLATE = subdirs - -SUBDIRS += cmake webchannel - -qtHaveModule(quick) { - SUBDIRS += qml -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/tests/auto/cmake/cmake.pro new/qtwebchannel-everywhere-src-6.3.0/tests/auto/cmake/cmake.pro --- old/qtwebchannel-everywhere-src-6.2.4/tests/auto/cmake/cmake.pro 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/tests/auto/cmake/cmake.pro 1970-01-01 01:00:00.000000000 +0100 @@ -1,7 +0,0 @@ - -# Cause make to do nothing. -TEMPLATE = subdirs - -CMAKE_QT_MODULES_UNDER_TEST = webchannel - -CONFIG += ctest_testcase diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/tests/auto/qml/BLACKLIST new/qtwebchannel-everywhere-src-6.3.0/tests/auto/qml/BLACKLIST --- old/qtwebchannel-everywhere-src-6.2.4/tests/auto/qml/BLACKLIST 1970-01-01 01:00:00.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/tests/auto/qml/BLACKLIST 2022-04-06 00:48:10.000000000 +0200 @@ -0,0 +1,13 @@ +# See qtbase/src/testlib/qtestblacklist.cpp for format +#QTBUG-101521 +[tst_multiclient::compile] +qnx +#QTBUG-101521 +[tst_bench::compile] +qnx +#QTBUG-101521 +[tst_webchannel::compile] +qnx +#QTBUG-101521 +[tst_webchannelseparation::compile] +qnx diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/tests/auto/qml/qml.pro new/qtwebchannel-everywhere-src-6.3.0/tests/auto/qml/qml.pro --- old/qtwebchannel-everywhere-src-6.2.4/tests/auto/qml/qml.pro 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/tests/auto/qml/qml.pro 1970-01-01 01:00:00.000000000 +0100 @@ -1,32 +0,0 @@ -QT += testlib core-private webchannel-private -TEMPLATE = app -TARGET = qml - -CONFIG += warn_on qmltestcase - -# TODO: running tests without requiring make install -IMPORTPATH += $$OUT_PWD/../../../qml $$PWD - -SOURCES += \ - qml.cpp \ - testtransport.cpp \ - testwebchannel.cpp \ - testobject.cpp - -HEADERS += \ - testtransport.h \ - testwebchannel.h \ - testobject.h - -OTHER_FILES += \ - Client.qml \ - WebChannelTest.qml \ - tst_webchannel.qml \ - tst_metaobjectpublisher.qml \ - tst_bench.qml \ - tst_multiclient.qml - -TESTDATA = data/* - -DISTFILES += \ - tst_webchannelseparation.qml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/tests/auto/webchannel/CMakeLists.txt new/qtwebchannel-everywhere-src-6.3.0/tests/auto/webchannel/CMakeLists.txt --- old/qtwebchannel-everywhere-src-6.2.4/tests/auto/webchannel/CMakeLists.txt 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/tests/auto/webchannel/CMakeLists.txt 2022-04-06 00:48:10.000000000 +0200 @@ -23,3 +23,10 @@ PUBLIC_LIBRARIES Qt::Qml ) + +qt_internal_extend_target(tst_webchannel CONDITION TARGET Qt::Concurrent + DEFINES + WEBCHANNEL_TESTS_CAN_USE_CONCURRENT + PUBLIC_LIBRARIES + Qt::Concurrent +) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/tests/auto/webchannel/tst_webchannel.cpp new/qtwebchannel-everywhere-src-6.3.0/tests/auto/webchannel/tst_webchannel.cpp --- old/qtwebchannel-everywhere-src-6.2.4/tests/auto/webchannel/tst_webchannel.cpp 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/tests/auto/webchannel/tst_webchannel.cpp 2022-04-06 00:48:10.000000000 +0200 @@ -38,6 +38,13 @@ #include <QJSEngine> #endif +#include <QPromise> +#include <QTimer> + +#ifdef WEBCHANNEL_TESTS_CAN_USE_CONCURRENT +#include <QtConcurrent> +#endif + QT_USE_NAMESPACE #ifdef WEBCHANNEL_TESTS_CAN_USE_JS_ENGINE @@ -198,6 +205,59 @@ } } +#if QT_CONFIG(future) +QFuture<int> TestObject::futureIntResult() const +{ + return QtFuture::makeReadyFuture(42); +} + +QFuture<int> TestObject::futureDelayedIntResult() const +{ + QPromise<int> p; + const auto f = p.future(); + p.start(); + QTimer::singleShot(10, this, [p=std::move(p)]() mutable { + p.addResult(7); + p.finish(); + }); + return f; +} + +#ifdef WEBCHANNEL_TESTS_CAN_USE_CONCURRENT +QFuture<int> TestObject::futureIntResultFromThread() const +{ + return QtConcurrent::run([] { + return 1337; + }); +} +#endif + +QFuture<void> TestObject::futureVoidResult() const +{ + return QtFuture::makeReadyFuture(); +} + +QFuture<QString> TestObject::futureStringResult() const +{ + return QtFuture::makeReadyFuture<QString>("foo"); +} + +QFuture<int> TestObject::cancelledFuture() const +{ + QPromise<int> p; + auto f = p.future(); + p.start(); + f.cancel(); + Q_ASSERT(f.isCanceled()); + return f; +} + +QFuture<int> TestObject::failedFuture() const +{ + return QtFuture::makeExceptionalFuture<int>(QException{}); +} +#endif + TestWebChannel::TestWebChannel(QObject *parent) : QObject(parent) , m_dummyTransport(new DummyTransport(this)) @@ -412,6 +472,17 @@ addMethod(QStringLiteral("bindStringPropertyToStringProperty2"), "bindStringPropertyToStringProperty2()"); addMethod(QStringLiteral("setStringProperty2"), "setStringProperty2(QString)"); addMethod(QStringLiteral("method1"), "method1()"); +#if QT_CONFIG(future) + addMethod(QStringLiteral("futureIntResult"), "futureIntResult()"); + addMethod(QStringLiteral("futureDelayedIntResult"), "futureDelayedIntResult()"); +#ifdef WEBCHANNEL_TESTS_CAN_USE_CONCURRENT + addMethod(QStringLiteral("futureIntResultFromThread"), "futureIntResultFromThread()"); +#endif + addMethod(QStringLiteral("futureVoidResult"), "futureVoidResult()"); + addMethod(QStringLiteral("futureStringResult"), "futureStringResult()"); + addMethod(QStringLiteral("cancelledFuture"), "cancelledFuture()"); + addMethod(QStringLiteral("failedFuture"), "failedFuture()"); +#endif QCOMPARE(info["methods"].toArray(), expected); } @@ -1309,6 +1380,48 @@ QCOMPARE(transport->messagesSent().size(), deleteChannel ? 0 : 1); } +#if QT_CONFIG(future) +void TestWebChannel::testAsyncMethodReturningFuture_data() +{ + QTest::addColumn<QString>("methodName"); + QTest::addColumn<QJsonValue>("result"); + + QTest::addRow("int") << "futureIntResult" << QJsonValue{42}; + QTest::addRow("int-delayed") << "futureDelayedIntResult" << QJsonValue{7}; +#ifdef WEBCHANNEL_TESTS_CAN_USE_CONCURRENT + QTest::addRow("int-thread") << "futureIntResultFromThread" << QJsonValue{1337}; +#endif + QTest::addRow("void") << "futureVoidResult" << QJsonValue{}; + QTest::addRow("QString") << "futureStringResult" << QJsonValue{"foo"}; + + QTest::addRow("cancelled") << "cancelledFuture" << QJsonValue{}; + QTest::addRow("failed") << "failedFuture" << QJsonValue{}; +} + +void TestWebChannel::testAsyncMethodReturningFuture() +{ + QFETCH(QString, methodName); + QFETCH(QJsonValue, result); + + QWebChannel channel; + TestObject obj; + channel.registerObject("testObject", &obj); + + DummyTransport transport; + channel.connectTo(&transport); + + transport.emitMessageReceived({ + {"type", TypeInvokeMethod}, + {"object", "testObject"}, + {"method", methodName}, + {"id", 1} + }); + + QTRY_COMPARE(transport.messagesSent().size(), 1); + QCOMPARE(transport.messagesSent().first().value("data"), result); +} +#endif + static QHash<QString, QObject*> createObjects(QObject *parent) { const int num = 100; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/tests/auto/webchannel/tst_webchannel.h new/qtwebchannel-everywhere-src-6.3.0/tests/auto/webchannel/tst_webchannel.h --- old/qtwebchannel-everywhere-src-6.2.4/tests/auto/webchannel/tst_webchannel.h 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/tests/auto/webchannel/tst_webchannel.h 2022-04-06 00:48:10.000000000 +0200 @@ -37,6 +37,9 @@ #include <QJsonValue> #include <QJsonObject> #include <QJsonArray> +#if QT_CONFIG(future) +#include <QFuture> +#endif #include <QtWebChannel/QWebChannelAbstractTransport> @@ -135,6 +138,18 @@ Q_INVOKABLE void method1() {} +#if QT_CONFIG(future) + Q_INVOKABLE QFuture<int> futureIntResult() const; + Q_INVOKABLE QFuture<int> futureDelayedIntResult() const; +#ifdef WEBCHANNEL_TESTS_CAN_USE_CONCURRENT + Q_INVOKABLE QFuture<int> futureIntResultFromThread() const; +#endif + Q_INVOKABLE QFuture<void> futureVoidResult() const; + Q_INVOKABLE QFuture<QString> futureStringResult() const; + Q_INVOKABLE QFuture<int> cancelledFuture() const; + Q_INVOKABLE QFuture<int> failedFuture() const; +#endif + protected: Q_INVOKABLE void method2() {} @@ -365,6 +380,11 @@ void testDeletionDuringMethodInvocation_data(); void testDeletionDuringMethodInvocation(); +#if QT_CONFIG(future) + void testAsyncMethodReturningFuture_data(); + void testAsyncMethodReturningFuture(); +#endif + void benchClassInfo(); void benchInitializeClients(); void benchPropertyUpdates(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/tests/auto/webchannel/webchannel.pro new/qtwebchannel-everywhere-src-6.3.0/tests/auto/webchannel/webchannel.pro --- old/qtwebchannel-everywhere-src-6.2.4/tests/auto/webchannel/webchannel.pro 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/tests/auto/webchannel/webchannel.pro 1970-01-01 01:00:00.000000000 +0100 @@ -1,19 +0,0 @@ -QT = core-private webchannel-private testlib - -CONFIG += testcase strict_flags warn_on - -INCLUDEPATH += ../../../src/webchannel -VPATH += ../../../src/webchannel - -TARGET = tst_webchannel - -SOURCES += \ - tst_webchannel.cpp - -HEADERS += \ - tst_webchannel.h - -qtHaveModule(qml) { - DEFINES += WEBCHANNEL_TESTS_CAN_USE_JS_ENGINE - QT += qml -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.2.4/tests/tests.pro new/qtwebchannel-everywhere-src-6.3.0/tests/tests.pro --- old/qtwebchannel-everywhere-src-6.2.4/tests/tests.pro 2022-03-04 14:41:21.000000000 +0100 +++ new/qtwebchannel-everywhere-src-6.3.0/tests/tests.pro 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -TEMPLATE = subdirs - -SUBDIRS += auto
