From 34a67b36528ce4f371ca972fb1fdb666da807f01 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Tue, 18 Feb 2020 14:56:44 +0100 Subject: [PATCH 01/34] Remove misplaced backslash from documentation A \c{} section is already rendered using monospace, no need to escape the \nullptr keyword explicitly. Change-Id: I004a409892809e968c7a73c68a5b3c54a4680425 Reviewed-by: Paul Wicking --- src/widgets/kernel/qwidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index e7f95ecf4d6..5ac1ac698e9 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -392,7 +392,7 @@ void QWidget::setAutoFillBackground(bool enabled) Every widget's constructor accepts one or two standard arguments: \list 1 - \li \c{QWidget *parent = \nullptr} is the parent of the new widget. + \li \c{QWidget *parent = nullptr} is the parent of the new widget. If it is \nullptr (the default), the new widget will be a window. If not, it will be a child of \e parent, and be constrained by \e parent's geometry (unless you specify Qt::Window as window flag). From ce55667b62e77902c18d9a2a62e5e323516159d7 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Fri, 21 Feb 2020 15:05:09 +0100 Subject: [PATCH 02/34] Set the size of the buffer so it is big enough to hold the contents This will prevent a crash later on when it tries to assign to an index in a QString that has not been allocated. Fixes: QTBUG-81950 Change-Id: Ia0b5648a18f15594eeca07d234bedadcfeb266ac Reviewed-by: Mitch Curtis Reviewed-by: Friedemann Kleint --- src/widgets/widgets/qlcdnumber.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/widgets/qlcdnumber.cpp b/src/widgets/widgets/qlcdnumber.cpp index 282714843c9..8ac7040ea79 100644 --- a/src/widgets/widgets/qlcdnumber.cpp +++ b/src/widgets/widgets/qlcdnumber.cpp @@ -713,7 +713,7 @@ void QLCDNumber::paintEvent(QPaintEvent *) void QLCDNumberPrivate::internalSetString(const QString& s) { Q_Q(QLCDNumber); - QString buffer; + QString buffer(ndigits, QChar()); int i; int len = s.length(); QBitArray newPoints(ndigits); From 2c35a6102539510bb850f587690b036d96863338 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Fri, 21 Feb 2020 11:05:20 +0100 Subject: [PATCH 03/34] Delay the processing of the doc features to the end MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit By delaying it to the end we can be sure that all the Qt modules have their INCLUDEPATHs set and as a result we can avoid long command lines on Windows. Change-Id: I9068f7bf66fe138aad1a633191677a57dfd08d6e Reviewed-by: Paul Wicking Reviewed-by: Topi Reiniö Reviewed-by: Joerg Bornemann --- mkspecs/features/qt_build_config.prf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mkspecs/features/qt_build_config.prf b/mkspecs/features/qt_build_config.prf index 8273ba3fe14..511b158b917 100644 --- a/mkspecs/features/qt_build_config.prf +++ b/mkspecs/features/qt_build_config.prf @@ -91,10 +91,13 @@ android|uikit|winrt: \ # Prevent warnings about object files without any symbols macos: CONFIG += no_warn_empty_obj_files +# Make sure the doc features are loaded last since they depend on other +# features setting up things like includepaths to find everything. +CONFIG = prepare_docs qt_docs_targets $$CONFIG + CONFIG += \ utf8_source \ create_prl link_prl \ - prepare_docs qt_docs_targets \ no_private_qt_headers_warning QTDIR_build \ qt_example_installs \ # Qt modules get compiled without exceptions enabled by default. From 4403ec3bc1501cde454b0546759d4c27f9b6cb1b Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Tue, 18 Feb 2020 09:41:09 +0100 Subject: [PATCH 04/34] tests/xcb: fix tst_QWidget::updateWhileMinimized() on mutter/GNOME Shell Task-number: QTBUG-68862 Change-Id: I6247867ae4ec126ab0549741f2d2d491a7f2e8a0 Reviewed-by: Shawn Rutledge --- tests/auto/widgets/kernel/qwidget/BLACKLIST | 5 ----- tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 12 +++++++++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/tests/auto/widgets/kernel/qwidget/BLACKLIST b/tests/auto/widgets/kernel/qwidget/BLACKLIST index cf35491ec01..70ea8433a6d 100644 --- a/tests/auto/widgets/kernel/qwidget/BLACKLIST +++ b/tests/auto/widgets/kernel/qwidget/BLACKLIST @@ -8,11 +8,6 @@ b2qt opensuse-42.3 [restoreVersion1Geometry] ubuntu-16.04 -[updateWhileMinimized] -ubuntu-18.04 -rhel-7.4 -ubuntu-16.04 -rhel-7.6 [focusProxyAndInputMethods] rhel-7.6 opensuse-leap diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 2dd9e13b805..ce3419f8add 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -7914,7 +7914,17 @@ void tst_QWidget::updateWhileMinimized() QTest::qWait(10); if (m_platform == QStringLiteral("winrt")) QEXPECT_FAIL("", "WinRT: This fails. QTBUG-68297.", Abort); - QCOMPARE(widget.numPaintEvents, 0); + int count = 0; + // mutter/GNOME Shell doesn't unmap when minimizing window. + // More details at https://gitlab.gnome.org/GNOME/mutter/issues/185 + if (m_platform == QStringLiteral("xcb")) { + const QString desktop = qgetenv("XDG_CURRENT_DESKTOP"); + qDebug() << "xcb: XDG_CURRENT_DESKTOP=" << desktop; + if (desktop == QStringLiteral("ubuntu:GNOME") + || desktop == QStringLiteral("GNOME-Classic:GNOME")) + count = 1; + } + QCOMPARE(widget.numPaintEvents, count); // Restore window. widget.showNormal(); From e59e5643b57e94e909b0dcd7111362b75d64fa94 Mon Sep 17 00:00:00 2001 From: Thomas Sondergaard Date: Mon, 24 Feb 2020 00:37:17 +0100 Subject: [PATCH 05/34] Use QT_DEPRECATED_X instead of Q_DECL_DEPRECATED_X Allow deprecation warnings to be controlled with QT_NO_DEPRECATED_WARNINGS. Fixes: QTBUG-82424 Change-Id: I6df55ee2abaf4c141ac9b0e7661e46ba3706b20e Reviewed-by: Lars Knoll --- src/corelib/tools/qlist.h | 10 +++++----- src/corelib/tools/qset.h | 8 ++++---- src/corelib/tools/qvector.h | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h index 425ffa42a59..8e23556e863 100644 --- a/src/corelib/tools/qlist.h +++ b/src/corelib/tools/qlist.h @@ -406,16 +406,16 @@ public: static QList fromVector(const QVector &vector); QVector toVector() const; -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - Q_DECL_DEPRECATED_X("Use QList(set.begin(), set.end()) instead.") +#if QT_DEPRECATED_SINCE(5, 14) && QT_VERSION < QT_VERSION_CHECK(6,0,0) + QT_DEPRECATED_X("Use QList(set.begin(), set.end()) instead.") static QList fromSet(const QSet &set); - Q_DECL_DEPRECATED_X("Use QSet(list.begin(), list.end()) instead.") + QT_DEPRECATED_X("Use QSet(list.begin(), list.end()) instead.") QSet toSet() const; - Q_DECL_DEPRECATED_X("Use QList(list.begin(), list.end()) instead.") + QT_DEPRECATED_X("Use QList(list.begin(), list.end()) instead.") static inline QList fromStdList(const std::list &list) { return QList(list.begin(), list.end()); } - Q_DECL_DEPRECATED_X("Use std::list(list.begin(), list.end()) instead.") + QT_DEPRECATED_X("Use std::list(list.begin(), list.end()) instead.") inline std::list toStdList() const { return std::list(begin(), end()); } #endif diff --git a/src/corelib/tools/qset.h b/src/corelib/tools/qset.h index 2e728321854..d0c2e8aa996 100644 --- a/src/corelib/tools/qset.h +++ b/src/corelib/tools/qset.h @@ -246,10 +246,10 @@ public: { QSet result = *this; result -= other; return result; } QList values() const; -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - Q_DECL_DEPRECATED_X("Use values() instead.") +#if QT_DEPRECATED_SINCE(5, 14) && QT_VERSION < QT_VERSION_CHECK(6,0,0) + QT_DEPRECATED_X("Use values() instead.") QList toList() const { return values(); } - Q_DECL_DEPRECATED_X("Use QSet(list.begin(), list.end()) instead.") + QT_DEPRECATED_X("Use QSet(list.begin(), list.end()) instead.") static QSet fromList(const QList &list); #endif @@ -383,7 +383,7 @@ Q_OUTOFLINE_TEMPLATE QList QSet::values() const return result; } -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) +#if QT_DEPRECATED_SINCE(5, 14) && QT_VERSION < QT_VERSION_CHECK(6,0,0) template Q_OUTOFLINE_TEMPLATE QSet QList::toSet() const { diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index 62fbdb4a2ad..b8b9b7da40b 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -301,11 +301,11 @@ public: static QVector fromList(const QList &list); QList toList() const; -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - Q_DECL_DEPRECATED_X("Use QVector(vector.begin(), vector.end()) instead.") +#if QT_DEPRECATED_SINCE(5, 14) && QT_VERSION < QT_VERSION_CHECK(6,0,0) + QT_DEPRECATED_X("Use QVector(vector.begin(), vector.end()) instead.") static inline QVector fromStdVector(const std::vector &vector) { return QVector(vector.begin(), vector.end()); } - Q_DECL_DEPRECATED_X("Use std::vector(vector.begin(), vector.end()) instead.") + QT_DEPRECATED_X("Use std::vector(vector.begin(), vector.end()) instead.") inline std::vector toStdVector() const { return std::vector(d->begin(), d->end()); } #endif From 3c4078ca02cc438dbe668c4a3819d54134ac75b5 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 24 Feb 2020 13:33:00 +0100 Subject: [PATCH 06/34] tst_QSettings: Fix leaking registry key On Windows, the test was leaking a registry key HKEY_CURRENT_USER\Software\tst_QSettings_trailingWhitespace Fix by using .ini-Format in the temporary directory created by the test. Amends e66a878838f17a0626b0b10b340b1ca4dba56cc1. Task-number: QTBUG-22461 Change-Id: If141a9e72e8faebc3fc46b94dab7b4b728a75292 Reviewed-by: Thiago Macieira --- tests/auto/corelib/io/qsettings/tst_qsettings.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp index 0f07ba4bb2e..57bab115bbd 100644 --- a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp +++ b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp @@ -2331,14 +2331,15 @@ void tst_QSettings::testRegistry32And64Bit() void tst_QSettings::trailingWhitespace() { + const QString path = settingsPath("trailingWhitespace"); { - QSettings s("tst_QSettings_trailingWhitespace"); + QSettings s(path, QSettings::IniFormat); s.setValue("trailingSpace", "x "); s.setValue("trailingTab", "x\t"); s.setValue("trailingNewline", "x\n"); } { - QSettings s("tst_QSettings_trailingWhitespace"); + QSettings s(path, QSettings::IniFormat); QCOMPARE(s.value("trailingSpace").toString(), QLatin1String("x ")); QCOMPARE(s.value("trailingTab").toString(), QLatin1String("x\t")); QCOMPARE(s.value("trailingNewline").toString(), QLatin1String("x\n")); From 165d2f09cd9a7f8a17da430846cbeb9dc51f55be Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Mon, 24 Feb 2020 17:53:14 +0100 Subject: [PATCH 07/34] QScreen::virtualSiblingAt(): pass QPoint by value It's too small to bother with passing by reference. Change-Id: I793678f5ae352b7f24d2c7e758dc75827c2190df Reviewed-by: Volker Hilsheimer --- src/gui/kernel/qscreen.cpp | 2 +- src/gui/kernel/qscreen.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qscreen.cpp b/src/gui/kernel/qscreen.cpp index fd25becbca1..d5a4b7c0270 100644 --- a/src/gui/kernel/qscreen.cpp +++ b/src/gui/kernel/qscreen.cpp @@ -710,7 +710,7 @@ void QScreenPrivate::updatePrimaryOrientation() \since 5.15 */ -QScreen *QScreen::virtualSiblingAt(const QPoint &point) +QScreen *QScreen::virtualSiblingAt(QPoint point) { const auto &siblings = virtualSiblings(); for (QScreen *sibling : siblings) { diff --git a/src/gui/kernel/qscreen.h b/src/gui/kernel/qscreen.h index 88925ab7314..09e1d4259a3 100644 --- a/src/gui/kernel/qscreen.h +++ b/src/gui/kernel/qscreen.h @@ -125,7 +125,7 @@ public: QRect availableGeometry() const; QList virtualSiblings() const; - QScreen *virtualSiblingAt(const QPoint &point); + QScreen *virtualSiblingAt(QPoint point); QSize virtualSize() const; QRect virtualGeometry() const; From 23c5fc1d2fa9d9ff51129280288d13c935105b10 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Tue, 25 Feb 2020 16:16:42 +0100 Subject: [PATCH 08/34] Improve argument name for std::function argument Less \a fun though. Note using references in this API would just duplicate the API, but still end up with a copy when creating the QRunnable. By having the copy apparent directly in the API, we not only save the duplication, we also hint to the caller to use move if they want to avoid a copy. Change-Id: If11476d4b38853839c1e87e0339807a1798fc875 Reviewed-by: Thiago Macieira --- src/corelib/thread/qrunnable.cpp | 12 ++++++------ src/corelib/thread/qrunnable.h | 2 +- src/corelib/thread/qthreadpool.cpp | 20 ++++++++++---------- src/corelib/thread/qthreadpool.h | 4 ++-- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/corelib/thread/qrunnable.cpp b/src/corelib/thread/qrunnable.cpp index 58a764d4072..c911cd07455 100644 --- a/src/corelib/thread/qrunnable.cpp +++ b/src/corelib/thread/qrunnable.cpp @@ -116,29 +116,29 @@ QRunnable::~QRunnable() class FunctionRunnable : public QRunnable { - std::function m_functor; + std::function m_functionToRun; public: - FunctionRunnable(std::function functor) : m_functor(std::move(functor)) + FunctionRunnable(std::function functionToRun) : m_functionToRun(std::move(functionToRun)) { } void run() override { - m_functor(); + m_functionToRun(); } }; /*! \since 5.15 - Creates a QRunnable that calls \a fun in run(). + Creates a QRunnable that calls \a functionToRun in run(). Auto-deletion is enabled by default. \sa run(), autoDelete() */ -QRunnable *QRunnable::create(std::function fun) +QRunnable *QRunnable::create(std::function functionToRun) { - return new FunctionRunnable(std::move(fun)); + return new FunctionRunnable(std::move(functionToRun)); } QT_END_NAMESPACE diff --git a/src/corelib/thread/qrunnable.h b/src/corelib/thread/qrunnable.h index c13aa3fa8ce..26b6b991ac6 100644 --- a/src/corelib/thread/qrunnable.h +++ b/src/corelib/thread/qrunnable.h @@ -60,7 +60,7 @@ public: QRunnable() : ref(0) { } virtual ~QRunnable(); - static QRunnable *create(std::function fun); + static QRunnable *create(std::function functionToRun); bool autoDelete() const { return ref != -1; } void setAutoDelete(bool _autoDelete) { ref = _autoDelete ? 0 : -1; } diff --git a/src/corelib/thread/qthreadpool.cpp b/src/corelib/thread/qthreadpool.cpp index d1875a69a95..a9352c38943 100644 --- a/src/corelib/thread/qthreadpool.cpp +++ b/src/corelib/thread/qthreadpool.cpp @@ -515,16 +515,16 @@ void QThreadPool::start(QRunnable *runnable, int priority) \overload \since 5.15 - Reserves a thread and uses it to run \a fun, unless this thread will + Reserves a thread and uses it to run \a functionToRun, unless this thread will make the current thread count exceed maxThreadCount(). In that case, - \a fun is added to a run queue instead. The \a priority argument can + \a functionToRun is added to a run queue instead. The \a priority argument can be used to control the run queue's order of execution. */ -void QThreadPool::start(std::function fun, int priority) +void QThreadPool::start(std::function functionToRun, int priority) { - if (!fun) + if (!functionToRun) return; - start(QRunnable::create(std::move(fun)), priority); + start(QRunnable::create(std::move(functionToRun)), priority); } /*! @@ -561,17 +561,17 @@ bool QThreadPool::tryStart(QRunnable *runnable) /*! \overload \since 5.15 - Attempts to reserve a thread to run \a fun. + Attempts to reserve a thread to run \a functionToRun. If no threads are available at the time of calling, then this function - does nothing and returns \c false. Otherwise, \a fun is run immediately + does nothing and returns \c false. Otherwise, \a functionToRun is run immediately using one available thread and this function returns \c true. */ -bool QThreadPool::tryStart(std::function fun) +bool QThreadPool::tryStart(std::function functionToRun) { - if (!fun) + if (!functionToRun) return false; - return tryStart(QRunnable::create(std::move(fun))); + return tryStart(QRunnable::create(std::move(functionToRun))); } /*! \property QThreadPool::expiryTimeout diff --git a/src/corelib/thread/qthreadpool.h b/src/corelib/thread/qthreadpool.h index 2eede44eca8..e3691ab010b 100644 --- a/src/corelib/thread/qthreadpool.h +++ b/src/corelib/thread/qthreadpool.h @@ -72,8 +72,8 @@ public: void start(QRunnable *runnable, int priority = 0); bool tryStart(QRunnable *runnable); - void start(std::function fun, int priority = 0); - bool tryStart(std::function fun); + void start(std::function functionToRun, int priority = 0); + bool tryStart(std::function functionToRun); int expiryTimeout() const; void setExpiryTimeout(int expiryTimeout); From e5acaa12e3cb3f9eb41657eee8146d82fe436093 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sat, 15 Feb 2020 20:23:40 +0100 Subject: [PATCH 09/34] QObject: treat T* -> bool conversions as narrowing Following wg21.link/LWG3228, it was found that a proper variant fix requires that T* -> bool conversions be treated as narrowing conversions in subclause wg21.link/dcl.init.lst. wg21.link/P1957R2 was accepted in Prague 2020 as a DR and retroactively applies to older C++ standards. Since we hard-code the algorithm of [dcl.init.lst], we can and must add this manually. [ChangeLog][QtCore][QObject] For the purposes of QT_NO_NARROWING_CONVERSIONS_IN_CONNECT, pointer (incl. pointer-to-member) to bool conversions are now considered narrowing. This matches the resolution of a defect report in C++ itself. Change-Id: Ifa9a3724c9c8ccd3dd6614928dbbe37477591dc1 Reviewed-by: Ville Voutilainen --- src/corelib/kernel/qobjectdefs_impl.h | 4 ++++ tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/src/corelib/kernel/qobjectdefs_impl.h b/src/corelib/kernel/qobjectdefs_impl.h index 31ecc8b20dc..aed50d6c5a4 100644 --- a/src/corelib/kernel/qobjectdefs_impl.h +++ b/src/corelib/kernel/qobjectdefs_impl.h @@ -285,11 +285,15 @@ namespace QtPrivate { { }; + template + using is_bool = std::is_same::type>; + template struct AreArgumentsNarrowedBase::type> : std::integral_constant::value && std::is_integral::value) || (std::is_floating_point::value && std::is_floating_point::value && sizeof(From) > sizeof(To)) || + ((std::is_pointer::value || std::is_member_pointer::value) && QtPrivate::is_bool::value) || ((std::is_integral::value || std::is_enum::value) && std::is_floating_point::value) || (std::is_integral::value && std::is_integral::value && (sizeof(From) > sizeof(To) diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index 21615d6ec45..63d06497ce4 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -7462,6 +7462,12 @@ void tst_QObject::checkArgumentsForNarrowing() FITS(bool, const QObject *&); FITS(int (*)(bool), void (QObject::*)()); + { + // wg21.link/P1957 + NARROWS(char*, bool); + NARROWS(void (QObject::*)(), bool); + } + #undef IS_UNSCOPED_ENUM_SIGNED #undef NARROWS_IF From f949f336888c7205d06b56073805e201246fae9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Mon, 24 Feb 2020 17:23:06 +0100 Subject: [PATCH 10/34] QHash/QSet: Base iterator tag on warning version rather than deprecation If you have deprecation warning version set to 5.15 and the "disable deprecated before" set to something lower then it will complain about usage of operator-- inside std::distance which is used in our generic collection iterator. This also required changing over to the QT_DEPRECATED_VERSION_5_15 macro so that the deprecation warning would also be disabled. This is a possible work-around - change the iterator tag if it would trigger a warning. Fixes: QTBUG-82397 Change-Id: I3e0ecae5edebba2a3560e7c3785bd9d1a6d0076d Reviewed-by: Thiago Macieira --- src/corelib/tools/qhash.h | 52 +++++++++++++++++++-------------------- src/corelib/tools/qset.h | 52 +++++++++++++++++++-------------------- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/src/corelib/tools/qhash.h b/src/corelib/tools/qhash.h index 921b781f4a0..91444055016 100644 --- a/src/corelib/tools/qhash.h +++ b/src/corelib/tools/qhash.h @@ -327,7 +327,7 @@ public: QHashData::Node *i; public: -#if QT_DEPRECATED_SINCE(5, 15) +#if QT_DEPRECATED_WARNINGS_SINCE < QT_VERSION_CHECK(5, 15, 0) typedef std::bidirectional_iterator_tag iterator_category; #else typedef std::forward_iterator_tag iterator_category; @@ -357,23 +357,23 @@ public: return r; } #if QT_DEPRECATED_SINCE(5, 15) - inline QT_DEPRECATED iterator &operator--() + inline QT_DEPRECATED_VERSION_5_15 iterator &operator--() { i = QHashData::previousNode(i); return *this; } - inline QT_DEPRECATED iterator operator--(int) + inline QT_DEPRECATED_VERSION_5_15 iterator operator--(int) { iterator r = *this; i = QHashData::previousNode(i); return r; } - inline QT_DEPRECATED iterator operator+(int j) const + inline QT_DEPRECATED_VERSION_5_15 iterator operator+(int j) const { iterator r = *this; if (j > 0) while (j--) ++r; else while (j++) --r; return r; } - inline QT_DEPRECATED iterator operator-(int j) const { return operator+(-j); } - inline QT_DEPRECATED iterator &operator+=(int j) { return *this = *this + j; } - inline QT_DEPRECATED iterator &operator-=(int j) { return *this = *this - j; } - friend inline QT_DEPRECATED iterator operator+(int j, iterator k) { return k + j; } + inline QT_DEPRECATED_VERSION_5_15 iterator operator-(int j) const { return operator+(-j); } + inline QT_DEPRECATED_VERSION_5_15 iterator &operator+=(int j) { return *this = *this + j; } + inline QT_DEPRECATED_VERSION_5_15 iterator &operator-=(int j) { return *this = *this - j; } + friend inline QT_DEPRECATED_VERSION_5_15 iterator operator+(int j, iterator k) { return k + j; } #endif #ifndef QT_STRICT_ITERATORS @@ -395,7 +395,7 @@ public: QHashData::Node *i; public: -#if QT_DEPRECATED_SINCE(5, 15) +#if QT_DEPRECATED_WARNINGS_SINCE < QT_VERSION_CHECK(5, 15, 0) typedef std::bidirectional_iterator_tag iterator_category; #else typedef std::forward_iterator_tag iterator_category; @@ -432,23 +432,23 @@ public: return r; } #if QT_DEPRECATED_SINCE(5, 15) - inline QT_DEPRECATED const_iterator &operator--() + inline QT_DEPRECATED_VERSION_5_15 const_iterator &operator--() { i = QHashData::previousNode(i); return *this; } - inline QT_DEPRECATED const_iterator operator--(int) + inline QT_DEPRECATED_VERSION_5_15 const_iterator operator--(int) { const_iterator r = *this; i = QHashData::previousNode(i); return r; } - inline QT_DEPRECATED const_iterator operator+(int j) const + inline QT_DEPRECATED_VERSION_5_15 const_iterator operator+(int j) const { const_iterator r = *this; if (j > 0) while (j--) ++r; else while (j++) --r; return r; } - inline QT_DEPRECATED const_iterator operator-(int j) const { return operator+(-j); } - inline QT_DEPRECATED const_iterator &operator+=(int j) { return *this = *this + j; } - inline QT_DEPRECATED const_iterator &operator-=(int j) { return *this = *this - j; } - friend inline QT_DEPRECATED const_iterator operator+(int j, const_iterator k) + inline QT_DEPRECATED_VERSION_5_15 const_iterator operator-(int j) const { return operator+(-j); } + inline QT_DEPRECATED_VERSION_5_15 const_iterator &operator+=(int j) { return *this = *this + j; } + inline QT_DEPRECATED_VERSION_5_15 const_iterator &operator-=(int j) { return *this = *this - j; } + friend inline QT_DEPRECATED_VERSION_5_15 const_iterator operator+(int j, const_iterator k) { return k + j; } @@ -485,12 +485,12 @@ public: inline key_iterator &operator++() { ++i; return *this; } inline key_iterator operator++(int) { return key_iterator(i++);} #if QT_DEPRECATED_SINCE(5, 15) - inline QT_DEPRECATED key_iterator &operator--() + inline QT_DEPRECATED_VERSION_5_15 key_iterator &operator--() { --i; return *this; } - inline QT_DEPRECATED key_iterator operator--(int) { return key_iterator(i--); } + inline QT_DEPRECATED_VERSION_5_15 key_iterator operator--(int) { return key_iterator(i--); } #endif const_iterator base() const { return i; } }; @@ -1321,18 +1321,18 @@ public: return false; } #if QT_DEPRECATED_SINCE(5, 15) - inline QT_DEPRECATED bool hasPrevious() const { return i != c.constBegin(); } - inline QT_DEPRECATED Item previous() + inline QT_DEPRECATED_VERSION_5_15 bool hasPrevious() const { return i != c.constBegin(); } + inline QT_DEPRECATED_VERSION_5_15 Item previous() { n = --i; return n; } - inline QT_DEPRECATED Item peekPrevious() const + inline QT_DEPRECATED_VERSION_5_15 Item peekPrevious() const { const_iterator p = i; return --p; } - inline bool QT_DEPRECATED findPrevious(const T &t) + inline bool QT_DEPRECATED_VERSION_5_15 findPrevious(const T &t) { while (i != c.constBegin()) if (*(n = --i) == t) @@ -1418,18 +1418,18 @@ public: return false; } #if QT_DEPRECATED_SINCE(5, 15) - inline QT_DEPRECATED bool hasPrevious() const { return const_iterator(i) != c->constBegin(); } - inline QT_DEPRECATED Item previous() + inline QT_DEPRECATED_VERSION_5_15 bool hasPrevious() const { return const_iterator(i) != c->constBegin(); } + inline QT_DEPRECATED_VERSION_5_15 Item previous() { n = --i; return n; } - inline QT_DEPRECATED Item peekPrevious() const + inline QT_DEPRECATED_VERSION_5_15 Item peekPrevious() const { iterator p = i; return --p; } - inline QT_DEPRECATED bool findPrevious(const T &t) + inline QT_DEPRECATED_VERSION_5_15 bool findPrevious(const T &t) { while (const_iterator(i) != c->constBegin()) if (*(n = --i) == t) diff --git a/src/corelib/tools/qset.h b/src/corelib/tools/qset.h index 5fdcde3c008..4b2adcd8512 100644 --- a/src/corelib/tools/qset.h +++ b/src/corelib/tools/qset.h @@ -108,7 +108,7 @@ public: friend class QSet; public: -#if QT_DEPRECATED_SINCE(5, 15) +#if QT_DEPRECATED_WARNINGS_SINCE < QT_VERSION_CHECK(5, 15, 0) typedef std::bidirectional_iterator_tag iterator_category; #else typedef std::forward_iterator_tag iterator_category; @@ -133,13 +133,13 @@ public: inline iterator &operator++() { ++i; return *this; } inline iterator operator++(int) { iterator r = *this; ++i; return r; } #if QT_DEPRECATED_SINCE(5, 15) - inline QT_DEPRECATED iterator &operator--() { --i; return *this; } - inline QT_DEPRECATED iterator operator--(int) { iterator r = *this; --i; return r; } - inline QT_DEPRECATED iterator operator+(int j) const { return i + j; } - inline QT_DEPRECATED iterator operator-(int j) const { return i - j; } - friend inline QT_DEPRECATED iterator operator+(int j, iterator k) { return k + j; } - inline QT_DEPRECATED iterator &operator+=(int j) { i += j; return *this; } - inline QT_DEPRECATED iterator &operator-=(int j) { i -= j; return *this; } + inline QT_DEPRECATED_VERSION_5_15 iterator &operator--() { --i; return *this; } + inline QT_DEPRECATED_VERSION_5_15 iterator operator--(int) { iterator r = *this; --i; return r; } + inline QT_DEPRECATED_VERSION_5_15 iterator operator+(int j) const { return i + j; } + inline QT_DEPRECATED_VERSION_5_15 iterator operator-(int j) const { return i - j; } + friend inline QT_DEPRECATED_VERSION_5_15 iterator operator+(int j, iterator k) { return k + j; } + inline QT_DEPRECATED_VERSION_5_15 iterator &operator+=(int j) { i += j; return *this; } + inline QT_DEPRECATED_VERSION_5_15 iterator &operator-=(int j) { i -= j; return *this; } #endif }; @@ -151,7 +151,7 @@ public: friend class QSet; public: -#if QT_DEPRECATED_SINCE(5, 15) +#if QT_DEPRECATED_WARNINGS_SINCE < QT_VERSION_CHECK(5, 15, 0) typedef std::bidirectional_iterator_tag iterator_category; #else typedef std::forward_iterator_tag iterator_category; @@ -174,13 +174,13 @@ public: inline const_iterator &operator++() { ++i; return *this; } inline const_iterator operator++(int) { const_iterator r = *this; ++i; return r; } #if QT_DEPRECATED_SINCE(5, 15) - inline QT_DEPRECATED const_iterator &operator--() { --i; return *this; } - inline QT_DEPRECATED const_iterator operator--(int) { const_iterator r = *this; --i; return r; } - inline QT_DEPRECATED const_iterator operator+(int j) const { return i + j; } - inline QT_DEPRECATED const_iterator operator-(int j) const { return i - j; } - friend inline QT_DEPRECATED const_iterator operator+(int j, const_iterator k) { return k + j; } - inline QT_DEPRECATED const_iterator &operator+=(int j) { i += j; return *this; } - inline QT_DEPRECATED const_iterator &operator-=(int j) { i -= j; return *this; } + inline QT_DEPRECATED_VERSION_5_15 const_iterator &operator--() { --i; return *this; } + inline QT_DEPRECATED_VERSION_5_15 const_iterator operator--(int) { const_iterator r = *this; --i; return r; } + inline QT_DEPRECATED_VERSION_5_15 const_iterator operator+(int j) const { return i + j; } + inline QT_DEPRECATED_VERSION_5_15 const_iterator operator-(int j) const { return i - j; } + friend inline QT_DEPRECATED_VERSION_5_15 const_iterator operator+(int j, const_iterator k) { return k + j; } + inline QT_DEPRECATED_VERSION_5_15 const_iterator &operator+=(int j) { i += j; return *this; } + inline QT_DEPRECATED_VERSION_5_15 const_iterator &operator-=(int j) { i -= j; return *this; } #endif }; @@ -198,12 +198,12 @@ public: typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; - reverse_iterator QT_DEPRECATED rbegin() { return reverse_iterator(end()); } - reverse_iterator QT_DEPRECATED rend() { return reverse_iterator(begin()); } - const_reverse_iterator QT_DEPRECATED rbegin() const noexcept { return const_reverse_iterator(end()); } - const_reverse_iterator QT_DEPRECATED rend() const noexcept { return const_reverse_iterator(begin()); } - const_reverse_iterator QT_DEPRECATED crbegin() const noexcept { return const_reverse_iterator(end()); } - const_reverse_iterator QT_DEPRECATED crend() const noexcept { return const_reverse_iterator(begin()); } + reverse_iterator QT_DEPRECATED_VERSION_5_15 rbegin() { return reverse_iterator(end()); } + reverse_iterator QT_DEPRECATED_VERSION_5_15 rend() { return reverse_iterator(begin()); } + const_reverse_iterator QT_DEPRECATED_VERSION_5_15 rbegin() const noexcept { return const_reverse_iterator(end()); } + const_reverse_iterator QT_DEPRECATED_VERSION_5_15 rend() const noexcept { return const_reverse_iterator(begin()); } + const_reverse_iterator QT_DEPRECATED_VERSION_5_15 crbegin() const noexcept { return const_reverse_iterator(end()); } + const_reverse_iterator QT_DEPRECATED_VERSION_5_15 crend() const noexcept { return const_reverse_iterator(begin()); } #endif iterator erase(iterator i) @@ -449,10 +449,10 @@ public: inline bool findNext(const T &t) { while (c->constEnd() != (n = i)) if (*i++ == t) return true; return false; } #if QT_DEPRECATED_SINCE(5, 15) - inline QT_DEPRECATED bool hasPrevious() const { return c->constBegin() != i; } - inline QT_DEPRECATED const T &previous() { n = --i; return *n; } - inline QT_DEPRECATED const T &peekPrevious() const { iterator p = i; return *--p; } - inline QT_DEPRECATED bool findPrevious(const T &t) + inline QT_DEPRECATED_VERSION_5_15 bool hasPrevious() const { return c->constBegin() != i; } + inline QT_DEPRECATED_VERSION_5_15 const T &previous() { n = --i; return *n; } + inline QT_DEPRECATED_VERSION_5_15 const T &peekPrevious() const { iterator p = i; return *--p; } + inline QT_DEPRECATED_VERSION_5_15 bool findPrevious(const T &t) { while (c->constBegin() != i) if (*(n = --i) == t) return true; n = c->end(); return false; } #endif From e1920f65936fe7d712441e88c023746ab5c21cee Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Mon, 24 Feb 2020 20:06:45 +0100 Subject: [PATCH 11/34] QShortcut: fix ambiguity with new PMF ctors The new PMF ctors introduced with a4751f8824723acaee4b9d8aa78a59c2aa36cb3e created some ambiguities with existing old-style connects. Fix it by explitly checking if the given pointers are pointers from QObject derived classes. Fixes: QTBUG-82415 Change-Id: I70d51a6d50384fe6b5083fa3b94492ab6ed97086 Reviewed-by: Shawn Rutledge --- src/widgets/kernel/qshortcut.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/widgets/kernel/qshortcut.h b/src/widgets/kernel/qshortcut.h index 4f9c5ba0f71..384f1967c95 100644 --- a/src/widgets/kernel/qshortcut.h +++ b/src/widgets/kernel/qshortcut.h @@ -95,7 +95,8 @@ public: template QShortcut(const QKeySequence &key, QWidget *parent, const Obj1 *object1, Func1 slot1, - Qt::ShortcutContext context = Qt::WindowShortcut) + Qt::ShortcutContext context = Qt::WindowShortcut, + typename std::enable_if::Value>::type* = 0) : QShortcut(key, parent, static_cast(nullptr), static_cast(nullptr), context) { connect(this, &QShortcut::activated, object1, std::move(slot1)); @@ -103,7 +104,8 @@ public: template QShortcut(const QKeySequence &key, QWidget *parent, const Obj1 *object1, Func1 slot1, Func2 slot2, - Qt::ShortcutContext context = Qt::WindowShortcut) + Qt::ShortcutContext context = Qt::WindowShortcut, + typename std::enable_if::Value>::type* = 0) : QShortcut(key, parent, static_cast(nullptr), static_cast(nullptr), context) { connect(this, &QShortcut::activated, object1, std::move(slot1)); @@ -113,7 +115,9 @@ public: QShortcut(const QKeySequence &key, QWidget *parent, const Obj1 *object1, Func1 slot1, const Obj2 *object2, Func2 slot2, - Qt::ShortcutContext context = Qt::WindowShortcut) + Qt::ShortcutContext context = Qt::WindowShortcut, + typename std::enable_if::Value>::type* = 0, + typename std::enable_if::Value>::type* = 0) : QShortcut(key, parent, static_cast(nullptr), static_cast(nullptr), context) { connect(this, &QShortcut::activated, object1, std::move(slot1)); From 6d18e4a2b8d82519df177bff5a86a8eca5dae9e6 Mon Sep 17 00:00:00 2001 From: Alexander Akulich Date: Fri, 7 Feb 2020 16:43:07 +0300 Subject: [PATCH 12/34] Revert "QAbstractSocket: deprecate 'error' member-function" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 94b3dd77f29a00ebbd1efdc66d75f57e1c75b152. The patch fixes ambiguity between a getter and a signal by changing the getter name, but we still have to rename the signal to follow the signals naming convention. Revert the commit to keep the getter as is and change the signal name instead. Change-Id: I0dd60cf1ae9d1bd95beeb8ad58661ca4b1fb63b9 Reviewed-by: Mårten Nordheim Reviewed-by: Thiago Macieira --- .../blockingfortuneclient/fortunethread.cpp | 4 +- .../threadedfortuneserver/fortunethread.cpp | 2 +- examples/network/torrent/torrentclient.cpp | 2 +- src/network/access/qhttpprotocolhandler.cpp | 2 +- .../access/qnetworkaccessdebugpipebackend.cpp | 4 +- src/network/socket/qabstractsocket.cpp | 29 +++--------- src/network/socket/qabstractsocket.h | 7 +-- src/network/socket/qhttpsocketengine.cpp | 13 +++--- src/network/socket/qlocalsocket_unix.cpp | 2 +- src/network/socket/qsocks5socketengine.cpp | 22 +++++----- src/network/ssl/qdtls_openssl.cpp | 2 +- src/network/ssl/qsslsocket.cpp | 8 ++-- src/network/ssl/qsslsocket_openssl.cpp | 2 +- src/network/ssl/qsslsocket_schannel.cpp | 4 +- tests/auto/network-settings.h | 2 +- .../qnetworkreply/tst_qnetworkreply.cpp | 6 +-- .../tst_qhttpsocketengine.cpp | 2 +- .../tst_qsocks5socketengine.cpp | 4 +- .../socket/qtcpsocket/tst_qtcpsocket.cpp | 44 +++++++++---------- .../socket/qudpsocket/tst_qudpsocket.cpp | 14 +++--- tests/auto/network/ssl/qocsp/tst_qocsp.cpp | 2 +- .../network/ssl/qsslsocket/tst_qsslsocket.cpp | 28 ++++++------ .../networkselftest/tst_networkselftest.cpp | 4 +- .../shared/baselineprotocol.cpp | 2 +- 24 files changed, 94 insertions(+), 117 deletions(-) diff --git a/examples/network/blockingfortuneclient/fortunethread.cpp b/examples/network/blockingfortuneclient/fortunethread.cpp index 24801436df2..67ac7ebfa5f 100644 --- a/examples/network/blockingfortuneclient/fortunethread.cpp +++ b/examples/network/blockingfortuneclient/fortunethread.cpp @@ -103,7 +103,7 @@ void FortuneThread::run() //! [6] //! [8] if (!socket.waitForConnected(Timeout)) { - emit error(socket.socketError(), socket.errorString()); + emit error(socket.error(), socket.errorString()); return; } //! [8] //! [11] @@ -115,7 +115,7 @@ void FortuneThread::run() do { if (!socket.waitForReadyRead(Timeout)) { - emit error(socket.socketError(), socket.errorString()); + emit error(socket.error(), socket.errorString()); return; } diff --git a/examples/network/threadedfortuneserver/fortunethread.cpp b/examples/network/threadedfortuneserver/fortunethread.cpp index 2e730c6c8fa..ddde5121a3e 100644 --- a/examples/network/threadedfortuneserver/fortunethread.cpp +++ b/examples/network/threadedfortuneserver/fortunethread.cpp @@ -65,7 +65,7 @@ void FortuneThread::run() QTcpSocket tcpSocket; //! [1] //! [2] if (!tcpSocket.setSocketDescriptor(socketDescriptor)) { - emit error(tcpSocket.socketError()); + emit error(tcpSocket.error()); return; } //! [2] //! [3] diff --git a/examples/network/torrent/torrentclient.cpp b/examples/network/torrent/torrentclient.cpp index 00f46df8926..6b11338f422 100644 --- a/examples/network/torrent/torrentclient.cpp +++ b/examples/network/torrent/torrentclient.cpp @@ -867,7 +867,7 @@ void TorrentClient::removeClient() // Remove the host from our list of known peers if the connection // failed. - if (client->peer() && client->socketError() == QAbstractSocket::ConnectionRefusedError) + if (client->peer() && client->error() == QAbstractSocket::ConnectionRefusedError) d->peers.removeAll(client->peer()); // Remove the client from RateController and all structures. diff --git a/src/network/access/qhttpprotocolhandler.cpp b/src/network/access/qhttpprotocolhandler.cpp index 981effb54f7..d39589fb967 100644 --- a/src/network/access/qhttpprotocolhandler.cpp +++ b/src/network/access/qhttpprotocolhandler.cpp @@ -233,7 +233,7 @@ void QHttpProtocolHandler::_q_readyRead() char c; qint64 ret = m_socket->peek(&c, 1); if (ret < 0) { - m_channel->_q_error(m_socket->socketError()); + m_channel->_q_error(m_socket->error()); // We still need to handle the reply so it emits its signals etc. if (m_reply) _q_receiveReply(); diff --git a/src/network/access/qnetworkaccessdebugpipebackend.cpp b/src/network/access/qnetworkaccessdebugpipebackend.cpp index 0406f2fac1e..03ffc696285 100644 --- a/src/network/access/qnetworkaccessdebugpipebackend.cpp +++ b/src/network/access/qnetworkaccessdebugpipebackend.cpp @@ -242,9 +242,9 @@ void QNetworkAccessDebugPipeBackend::closeDownstreamChannel() void QNetworkAccessDebugPipeBackend::socketError() { - qWarning("QNetworkAccessDebugPipeBackend::socketError() %d",socket.socketError()); + qWarning("QNetworkAccessDebugPipeBackend::socketError() %d",socket.error()); QNetworkReply::NetworkError code; - switch (socket.socketError()) { + switch (socket.error()) { case QAbstractSocket::RemoteHostClosedError: return; // socketDisconnected will be called diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 5f1ff2fcb88..57dec59bc74 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -215,7 +215,7 @@ connections, you will have to register it with Q_DECLARE_METATYPE() and qRegisterMetaType(). - \sa socketError(), errorString(), {Creating Custom Qt Types} + \sa error(), errorString(), {Creating Custom Qt Types} */ /*! @@ -329,7 +329,7 @@ is non-blocking). \value UnknownSocketError An unidentified error occurred. - \sa QAbstractSocket::socketError() + \sa QAbstractSocket::error() */ /*! @@ -2092,7 +2092,7 @@ QVariant QAbstractSocket::socketOption(QAbstractSocket::SocketOption option) Waits until the socket is connected, up to \a msecs milliseconds. If the connection has been established, this function returns \c true; otherwise it returns \c false. In the case - where it returns \c false, you can call socketError() to determine + where it returns \c false, you can call error() to determine the cause of the error. The following example waits up to one second for a connection @@ -2864,7 +2864,7 @@ void QAbstractSocket::setReadBufferSize(qint64 size) /*! Returns the state of the socket. - \sa socketError() + \sa error() */ QAbstractSocket::SocketState QAbstractSocket::state() const { @@ -2891,35 +2891,16 @@ QAbstractSocket::SocketType QAbstractSocket::socketType() const return d_func()->socketType; } -#if QT_DEPRECATED_SINCE(5, 15) /*! - \deprecated - - Use socketError() instead. - - Returns the type of error that last occurred. - - \sa state(), errorString(), socketError() -*/ -QAbstractSocket::SocketError QAbstractSocket::error() const -{ - return socketError(); -} -#endif // QT_DEPRECATED_SINCE(5, 15) - -/*! - \since 5.15 - Returns the type of error that last occurred. \sa state(), errorString() */ -QAbstractSocket::SocketError QAbstractSocket::socketError() const +QAbstractSocket::SocketError QAbstractSocket::error() const { return d_func()->socketError; } - /*! Sets the type of error that last occurred to \a socketError. diff --git a/src/network/socket/qabstractsocket.h b/src/network/socket/qabstractsocket.h index cbc79ea684f..de09195eeb1 100644 --- a/src/network/socket/qabstractsocket.h +++ b/src/network/socket/qabstractsocket.h @@ -180,12 +180,7 @@ public: SocketType socketType() const; SocketState state() const; - -#if QT_DEPRECATED_SINCE(5, 15) - QT_DEPRECATED_X("Use socketError()") SocketError error() const; -#endif // QT_DEPRECATED_SINCE(5, 15) - - SocketError socketError() const; + SocketError error() const; // from QIODevice void close() override; diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp index 21f97be29ad..bce0da4ae42 100644 --- a/src/network/socket/qhttpsocketengine.cpp +++ b/src/network/socket/qhttpsocketengine.cpp @@ -370,8 +370,8 @@ bool QHttpSocketEngine::waitForRead(int msecs, bool *timedOut) if (!d->socket->waitForReadyRead(qt_subtract_from_timeout(msecs, stopWatch.elapsed()))) { if (d->socket->state() == QAbstractSocket::UnconnectedState) return true; - setError(d->socket->socketError(), d->socket->errorString()); - if (timedOut && d->socket->socketError() == QAbstractSocket::SocketTimeoutError) + setError(d->socket->error(), d->socket->errorString()); + if (timedOut && d->socket->error() == QAbstractSocket::SocketTimeoutError) *timedOut = true; return false; } @@ -385,8 +385,8 @@ bool QHttpSocketEngine::waitForRead(int msecs, bool *timedOut) // Report any error that may occur. if (d->state != Connected) { - setError(d->socket->socketError(), d->socket->errorString()); - if (timedOut && d->socket->socketError() == QAbstractSocket::SocketTimeoutError) + setError(d->socket->error(), d->socket->errorString()); + if (timedOut && d->socket->error() == QAbstractSocket::SocketTimeoutError) *timedOut = true; return false; } @@ -401,7 +401,7 @@ bool QHttpSocketEngine::waitForWrite(int msecs, bool *timedOut) if (d->state == Connected) { if (d->socket->bytesToWrite()) { if (!d->socket->waitForBytesWritten(msecs)) { - if (d->socket->socketError() == QAbstractSocket::SocketTimeoutError && timedOut) + if (d->socket->error() == QAbstractSocket::SocketTimeoutError && timedOut) *timedOut = true; return false; } @@ -421,7 +421,8 @@ bool QHttpSocketEngine::waitForWrite(int msecs, bool *timedOut) // Report any error that may occur. if (d->state != Connected) { - if (timedOut && d->socket->socketError() == QAbstractSocket::SocketTimeoutError) +// setError(d->socket->error(), d->socket->errorString()); + if (timedOut && d->socket->error() == QAbstractSocket::SocketTimeoutError) *timedOut = true; } diff --git a/src/network/socket/qlocalsocket_unix.cpp b/src/network/socket/qlocalsocket_unix.cpp index e860b880d55..5e1da78c942 100644 --- a/src/network/socket/qlocalsocket_unix.cpp +++ b/src/network/socket/qlocalsocket_unix.cpp @@ -464,7 +464,7 @@ void QLocalSocket::disconnectFromServer() QLocalSocket::LocalSocketError QLocalSocket::error() const { Q_D(const QLocalSocket); - switch (d->unixSocket.socketError()) { + switch (d->unixSocket.error()) { case QAbstractSocket::ConnectionRefusedError: return QLocalSocket::ConnectionRefusedError; case QAbstractSocket::RemoteHostClosedError: diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp index f0ccc9054ab..0530a1af30c 100644 --- a/src/network/socket/qsocks5socketengine.cpp +++ b/src/network/socket/qsocks5socketengine.cpp @@ -594,7 +594,7 @@ void QSocks5SocketEnginePrivate::setErrorState(Socks5State state, const QString case ConnectError: case ControlSocketError: { - QAbstractSocket::SocketError controlSocketError = data->controlSocket->socketError(); + QAbstractSocket::SocketError controlSocketError = data->controlSocket->error(); if (socks5State != Connected) { switch (controlSocketError) { case QAbstractSocket::ConnectionRefusedError: @@ -918,7 +918,7 @@ void QSocks5SocketEnginePrivate::_q_emitPendingReadNotification() return; // check if there needs to be a new zero read notification if (data && data->controlSocket->state() == QAbstractSocket::UnconnectedState - && data->controlSocket->socketError() == QAbstractSocket::RemoteHostClosedError) { + && data->controlSocket->error() == QAbstractSocket::RemoteHostClosedError) { connectData->readBuffer.clear(); emitReadNotification(); } @@ -1256,7 +1256,7 @@ void QSocks5SocketEnginePrivate::_q_controlSocketError(QAbstractSocket::SocketEr data->controlSocket->close(); emitConnectionNotification(); } else { - q_func()->setError(data->controlSocket->socketError(), data->controlSocket->errorString()); + q_func()->setError(data->controlSocket->error(), data->controlSocket->errorString()); emitReadNotification(); emitWriteNotification(); } @@ -1348,7 +1348,7 @@ bool QSocks5SocketEngine::bind(const QHostAddress &addr, quint16 port) if (d->mode == QSocks5SocketEnginePrivate::UdpAssociateMode) { if (!d->udpData->udpSocket->bind(address, port)) { QSOCKS5_Q_DEBUG << "local udp bind failed"; - setError(d->udpData->udpSocket->socketError(), d->udpData->udpSocket->errorString()); + setError(d->udpData->udpSocket->error(), d->udpData->udpSocket->errorString()); return false; } d->localAddress = d->udpData->udpSocket->localAddress(); @@ -1656,8 +1656,8 @@ qint64 QSocks5SocketEngine::writeDatagram(const char *data, qint64 len, const QI } if (d->udpData->udpSocket->writeDatagram(sealedBuf, d->udpData->associateAddress, d->udpData->associatePort) != sealedBuf.size()) { //### try frgamenting - if (d->udpData->udpSocket->socketError() == QAbstractSocket::DatagramTooLargeError) - setError(d->udpData->udpSocket->socketError(), d->udpData->udpSocket->errorString()); + if (d->udpData->udpSocket->error() == QAbstractSocket::DatagramTooLargeError) + setError(d->udpData->udpSocket->error(), d->udpData->udpSocket->errorString()); //### else maybe more serious error return -1; } @@ -1727,7 +1727,7 @@ bool QSocks5SocketEnginePrivate::waitForConnected(int msecs, bool *timedOut) return true; setErrorState(QSocks5SocketEnginePrivate::ControlSocketError); - if (timedOut && data->controlSocket->socketError() == QAbstractSocket::SocketTimeoutError) + if (timedOut && data->controlSocket->error() == QAbstractSocket::SocketTimeoutError) *timedOut = true; return false; } @@ -1765,8 +1765,8 @@ bool QSocks5SocketEngine::waitForRead(int msecs, bool *timedOut) if (d->data->controlSocket->state() == QAbstractSocket::UnconnectedState) return true; - setError(d->data->controlSocket->socketError(), d->data->controlSocket->errorString()); - if (timedOut && d->data->controlSocket->socketError() == QAbstractSocket::SocketTimeoutError) + setError(d->data->controlSocket->error(), d->data->controlSocket->errorString()); + if (timedOut && d->data->controlSocket->error() == QAbstractSocket::SocketTimeoutError) *timedOut = true; return false; } @@ -1775,8 +1775,8 @@ bool QSocks5SocketEngine::waitForRead(int msecs, bool *timedOut) } else { while (!d->readNotificationActivated) { if (!d->udpData->udpSocket->waitForReadyRead(qt_subtract_from_timeout(msecs, stopWatch.elapsed()))) { - setError(d->udpData->udpSocket->socketError(), d->udpData->udpSocket->errorString()); - if (timedOut && d->udpData->udpSocket->socketError() == QAbstractSocket::SocketTimeoutError) + setError(d->udpData->udpSocket->error(), d->udpData->udpSocket->errorString()); + if (timedOut && d->udpData->udpSocket->error() == QAbstractSocket::SocketTimeoutError) *timedOut = true; return false; } diff --git a/src/network/ssl/qdtls_openssl.cpp b/src/network/ssl/qdtls_openssl.cpp index 36b4d572fdf..25a6c5f49c8 100644 --- a/src/network/ssl/qdtls_openssl.cpp +++ b/src/network/ssl/qdtls_openssl.cpp @@ -1125,7 +1125,7 @@ qint64 QDtlsPrivateOpenSSL::writeDatagramEncrypted(QUdpSocket *socket, // some errors can be just ignored (it's UDP, not TCP after all). // Unlike QSslSocket we do not abort though. QString description(QSslSocketBackendPrivate::getErrorsFromOpenSsl()); - if (socket->socketError() != QAbstractSocket::UnknownSocketError && description.isEmpty()) { + if (socket->error() != QAbstractSocket::UnknownSocketError && description.isEmpty()) { setDtlsError(QDtlsError::UnderlyingSocketError, socket->errorString()); } else { setDtlsError(QDtlsError::TlsFatalError, diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 4ed1951c7d3..775b6227ed1 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -565,7 +565,7 @@ bool QSslSocket::setSocketDescriptor(qintptr socketDescriptor, SocketState state d->createPlainSocket(openMode); bool retVal = d->plainSocket->setSocketDescriptor(socketDescriptor, state, openMode); d->cachedSocketDescriptor = d->plainSocket->socketDescriptor(); - d->setError(d->plainSocket->socketError(), d->plainSocket->errorString()); + d->setError(d->plainSocket->error(), d->plainSocket->errorString()); setSocketState(state); setOpenMode(openMode); setLocalPort(d->plainSocket->localPort()); @@ -1670,7 +1670,7 @@ bool QSslSocket::waitForConnected(int msecs) bool retVal = d->plainSocket->waitForConnected(msecs); if (!retVal) { setSocketState(d->plainSocket->state()); - d->setError(d->plainSocket->socketError(), d->plainSocket->errorString()); + d->setError(d->plainSocket->error(), d->plainSocket->errorString()); } return retVal; } @@ -1839,7 +1839,7 @@ bool QSslSocket::waitForDisconnected(int msecs) bool retVal = d->plainSocket->waitForDisconnected(qt_subtract_from_timeout(msecs, stopWatch.elapsed())); if (!retVal) { setSocketState(d->plainSocket->state()); - d->setError(d->plainSocket->socketError(), d->plainSocket->errorString()); + d->setError(d->plainSocket->error(), d->plainSocket->errorString()); } return retVal; } @@ -2711,7 +2711,7 @@ void QSslSocketPrivate::_q_errorSlot(QAbstractSocket::SocketError error) readBufferMaxSize = tmpReadBufferMaxSize; } - setErrorAndEmit(plainSocket->socketError(), plainSocket->errorString()); + setErrorAndEmit(plainSocket->error(), plainSocket->errorString()); } /*! diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 4be27affca7..b04aa3bcf20 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -1009,7 +1009,7 @@ void QSslSocketBackendPrivate::transmit() if (actualWritten < 0) { //plain socket write fails if it was in the pending close state. const ScopedBool bg(inSetAndEmitError, true); - setErrorAndEmit(plainSocket->socketError(), plainSocket->errorString()); + setErrorAndEmit(plainSocket->error(), plainSocket->errorString()); return; } transmitting = true; diff --git a/src/network/ssl/qsslsocket_schannel.cpp b/src/network/ssl/qsslsocket_schannel.cpp index f9586b7862e..31b0db4818c 100644 --- a/src/network/ssl/qsslsocket_schannel.cpp +++ b/src/network/ssl/qsslsocket_schannel.cpp @@ -582,7 +582,7 @@ bool QSslSocketBackendPrivate::sendToken(void *token, unsigned long tokenLength, if (written != qint64(tokenLength)) { // Failed to write/buffer everything or an error occurred if (emitError) - setErrorAndEmit(plainSocket->socketError(), plainSocket->errorString()); + setErrorAndEmit(plainSocket->error(), plainSocket->errorString()); return false; } return true; @@ -1292,7 +1292,7 @@ void QSslSocketBackendPrivate::transmit() if (bytesWritten >= 0) { totalBytesWritten += bytesWritten; } else { - setErrorAndEmit(plainSocket->socketError(), plainSocket->errorString()); + setErrorAndEmit(plainSocket->error(), plainSocket->errorString()); return; } } diff --git a/tests/auto/network-settings.h b/tests/auto/network-settings.h index 641bf1d6720..4dd6ce897b8 100644 --- a/tests/auto/network-settings.h +++ b/tests/auto/network-settings.h @@ -190,7 +190,7 @@ public: if (!s.peerAddress().isNull()) debug << ", peer=" << s.peerAddress().toString() << ':' << s.peerPort(); debug << ", type=" << s.socketType() << ", state=" << s.state() - << ", error=" << s.socketError() << ": " << s.errorString(); + << ", error=" << s.error() << ": " << s.errorString(); return result.toLocal8Bit(); } #endif // QT_NETWORK_LIB diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 1494ebbcd8b..b1588d4120b 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -1111,7 +1111,7 @@ protected: // get the "request" packet if (!client->waitForReadyRead(2000)) { - qDebug() << "FastSender:" << client->socketError() << "waiting for \"request\" packet"; + qDebug() << "FastSender:" << client->error() << "waiting for \"request\" packet"; return; } client->readAll(); // we're not interested in the actual contents (e.g. HTTP request) @@ -1148,7 +1148,7 @@ protected: while (client->bytesToWrite() > 0) { qDebug() << "Still having" << client->bytesToWrite() << "bytes to write, doing that now"; if (!client->waitForBytesWritten(10000)) { - qDebug() << "ERROR: FastSender:" << client->socketError() << "cleaning up residue"; + qDebug() << "ERROR: FastSender:" << client->error() << "cleaning up residue"; return; } } @@ -1168,7 +1168,7 @@ protected: while (client->bytesToWrite() > 0) { if (!client->waitForBytesWritten(10000)) { - qDebug() << "ERROR: FastSender:" << client->socketError() << "during blocking write"; + qDebug() << "ERROR: FastSender:" << client->error() << "during blocking write"; return; } } diff --git a/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp b/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp index 1931df3d074..7644a063801 100644 --- a/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp +++ b/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp @@ -275,7 +275,7 @@ void tst_QHttpSocketEngine::errorTest() QTestEventLoop::instance().enterLoop(30); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(int(socket.socketError()), expectedError); + QCOMPARE(int(socket.error()), expectedError); } //--------------------------------------------------------------------------- diff --git a/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp b/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp index da9cdee6917..44b5a02af41 100644 --- a/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp +++ b/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp @@ -288,7 +288,7 @@ void tst_QSocks5SocketEngine::errorTest() QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(int(socket.socketError()), expectedError); + QCOMPARE(int(socket.error()), expectedError); } //--------------------------------------------------------------------------- @@ -1011,7 +1011,7 @@ void tst_QSocks5SocketEngine::incomplete() QTestEventLoop::instance().enterLoop(70); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(socket.socketError(), QAbstractSocket::ProxyConnectionClosedError); + QCOMPARE(socket.error(), QAbstractSocket::ProxyConnectionClosedError); } //---------------------------------------------------------------------------------- diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp index 099aa5fb518..f85d041f49b 100644 --- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp +++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp @@ -493,7 +493,7 @@ void tst_QTcpSocket::constructing() QCOMPARE(socket->peerAddress(), QHostAddress()); QCOMPARE(socket->readChannelCount(), 0); QCOMPARE(socket->writeChannelCount(), 0); - QCOMPARE(socket->socketError(), QTcpSocket::UnknownSocketError); + QCOMPARE(socket->error(), QTcpSocket::UnknownSocketError); QCOMPARE(socket->errorString(), QString("Unknown error")); // Check the state of the socket layer? @@ -603,7 +603,7 @@ void tst_QTcpSocket::bind() } bool bindSuccess = socket->bind(addr, port); - if (!bindSuccess && randomPort && socket->socketError() == QTcpSocket::AddressInUseError) { + if (!bindSuccess && randomPort && socket->error() == QTcpSocket::AddressInUseError) { // we may have been unlucky and hit an already open port, so try another --attemptsLeft; continue; @@ -730,7 +730,7 @@ void tst_QTcpSocket::setInvalidSocketDescriptor() QVERIFY(!socket->setSocketDescriptor(-5, QTcpSocket::UnconnectedState)); QCOMPARE(socket->socketDescriptor(), (qintptr)-1); - QCOMPARE(socket->socketError(), QTcpSocket::UnsupportedSocketOperationError); + QCOMPARE(socket->error(), QTcpSocket::UnsupportedSocketOperationError); delete socket; } @@ -893,7 +893,7 @@ void tst_QTcpSocket::hostNotFound() "when we expect 404", Continue); } #endif - QCOMPARE(int(socket->socketError()), int(QTcpSocket::HostNotFoundError)); + QCOMPARE(int(socket->error()), int(QTcpSocket::HostNotFoundError)); delete socket; } @@ -919,7 +919,7 @@ void tst_QTcpSocket::timeoutConnect() QVERIFY(timer.elapsed() < 150); QVERIFY(!socket->waitForConnected(1000)); //200ms is too short when using SOCKS proxy authentication QCOMPARE(socket->state(), QTcpSocket::UnconnectedState); - QCOMPARE(int(socket->socketError()), int(QTcpSocket::SocketTimeoutError)); + QCOMPARE(int(socket->error()), int(QTcpSocket::SocketTimeoutError)); QCOMPARE(socket->readChannelCount(), 0); QCOMPARE(socket->writeChannelCount(), 0); @@ -1238,7 +1238,7 @@ void tst_QTcpSocket::openCloseOpenClose() QCOMPARE(socket->localAddress(), QHostAddress()); QCOMPARE((int) socket->peerPort(), 0); QCOMPARE(socket->peerAddress(), QHostAddress()); - QCOMPARE(socket->socketError(), QTcpSocket::UnknownSocketError); + QCOMPARE(socket->error(), QTcpSocket::UnknownSocketError); QCOMPARE(socket->errorString(), QString("Unknown error")); QCOMPARE(socket->state(), QTcpSocket::UnconnectedState); @@ -1392,7 +1392,7 @@ protected: while (!quit) { if (socket->waitForDisconnected(500)) break; - if (socket->socketError() != QAbstractSocket::SocketTimeoutError) + if (socket->error() != QAbstractSocket::SocketTimeoutError) return; } @@ -1628,8 +1628,8 @@ void tst_QTcpSocket::readLine() QVERIFY(!socket->waitForReadyRead(100)); QCOMPARE(socket->readLine(buffer, sizeof(buffer)), qint64(0)); - QVERIFY(socket->socketError() == QAbstractSocket::SocketTimeoutError - || socket->socketError() == QAbstractSocket::RemoteHostClosedError); + QVERIFY(socket->error() == QAbstractSocket::SocketTimeoutError + || socket->error() == QAbstractSocket::RemoteHostClosedError); QCOMPARE(socket->bytesAvailable(), qint64(0)); socket->close(); @@ -1778,11 +1778,11 @@ void tst_QTcpSocket::dontCloseOnTimeout() QTcpSocket *socket = newSocket(); socket->connectToHost(serverAddress, server.serverPort()); QVERIFY(!socket->waitForReadyRead(100)); - QCOMPARE(socket->socketError(), QTcpSocket::SocketTimeoutError); + QCOMPARE(socket->error(), QTcpSocket::SocketTimeoutError); QVERIFY(socket->isOpen()); QVERIFY(!socket->waitForDisconnected(100)); - QCOMPARE(socket->socketError(), QTcpSocket::SocketTimeoutError); + QCOMPARE(socket->error(), QTcpSocket::SocketTimeoutError); QVERIFY(socket->isOpen()); delete socket; @@ -2034,7 +2034,7 @@ void tst_QTcpSocket::remoteCloseError() QCOMPARE(disconnectedSpy.count(), 1); QCOMPARE(errorSpy.count(), 1); - QCOMPARE(clientSocket->socketError(), QAbstractSocket::RemoteHostClosedError); + QCOMPARE(clientSocket->error(), QAbstractSocket::RemoteHostClosedError); delete serverSocket; @@ -2402,7 +2402,7 @@ void tst_QTcpSocket::zeroAndMinusOneReturns() socket->write("GET / HTTP/1.0\r\n\r\n"); QVERIFY(socket->waitForDisconnected(15000)); - QCOMPARE(socket->socketError(), QAbstractSocket::RemoteHostClosedError); + QCOMPARE(socket->error(), QAbstractSocket::RemoteHostClosedError); QCOMPARE(socket->write("BLUBBER"), qint64(-1)); QVERIFY(socket->getChar(c)); @@ -2451,7 +2451,7 @@ void tst_QTcpSocket::connectionRefused() QVERIFY2(!timeout(), "Network timeout"); QCOMPARE(socket->state(), QAbstractSocket::UnconnectedState); - QCOMPARE(socket->socketError(), QAbstractSocket::ConnectionRefusedError); + QCOMPARE(socket->error(), QAbstractSocket::ConnectionRefusedError); QCOMPARE(stateSpy.count(), 3); QCOMPARE(qvariant_cast(stateSpy.at(0).at(0)), QAbstractSocket::HostLookupState); @@ -2574,7 +2574,7 @@ void tst_QTcpSocket::connectToMultiIP() socket->connectToHost("multi.dev.qt-project.org", 81); QVERIFY(!socket->waitForConnected(2000)); QVERIFY(stopWatch.elapsed() < 2000); - QCOMPARE(socket->socketError(), QAbstractSocket::SocketTimeoutError); + QCOMPARE(socket->error(), QAbstractSocket::SocketTimeoutError); delete socket; #endif @@ -2760,7 +2760,7 @@ void tst_QTcpSocket::taskQtBug5799ConnectionErrorWaitForConnected() socket.waitForConnected(10000); QVERIFY2(timer.elapsed() < 9900, "Connection to closed port timed out instead of refusing, something is wrong"); QVERIFY2(socket.state() == QAbstractSocket::UnconnectedState, "Socket connected unexpectedly!"); - QVERIFY2(socket.socketError() == QAbstractSocket::ConnectionRefusedError, + QVERIFY2(socket.error() == QAbstractSocket::ConnectionRefusedError, QString("Could not reach server: %1").arg(socket.errorString()).toLocal8Bit()); } @@ -2779,7 +2779,7 @@ void tst_QTcpSocket::taskQtBug5799ConnectionErrorEventLoop() QTestEventLoop::instance().enterLoop(10); QVERIFY2(!QTestEventLoop::instance().timeout(), "Connection to closed port timed out instead of refusing, something is wrong"); QVERIFY2(socket.state() == QAbstractSocket::UnconnectedState, "Socket connected unexpectedly!"); - QVERIFY2(socket.socketError() == QAbstractSocket::ConnectionRefusedError, + QVERIFY2(socket.error() == QAbstractSocket::ConnectionRefusedError, QString("Could not reach server: %1").arg(socket.errorString()).toLocal8Bit()); } @@ -2789,12 +2789,12 @@ void tst_QTcpSocket::taskQtBug7054TimeoutErrorResetting() socket->connectToHost(QtNetworkSettings::httpServerName(), 443); QVERIFY(socket->waitForConnected(5*1000)); - QCOMPARE(socket->socketError(), QAbstractSocket::UnknownSocketError); + QCOMPARE(socket->error(), QAbstractSocket::UnknownSocketError); // We connected to the HTTPS port. Wait two seconds to receive data. We will receive // nothing because we would need to start the SSL handshake QVERIFY(!socket->waitForReadyRead(2*1000)); - QCOMPARE(socket->socketError(), QAbstractSocket::SocketTimeoutError); + QCOMPARE(socket->error(), QAbstractSocket::SocketTimeoutError); // Now write some crap to make the server disconnect us. 4 lines are enough. socket->write("a\r\nb\r\nc\r\nd\r\n"); @@ -2804,7 +2804,7 @@ void tst_QTcpSocket::taskQtBug7054TimeoutErrorResetting() // should get a better error since the server disconnected us QVERIFY(!socket->waitForReadyRead(2*1000)); // It must NOT be the SocketTimeoutError that had been set before - QCOMPARE(socket->socketError(), QAbstractSocket::RemoteHostClosedError); + QCOMPARE(socket->error(), QAbstractSocket::RemoteHostClosedError); } #ifndef QT_NO_NETWORKPROXY @@ -2862,7 +2862,7 @@ void tst_QTcpSocket::invalidProxy() // note: the following test is not a hard failure. // Sometimes, error codes change for the better - QTEST(int(socket->socketError()), "expectedError"); + QTEST(int(socket->error()), "expectedError"); delete socket; } @@ -2982,7 +2982,7 @@ void tst_QTcpSocket::proxyFactory() // note: the following test is not a hard failure. // Sometimes, error codes change for the better - QTEST(int(socket->socketError()), "expectedError"); + QTEST(int(socket->error()), "expectedError"); delete socket; } diff --git a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp index 88898cd8a86..0f419e9de49 100644 --- a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp +++ b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp @@ -337,7 +337,7 @@ void tst_QUdpSocket::constructing() QCOMPARE(socket.canReadLine(), false); QCOMPARE(socket.readLine(), QByteArray()); QCOMPARE(socket.socketDescriptor(), (qintptr)-1); - QCOMPARE(socket.socketError(), QUdpSocket::UnknownSocketError); + QCOMPARE(socket.error(), QUdpSocket::UnknownSocketError); QCOMPARE(socket.errorString(), QString("Unknown error")); // Check the state of the socket api @@ -575,7 +575,7 @@ void tst_QUdpSocket::ipv6Loop() int paulPort; if (!peter.bind(QHostAddress(QHostAddress::LocalHostIPv6), 0)) { - QCOMPARE(peter.socketError(), QUdpSocket::UnsupportedSocketOperationError); + QCOMPARE(peter.error(), QUdpSocket::UnsupportedSocketOperationError); return; } @@ -897,7 +897,7 @@ void tst_QUdpSocket::writeDatagram() QCOMPARE(errorspy.count(), 1); QCOMPARE(*static_cast(errorspy.at(0).at(0).constData()), int(QUdpSocket::DatagramTooLargeError)); - QCOMPARE(client.socketError(), QUdpSocket::DatagramTooLargeError); + QCOMPARE(client.error(), QUdpSocket::DatagramTooLargeError); break; } QCOMPARE(bytesspy.count(), 1); @@ -1054,14 +1054,14 @@ void tst_QUdpSocket::writeToNonExistingPeer() // the second one should fail! QTest::qSleep(1000); // do not process events QCOMPARE(sConnected.write("", 1), qint64(-1)); - QCOMPARE(int(sConnected.socketError()), int(QUdpSocket::ConnectionRefusedError)); + QCOMPARE(int(sConnected.error()), int(QUdpSocket::ConnectionRefusedError)); // the third one will succeed... QCOMPARE(sConnected.write("", 1), qint64(1)); QTestEventLoop::instance().enterLoop(1); QCOMPARE(sConnectedReadyReadSpy.count(), 0); QCOMPARE(sConnectedErrorSpy.count(), 1); - QCOMPARE(int(sConnected.socketError()), int(QUdpSocket::ConnectionRefusedError)); + QCOMPARE(int(sConnected.error()), int(QUdpSocket::ConnectionRefusedError)); // we should now get a read error QCOMPARE(sConnected.write("", 1), qint64(1)); @@ -1071,12 +1071,12 @@ void tst_QUdpSocket::writeToNonExistingPeer() QCOMPARE(sConnected.bytesAvailable(), Q_INT64_C(0)); QCOMPARE(sConnected.pendingDatagramSize(), Q_INT64_C(-1)); QCOMPARE(sConnected.readDatagram(buf, 2), Q_INT64_C(-1)); - QCOMPARE(int(sConnected.socketError()), int(QUdpSocket::ConnectionRefusedError)); + QCOMPARE(int(sConnected.error()), int(QUdpSocket::ConnectionRefusedError)); QCOMPARE(sConnected.write("", 1), qint64(1)); QTest::qSleep(1000); // do not process events QCOMPARE(sConnected.read(buf, 2), Q_INT64_C(0)); - QCOMPARE(int(sConnected.socketError()), int(QUdpSocket::ConnectionRefusedError)); + QCOMPARE(int(sConnected.error()), int(QUdpSocket::ConnectionRefusedError)); // we should still be connected QCOMPARE(int(sConnected.state()), int(QUdpSocket::ConnectedState)); diff --git a/tests/auto/network/ssl/qocsp/tst_qocsp.cpp b/tests/auto/network/ssl/qocsp/tst_qocsp.cpp index 94d206ac839..c1072303164 100644 --- a/tests/auto/network/ssl/qocsp/tst_qocsp.cpp +++ b/tests/auto/network/ssl/qocsp/tst_qocsp.cpp @@ -606,7 +606,7 @@ void tst_QOcsp::malformedResponse() loop.enterLoopMSecs(handshakeTimeoutMS); QVERIFY(!clientSocket.isEncrypted()); - QCOMPARE(clientSocket.socketError(), QAbstractSocket::SslHandshakeFailedError); + QCOMPARE(clientSocket.error(), QAbstractSocket::SslHandshakeFailedError); } void tst_QOcsp::expiredResponse_data() diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp index e0364c71552..cf383afd8bd 100644 --- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp @@ -527,7 +527,7 @@ void tst_QSslSocket::constructing() QCOMPARE(socket.write(0, 0), qint64(-1)); QTest::ignoreMessage(QtWarningMsg, writeNotOpenMessage); QCOMPARE(socket.write(QByteArray()), qint64(-1)); - QCOMPARE(socket.socketError(), QAbstractSocket::UnknownSocketError); + QCOMPARE(socket.error(), QAbstractSocket::UnknownSocketError); QVERIFY(!socket.flush()); QVERIFY(!socket.isValid()); QCOMPARE(socket.localAddress(), QHostAddress()); @@ -1390,16 +1390,16 @@ void tst_QSslSocket::protocolServerSide() QAbstractSocket::SocketState expectedState = (works) ? QAbstractSocket::ConnectedState : QAbstractSocket::UnconnectedState; // Determine whether the client or the server caused the event loop // to quit due to a socket error, and investigate the culprit. - if (client.socketError() != QAbstractSocket::UnknownSocketError) { + if (client.error() != QAbstractSocket::UnknownSocketError) { // It can happen that the client, after TCP connection established, before // incomingConnection() slot fired, hits TLS initialization error and stops // the loop, so the server socket is not created yet. if (server.socket) - QVERIFY(server.socket->socketError() == QAbstractSocket::UnknownSocketError); + QVERIFY(server.socket->error() == QAbstractSocket::UnknownSocketError); QCOMPARE(client.state(), expectedState); - } else if (server.socket->socketError() != QAbstractSocket::UnknownSocketError) { - QVERIFY(client.socketError() == QAbstractSocket::UnknownSocketError); + } else if (server.socket->error() != QAbstractSocket::UnknownSocketError) { + QVERIFY(client.error() == QAbstractSocket::UnknownSocketError); QCOMPARE(server.socket->state(), expectedState); } @@ -2011,7 +2011,7 @@ void tst_QSslSocket::setEmptyKey() QTestEventLoop::instance().enterLoop(2); QCOMPARE(socket.state(), QAbstractSocket::ConnectedState); - QCOMPARE(socket.socketError(), QAbstractSocket::UnknownSocketError); + QCOMPARE(socket.error(), QAbstractSocket::UnknownSocketError); } void tst_QSslSocket::spontaneousWrite() @@ -2783,11 +2783,11 @@ void tst_QSslSocket::writeBigChunk() // no better way to do this right now since the error is the same as the default error. if (socket->errorString().startsWith(QLatin1String("Unable to write data"))) { - qWarning() << socket->socketError() << socket->errorString(); + qWarning() << socket->error() << socket->errorString(); QFAIL("Error while writing! Check if the OpenSSL BIO size is limited?!"); } // also check the error string. If another error (than UnknownError) occurred, it should be different than before - QVERIFY2(errorBefore == errorAfter || socket->socketError() == QAbstractSocket::RemoteHostClosedError, + QVERIFY2(errorBefore == errorAfter || socket->error() == QAbstractSocket::RemoteHostClosedError, QByteArray("unexpected error: ").append(qPrintable(errorAfter))); // check that everything has been written to OpenSSL @@ -2982,7 +2982,7 @@ void tst_QSslSocket::resume() QCOMPARE(encryptedSpy.count(), 0); QVERIFY(!socket.isEncrypted()); QCOMPARE(errorSpy.count(), 1); - QCOMPARE(socket.socketError(), QAbstractSocket::SslHandshakeFailedError); + QCOMPARE(socket.error(), QAbstractSocket::SslHandshakeFailedError); } } @@ -4347,9 +4347,9 @@ void tst_QSslSocket::disabledProtocols() // early, preventing any real connection from ever starting. QSslSocket socket; socket.setProtocol(disabledProtocol); - QCOMPARE(socket.socketError(), QAbstractSocket::UnknownSocketError); + QCOMPARE(socket.error(), QAbstractSocket::UnknownSocketError); socket.connectToHostEncrypted(QStringLiteral("doesnotmatter.org"), 1010); - QCOMPARE(socket.socketError(), QAbstractSocket::SslInvalidUserDataError); + QCOMPARE(socket.error(), QAbstractSocket::SslInvalidUserDataError); QCOMPARE(socket.state(), QAbstractSocket::UnconnectedState); } { @@ -4359,14 +4359,14 @@ void tst_QSslSocket::disabledProtocols() QVERIFY(server.listen()); QSslSocket socket; - QCOMPARE(socket.socketError(), QAbstractSocket::UnknownSocketError); + QCOMPARE(socket.error(), QAbstractSocket::UnknownSocketError); socket.connectToHost(QHostAddress::LocalHost, server.serverPort()); QVERIFY(socket.waitForConnected(timeoutMS)); socket.setProtocol(disabledProtocol); socket.startClientEncryption(); - QCOMPARE(socket.socketError(), QAbstractSocket::SslInvalidUserDataError); + QCOMPARE(socket.error(), QAbstractSocket::SslInvalidUserDataError); } { // 2. waitForEncrypted: client-side, blocking API plus requires from us @@ -4390,7 +4390,7 @@ void tst_QSslSocket::disabledProtocols() loop.enterLoopMSecs(timeoutMS); QVERIFY(!loop.timeout()); QVERIFY(server.socket); - QCOMPARE(server.socket->socketError(), QAbstractSocket::SslInvalidUserDataError); + QCOMPARE(server.socket->error(), QAbstractSocket::SslInvalidUserDataError); } } diff --git a/tests/auto/other/networkselftest/tst_networkselftest.cpp b/tests/auto/other/networkselftest/tst_networkselftest.cpp index 0f507183286..396e23da0cb 100644 --- a/tests/auto/other/networkselftest/tst_networkselftest.cpp +++ b/tests/auto/other/networkselftest/tst_networkselftest.cpp @@ -428,7 +428,7 @@ void tst_NetworkSelfTest::serverReachability() QVERIFY2(timer.elapsed() < 9900, "Connection to closed port timed out instead of refusing, something is wrong"); QVERIFY2(socket.state() == QAbstractSocket::UnconnectedState, "Socket connected unexpectedly!"); - QVERIFY2(socket.socketError() == QAbstractSocket::ConnectionRefusedError, + QVERIFY2(socket.error() == QAbstractSocket::ConnectionRefusedError, QString("Could not reach server: %1").arg(socket.errorString()).toLocal8Bit()); } @@ -458,7 +458,7 @@ void tst_NetworkSelfTest::remotePortsOpen() socket.connectToHost(QtNetworkSettings::serverName(), portNumber); if (!socket.waitForConnected(10000)) { - if (socket.socketError() == QAbstractSocket::SocketTimeoutError) + if (socket.error() == QAbstractSocket::SocketTimeoutError) QFAIL(QString("Network timeout connecting to the server on port %1").arg(portNumber).toLocal8Bit()); else QFAIL(QString("Error connecting to server on port %1: %2").arg(portNumber).arg(socket.errorString()).toLocal8Bit()); diff --git a/tests/baselineserver/shared/baselineprotocol.cpp b/tests/baselineserver/shared/baselineprotocol.cpp index 9e5321cb1bf..aa496d6c544 100644 --- a/tests/baselineserver/shared/baselineprotocol.cpp +++ b/tests/baselineserver/shared/baselineprotocol.cpp @@ -545,7 +545,7 @@ bool BaselineProtocol::receiveBlock(Command *cmd, QByteArray *block) QString BaselineProtocol::errorMessage() { QString ret = errMsg; - if (socket.socketError() >= 0) + if (socket.error() >= 0) ret += QLS(" Socket state: ") + socket.errorString(); return ret; } From bf377dd1af26a852d9c68f81be98bdf3c0c8ed69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Wed, 26 Feb 2020 17:18:34 +0100 Subject: [PATCH 13/34] Doc: Rename TransferTimeoutPreset to DefaultTransferTimeoutConstant A couple missed instances. Amends 0394961f953094ab3535b79329dace4ed9a0300d Change-Id: I41d47d1476c6688ca8a40b1ca62131891b9dec28 Reviewed-by: Timur Pocheptsov --- src/network/access/qnetworkaccessmanager.cpp | 2 +- src/network/access/qnetworkrequest.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 9cbf7b45c62..695f022e4bb 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -1728,7 +1728,7 @@ int QNetworkAccessManager::transferTimeout() const Transfers are aborted if no bytes are transferred before the timeout expires. Zero means no timer is set. If no argument is provided, the timeout is - QNetworkRequest::TransferTimeoutPreset. If this function + QNetworkRequest::DefaultTransferTimeoutConstant. If this function is not called, the timeout is disabled and has the value zero. The request-specific non-zero timeouts set for the requests that are executed override this value. This means diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index f1c8575c581..6cd56499c5b 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -949,7 +949,7 @@ int QNetworkRequest::transferTimeout() const Transfers are aborted if no bytes are transferred before the timeout expires. Zero means no timer is set. If no argument is provided, the timeout is - QNetworkRequest::TransferTimeoutPreset. If this function + QNetworkRequest::DefaultTransferTimeoutConstant. If this function is not called, the timeout is disabled and has the value zero. From 86f7d44089138b181642ee22989519f188c75bd5 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Sat, 22 Feb 2020 20:26:56 +0200 Subject: [PATCH 14/34] Examples: request Android storage permissions when using QStandardPaths http example uses QStandardPaths, on Android permissions might need to be explicitly requested to write the downloaded file. Task-number: QTBUG-80717 Change-Id: Icd377254ad77cac661c5ae37e9081e0463493d8b Reviewed-by: Eskil Abrahamsen Blomfeldt --- examples/network/http/http.pro | 4 ++++ examples/network/http/main.cpp | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/examples/network/http/http.pro b/examples/network/http/http.pro index 2f2d3b00ae0..f67cd014954 100644 --- a/examples/network/http/http.pro +++ b/examples/network/http/http.pro @@ -1,4 +1,8 @@ QT += network widgets +android: qtHaveModule(androidextras) { + QT += androidextras + DEFINES += REQUEST_PERMISSIONS_ON_ANDROID +} HEADERS += httpwindow.h SOURCES += httpwindow.cpp \ diff --git a/examples/network/http/main.cpp b/examples/network/http/main.cpp index f126c7846a6..1339f2f6934 100644 --- a/examples/network/http/main.cpp +++ b/examples/network/http/main.cpp @@ -53,11 +53,30 @@ #include #include "httpwindow.h" +#ifdef REQUEST_PERMISSIONS_ON_ANDROID +#include + +bool requestStoragePermission() { + using namespace QtAndroid; + + QString permission = QStringLiteral("android.permission.WRITE_EXTERNAL_STORAGE"); + const QHash results = requestPermissionsSync(QStringList({permission})); + if (!results.contains(permission) || results[permission] == PermissionResult::Denied) { + qWarning() << "Couldn't get permission: " << permission; + return false; + } + + return true; +} +#endif int main(int argc, char *argv[]) { QApplication app(argc, argv); - +#ifdef REQUEST_PERMISSIONS_ON_ANDROID + if (!requestStoragePermission()) + return -1; +#endif HttpWindow httpWin; const QRect availableSize = httpWin.screen()->availableGeometry(); httpWin.resize(availableSize.width() / 5, availableSize.height() / 5); From fd4be84d23a0db4186cb42e736a9de3af722c7f7 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Wed, 26 Feb 2020 10:42:10 +0100 Subject: [PATCH 15/34] Add an expansion limit for entities Recursively defined entities can easily exhaust all available memory. Limit entity expansion to a default of 4096 characters to avoid DoS attacks when a user loads untrusted content. Added a setter and getter to allow modifying the expansion limit. [ChangeLog][QtCore][QXmlStream] QXmlStreamReader does now by default limit the expansion of entities to 4096 characters. Documents where a single entity expands to more characters than the limit are not considered well formed. The limit is there to avoid DoS attacks through recursively expanding entities when loading untrusted content. The limit can be changed through the QXmlStreamReader::setEntityExpansionLimit() method. Fixes: QTBUG-47417 Change-Id: I94387815d74fcf34783e136387ee57fac5ded0c9 Reviewed-by: Oswald Buddenhagen Reviewed-by: Volker Hilsheimer --- src/corelib/serialization/qxmlstream.cpp | 36 +++++++++++++++ src/corelib/serialization/qxmlstream.g | 14 +++++- src/corelib/serialization/qxmlstream.h | 2 + src/corelib/serialization/qxmlstream_p.h | 14 +++++- .../qxmlstream/tst_qxmlstream.cpp | 44 ++++++++++++++++++- 5 files changed, 106 insertions(+), 4 deletions(-) diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp index 7ff87885a53..d7fb0d0d418 100644 --- a/src/corelib/serialization/qxmlstream.cpp +++ b/src/corelib/serialization/qxmlstream.cpp @@ -2041,6 +2041,42 @@ QStringRef QXmlStreamReader::dtdSystemId() const return QStringRef(); } +/*! + \since 5.15 + + Returns the maximum amount of characters a single entity is + allowed to expand into. If a single entity expands past the + given limit, the document is not considered well formed. + + \sa setEntityExpansionLimit +*/ +int QXmlStreamReader::entityExpansionLimit() const +{ + Q_D(const QXmlStreamReader); + return d->entityExpansionLimit; +} + +/*! + \since 5.15 + + Sets the maximum amount of characters a single entity is + allowed to expand into to \a limit. If a single entity expands + past the given limit, the document is not considered well formed. + + The limit is there to prevent DoS attacks when loading unknown + XML documents where recursive entity expansion could otherwise + exhaust all available memory. + + The default value for this property is 4096 characters. + + \sa entityExpansionLimit +*/ +void QXmlStreamReader::setEntityExpansionLimit(int limit) +{ + Q_D(QXmlStreamReader); + d->entityExpansionLimit = limit; +} + /*! If the tokenType() is \l StartElement, this function returns the element's namespace declarations. Otherwise an empty vector is returned. diff --git a/src/corelib/serialization/qxmlstream.g b/src/corelib/serialization/qxmlstream.g index 12ecc9bdb2a..b623de95056 100644 --- a/src/corelib/serialization/qxmlstream.g +++ b/src/corelib/serialization/qxmlstream.g @@ -285,9 +285,19 @@ public: QHash entityHash; QHash parameterEntityHash; QXmlStreamSimpleStackentityReferenceStack; + int entityExpansionLimit = 4096; + int entityLength = 0; inline bool referenceEntity(Entity &entity) { if (entity.isCurrentlyReferenced) { - raiseWellFormedError(QXmlStream::tr("Recursive entity detected.")); + raiseWellFormedError(QXmlStream::tr("Self-referencing entity detected.")); + return false; + } + // entityLength represents the amount of additional characters the + // entity expands into (can be negative for e.g. &). It's used to + // avoid DoS attacks through recursive entity expansions + entityLength += entity.value.size() - entity.name.size() - 2; + if (entityLength > entityExpansionLimit) { + raiseWellFormedError(QXmlStream::tr("Entity expands to more characters than the entity expansion limit.")); return false; } entity.isCurrentlyReferenced = true; @@ -838,6 +848,8 @@ entity_done ::= ENTITY_DONE; /. case $rule_number: entityReferenceStack.pop()->isCurrentlyReferenced = false; + if (entityReferenceStack.isEmpty()) + entityLength = 0; clearSym(); break; ./ diff --git a/src/corelib/serialization/qxmlstream.h b/src/corelib/serialization/qxmlstream.h index 7d0aa64570e..c8647e04658 100644 --- a/src/corelib/serialization/qxmlstream.h +++ b/src/corelib/serialization/qxmlstream.h @@ -426,6 +426,8 @@ public: QStringRef dtdPublicId() const; QStringRef dtdSystemId() const; + int entityExpansionLimit() const; + void setEntityExpansionLimit(int limit); enum Error { NoError, diff --git a/src/corelib/serialization/qxmlstream_p.h b/src/corelib/serialization/qxmlstream_p.h index 9c94e6d4346..103b123b10c 100644 --- a/src/corelib/serialization/qxmlstream_p.h +++ b/src/corelib/serialization/qxmlstream_p.h @@ -774,9 +774,19 @@ public: QHash entityHash; QHash parameterEntityHash; QXmlStreamSimpleStackentityReferenceStack; + int entityExpansionLimit = 4096; + int entityLength = 0; inline bool referenceEntity(Entity &entity) { if (entity.isCurrentlyReferenced) { - raiseWellFormedError(QXmlStream::tr("Recursive entity detected.")); + raiseWellFormedError(QXmlStream::tr("Self-referencing entity detected.")); + return false; + } + // entityLength represents the amount of additional characters the + // entity expands into (can be negative for e.g. &). It's used to + // avoid DoS attacks through recursive entity expansions + entityLength += entity.value.size() - entity.name.size() - 2; + if (entityLength > entityExpansionLimit) { + raiseWellFormedError(QXmlStream::tr("Entity expands to more characters than the entity expansion limit.")); return false; } entity.isCurrentlyReferenced = true; @@ -1308,6 +1318,8 @@ bool QXmlStreamReaderPrivate::parse() case 10: entityReferenceStack.pop()->isCurrentlyReferenced = false; + if (entityReferenceStack.isEmpty()) + entityLength = 0; clearSym(); break; diff --git a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp index 12279133a21..28922574b87 100644 --- a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp +++ b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp @@ -397,8 +397,6 @@ public: return true; } - QXmlStreamReader reader(&inputFile); - /* See testcases.dtd which reads: 'Nonvalidating parsers * must also accept "invalid" testcases, but validating ones must reject them.' */ if(type == QLatin1String("invalid") || type == QLatin1String("valid")) @@ -583,6 +581,8 @@ private slots: void roundTrip() const; void roundTrip_data() const; + void entityExpansionLimit() const; + private: static QByteArray readFile(const QString &filename); @@ -1755,6 +1755,46 @@ void tst_QXmlStream::roundTrip_data() const "\n"; } +void tst_QXmlStream::entityExpansionLimit() const +{ + QString xml = QStringLiteral("" + "" + "" + "" + "" + "]>" + "&d;&d;&d;"); + { + QXmlStreamReader reader(xml); + QCOMPARE(reader.entityExpansionLimit(), 4096); + do { + reader.readNext(); + } while (!reader.atEnd()); + QCOMPARE(reader.error(), QXmlStreamReader::NotWellFormedError); + } + + // &d; expands to 10k characters, minus the 3 removed (&d;) means it should fail + // with a limit of 9996 chars and pass with 9997 + { + QXmlStreamReader reader(xml); + reader.setEntityExpansionLimit(9996); + do { + reader.readNext(); + } while (!reader.atEnd()); + + QCOMPARE(reader.error(), QXmlStreamReader::NotWellFormedError); + } + { + QXmlStreamReader reader(xml); + reader.setEntityExpansionLimit(9997); + do { + reader.readNext(); + } while (!reader.atEnd()); + QCOMPARE(reader.error(), QXmlStreamReader::NoError); + } +} + void tst_QXmlStream::roundTrip() const { QFETCH(QString, in); From f15aa1fd84e46dfc4d9a78b3a7ba482e42abd9c1 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Tue, 25 Feb 2020 16:01:58 +0100 Subject: [PATCH 16/34] QDockWidget: mark AllDockWidgetFeatures enum value as deprecated As per ### Qt 6 comment, and the documentation which already suggests to specify the individual flags instead. Change-Id: Id236b7b13024a15fc7ad483b9481361b2ac43a02 Reviewed-by: Shawn Rutledge --- src/widgets/widgets/qdockwidget.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/widgets/widgets/qdockwidget.h b/src/widgets/widgets/qdockwidget.h index b53a991dae1..36dff4d420c 100644 --- a/src/widgets/widgets/qdockwidget.h +++ b/src/widgets/widgets/qdockwidget.h @@ -78,7 +78,10 @@ public: DockWidgetVerticalTitleBar = 0x08, DockWidgetFeatureMask = 0x0f, - AllDockWidgetFeatures = DockWidgetClosable|DockWidgetMovable|DockWidgetFloatable, // ### Qt 6: remove +#if QT_DEPRECATED_SINCE(5, 15) + AllDockWidgetFeatures Q_DECL_ENUMERATOR_DEPRECATED = + DockWidgetClosable|DockWidgetMovable|DockWidgetFloatable, // ### Qt 6: remove +#endif NoDockWidgetFeatures = 0x00, Reserved = 0xff From 469c3338407a5cf74c5e35c43ebb48c14e21ecac Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Tue, 25 Feb 2020 15:41:54 +0100 Subject: [PATCH 17/34] QComboBox: deprecate SizeAdjustPolicy::AdjustToMinimumContentLength As per ### Qt 6 comment and pre-existing documentation, one of the other enum values should be used anyway. Only usage in QtWidgets is in QFileDialog, replace it there with appropriate alternative. [ChangeLog][QtWidgets][QComboBox] the SizeAdjustPolicy value AdjustToMinimumContentLength is deprecated, use AdjustToContents or AdjustToContentsOnFirstShow instead. Change-Id: I22deaa31fbb6c09e87c814e120eb7ee27c177ea9 Reviewed-by: Shawn Rutledge --- src/widgets/dialogs/qfiledialog.cpp | 2 +- src/widgets/widgets/qcombobox.cpp | 2 +- src/widgets/widgets/qcombobox.h | 7 +++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index af2007a4d18..81f0cde407f 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -3144,7 +3144,7 @@ void QFileDialogPrivate::createWidgets() // filetype qFileDialogUi->fileTypeCombo->setDuplicatesEnabled(false); - qFileDialogUi->fileTypeCombo->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLength); + qFileDialogUi->fileTypeCombo->setSizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow); qFileDialogUi->fileTypeCombo->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); QObject::connect(qFileDialogUi->fileTypeCombo, SIGNAL(activated(int)), q, SLOT(_q_useNameFilter(int))); diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 8c05c6de7ac..df8e7b4a3fb 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -894,7 +894,7 @@ QStyleOptionComboBox QComboBoxPrivateContainer::comboStyleOption() const \value AdjustToContents The combobox will always adjust to the contents \value AdjustToContentsOnFirstShow The combobox will adjust to its contents the first time it is shown. - \value AdjustToMinimumContentsLength Use AdjustToContents or AdjustToContentsOnFirstShow instead. + \omitvalue AdjustToMinimumContentsLength \value AdjustToMinimumContentsLengthWithIcon The combobox will adjust to \l minimumContentsLength plus space for an icon. For performance reasons use this policy on large models. */ diff --git a/src/widgets/widgets/qcombobox.h b/src/widgets/widgets/qcombobox.h index 1f6e2fcdb30..e0b213bc893 100644 --- a/src/widgets/widgets/qcombobox.h +++ b/src/widgets/widgets/qcombobox.h @@ -137,8 +137,11 @@ public: enum SizeAdjustPolicy { AdjustToContents, AdjustToContentsOnFirstShow, - AdjustToMinimumContentsLength, // ### Qt 6: remove - AdjustToMinimumContentsLengthWithIcon +#if QT_DEPRECATED_SINCE(5, 15) + AdjustToMinimumContentsLength Q_DECL_ENUMERATOR_DEPRECATED_X( + "Use AdjustToContents or AdjustToContentsOnFirstShow"), // ### Qt 6: remove +#endif + AdjustToMinimumContentsLengthWithIcon = AdjustToContentsOnFirstShow + 2 }; Q_ENUM(SizeAdjustPolicy) From 1fcb06f79aad556dc728b8aa1868156da8507c39 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Mon, 24 Feb 2020 10:32:42 +0100 Subject: [PATCH 18/34] Documentation: correctly use see-also tags to link to related members Change-Id: I764eb4730067cd704866191516dc4e8dd1820760 Reviewed-by: Nico Vertriest --- src/widgets/widgets/qdatetimeedit.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp index 64795d7ccbc..0b9c15a1570 100644 --- a/src/widgets/widgets/qdatetimeedit.cpp +++ b/src/widgets/widgets/qdatetimeedit.cpp @@ -669,7 +669,8 @@ void QDateTimeEdit::setTimeRange(const QTime &min, const QTime &max) \brief The currently displayed fields of the date time edit. Returns a bit set of the displayed sections for this format. - \a setDisplayFormat(), displayFormat() + + \sa setDisplayFormat(), displayFormat() */ QDateTimeEdit::Sections QDateTimeEdit::displayedSections() const @@ -682,7 +683,8 @@ QDateTimeEdit::Sections QDateTimeEdit::displayedSections() const \property QDateTimeEdit::currentSection \brief The current section of the spinbox. - \a setCurrentSection() + + \sa setCurrentSection() */ QDateTimeEdit::Section QDateTimeEdit::currentSection() const @@ -762,8 +764,7 @@ int QDateTimeEdit::sectionCount() const the cursorPosition is 5, currentSectionIndex returns 1. If the cursorPosition is 3, currentSectionIndex is 0, and so on. - \a setCurrentSection() - \sa currentSection() + \sa setCurrentSection(), currentSection() */ int QDateTimeEdit::currentSectionIndex() const From 8b9a02537300507d21d58ac7d3db4fe1a2f2fe62 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Mon, 24 Feb 2020 17:23:57 +0100 Subject: [PATCH 19/34] Make QDeadlineTimer test more resilient against VM starvation Flaky fails in this test suggest that the VM on which the test is executed does not get CPU resources allocated for enough time to make this test pass. This change makes the test more resilient by taking the measurements as quickly as possible. In addition, use a sanity-check based on std::chrono APIs to abort the test completely if we see that the clock has advanced too far to make the following tests meaningful. Change-Id: Ie6ac4ffb52f20e7774014f8222c9cd8f54d8a263 Fixes: QTBUG-64517 Reviewed-by: Friedemann Kleint --- .../qdeadlinetimer/tst_qdeadlinetimer.cpp | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp b/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp index 4e105d7dc7b..35c5e7cb751 100644 --- a/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp +++ b/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp @@ -580,11 +580,26 @@ void tst_QDeadlineTimer::stdchrono() auto now = QDeadlineTimer::current(timerType); QTest::qSleep(minResolution); + auto sampling_start = steady_clock::now(); + auto steady_deadline = now.deadline(); + auto system_deadline = now.deadline(); auto steady_after = steady_clock::now(); auto system_after = system_clock::now(); + auto sampling_end = steady_clock::now(); + + auto sampling_diff = duration_cast(sampling_end - sampling_start).count(); + if (sampling_diff > minResolution/2) { + qWarning() << "Sampling clock took" << sampling_diff << "ms"; + QSKIP("Sampling clock took too long, aborting test", Abort); + } + auto total_diff = duration_cast(steady_after - steady_before).count(); + if (total_diff >= 3*minResolution) { + qWarning() << "Measurement took" << total_diff << "ms"; + QSKIP("Measurement took too long, aborting test", Abort); + } { - auto diff = duration_cast(steady_after - now.deadline()); + auto diff = duration_cast(steady_after - steady_deadline); QVERIFY2(diff.count() > minResolution/2, QByteArray::number(qint64(diff.count()))); QVERIFY2(diff.count() < 3*minResolution/2, QByteArray::number(qint64(diff.count()))); QDeadlineTimer dt_after(steady_after, timerType); @@ -592,7 +607,7 @@ void tst_QDeadlineTimer::stdchrono() ("now = " + QLocale().toString(now.deadlineNSecs()) + "; after = " + QLocale().toString(dt_after.deadlineNSecs())).toLatin1()); - diff = duration_cast(now.deadline() - steady_before); + diff = duration_cast(steady_deadline - steady_before); QVERIFY2(diff.count() > minResolution/2, QByteArray::number(qint64(diff.count()))); QVERIFY2(diff.count() < 3*minResolution/2, QByteArray::number(qint64(diff.count()))); QDeadlineTimer dt_before(steady_before, timerType); @@ -601,7 +616,7 @@ void tst_QDeadlineTimer::stdchrono() "; before = " + QLocale().toString(dt_before.deadlineNSecs())).toLatin1()); } { - auto diff = duration_cast(system_after - now.deadline()); + auto diff = duration_cast(system_after - system_deadline); QVERIFY2(diff.count() > minResolution/2, QByteArray::number(qint64(diff.count()))); QVERIFY2(diff.count() < 3*minResolution/2, QByteArray::number(qint64(diff.count()))); QDeadlineTimer dt_after(system_after, timerType); @@ -609,7 +624,7 @@ void tst_QDeadlineTimer::stdchrono() ("now = " + QLocale().toString(now.deadlineNSecs()) + "; after = " + QLocale().toString(dt_after.deadlineNSecs())).toLatin1()); - diff = duration_cast(now.deadline() - system_before); + diff = duration_cast(system_deadline - system_before); QVERIFY2(diff.count() > minResolution/2, QByteArray::number(qint64(diff.count()))); QVERIFY2(diff.count() < 3*minResolution/2, QByteArray::number(qint64(diff.count()))); QDeadlineTimer dt_before(system_before, timerType); From c6dd2e2367885d348e02440f23fd0bd54644c6f4 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Mon, 24 Feb 2020 14:00:49 +0100 Subject: [PATCH 20/34] Document the behavior of QLineEdit::inputMask correctly QLineEdit is unicode, and uses QChar::isLetter and QChar::isNumber to evaluate whether an input character is valid. There is no test for ASCII ranges, or converting of input characters to ASCII, so the documentation was wrong. [ChangeLog][QtWidgets][QLineEdit] the inputMask property has allowed any Letter or Number category character for the respective mask characters, not just ASCII. The documentation has been updated accordingly. Change-Id: Ied93cf6ddd334ac91bfbc275107a8eb83d231d80 Fixes: QTBUG-82291 Reviewed-by: Edward Welbourne Reviewed-by: Venugopal Shivashankar --- src/widgets/widgets/qlineedit.cpp | 32 +++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp index eaf31551d91..6aa641ebe6b 100644 --- a/src/widgets/widgets/qlineedit.cpp +++ b/src/widgets/widgets/qlineedit.cpp @@ -1200,8 +1200,8 @@ QMargins QLineEdit::textMargins() const The input mask is an input template string. It can contain the following elements: \table - \row \li Mask Characters \li Defines the class of input characters that are - considered valid in this position + \row \li Mask Characters \li Defines the \l {QChar::} {Category} of input characters + that are considered valid in this position \row \li Meta Characters \li Various special meanings \row \li Separators \li All other characters are regarded as immutable separators \endtable @@ -1210,17 +1210,21 @@ QMargins QLineEdit::textMargins() const \table \header \li Mask Character \li Meaning - \row \li \c A \li ASCII alphabetic character required. A-Z, a-z. - \row \li \c a \li ASCII alphabetic character permitted but not required. - \row \li \c N \li ASCII alphanumeric character required. A-Z, a-z, 0-9. - \row \li \c n \li ASCII alphanumeric character permitted but not required. - \row \li \c X \li Any character required. - \row \li \c x \li Any character permitted but not required. - \row \li \c 9 \li ASCII digit required. 0-9. - \row \li \c 0 \li ASCII digit permitted but not required. - \row \li \c D \li ASCII digit required. 1-9. - \row \li \c d \li ASCII digit permitted but not required (1-9). - \row \li \c # \li ASCII digit or plus/minus sign permitted but not required. + \row \li \c A \li character of the Letter category required, such as A-Z, a-z. + \row \li \c a \li character of the Letter category permitted but not required. + \row \li \c N \li character of the Letter or Number category required, such as + A-Z, a-z, 0-9. + \row \li \c n \li character of the Letter or Number category permitted but not required. + \row \li \c X \li Any non-blank character required. + \row \li \c x \li Any non-blank character permitted but not required. + \row \li \c 9 \li character of the Number category required, e.g 0-9. + \row \li \c 0 \li character of the Number category permitted but not required. + \row \li \c D \li character of the Number category and larger than zero required, + such as 1-9 + \row \li \c d \li character of the Number category and larger than zero permitted but not + required, such as 1-9. + \row \li \c # \li character of the Number category, or plus/minus sign permitted but not + required. \row \li \c H \li Hexadecimal character required. A-F, a-f, 0-9. \row \li \c h \li Hexadecimal character permitted but not required. \row \li \c B \li Binary character required. 0-1. @@ -1262,7 +1266,7 @@ QMargins QLineEdit::textMargins() const To get range control (e.g., for an IP address) use masks together with \l{setValidator()}{validators}. - \sa maxLength + \sa maxLength, QChar::isLetter(), QChar::isNumber(), QChar::digitValue() */ QString QLineEdit::inputMask() const { From e8793476ac0d17dbadf9e05c3cf826c0f9d46710 Mon Sep 17 00:00:00 2001 From: Sze Howe Koh Date: Wed, 26 Feb 2020 22:13:28 +0800 Subject: [PATCH 21/34] Doc: List alternative ways to get the MySQL C Connector The C Connector does not appear to be offered as a component in the MySQL 8.0.19.0 installer. Task-number: QTBUG-82187 Change-Id: I4b1ef83cca68e7bf6dd032ba35c0784354d7fed3 Reviewed-by: Christian Ehrlicher --- src/sql/doc/src/sql-driver.qdoc | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/sql/doc/src/sql-driver.qdoc b/src/sql/doc/src/sql-driver.qdoc index f6fc90a7e92..a5cf28e5a75 100644 --- a/src/sql/doc/src/sql-driver.qdoc +++ b/src/sql/doc/src/sql-driver.qdoc @@ -170,28 +170,31 @@ \section3 How to Build the QMYSQL Plugin on Windows - You need to get the MySQL installation files (e.g. - \l {https://dev.mysql.com/downloads/installer/}{mysql-installer-web-community-8.0.18.0.msi}). - Run the installer, - select custom installation and install the MySQL C Connector + Get the \l{https://dev.mysql.com/downloads/installer/}{MySQL installer} (e.g. + \e{mysql-installer-web-community-8.0.18.0.msi}). Run the installer, + select "Custom" installation, and install the MySQL C Connector which matches your Qt installation (x86 or x64). - After installation make sure that the needed files are there: + After installation check that the needed files are there: \list \li \c {/lib/libmysql.lib} \li \c {/lib/libmysql.dll} \li \c {/include/mysql.h} \endlist - Build the plugin as follows (here it is assumed that the MySQL - C Connector is installed in + \note As of MySQL 8.0.19, the C Connector is no longer offered as a standalone + installable component. Instead, you can get \c{mysql.h} and \c{libmysql.*} by + installing the full MySQL Server (x64 only) or the + \l{https://downloads.mariadb.org/connector-c/}{MariaDB C Connector}. + + Build the plugin as follows (here it is assumed that \c{} is \c{C:/Program Files/MySQL/MySQL Connector C 6.1}): \snippet code/doc_src_sql-driver.qdoc 5 If you are not using a Microsoft compiler, replace \c nmake with \c - mingw32-make in the line above. + mingw32-make above. - When you distribute your application, remember to include libmysql.dll + When you distribute your application, remember to include \e libmysql.dll in your installation package. It must be placed in the same folder as the application executable. \e libmysql.dll additionally needs the MSVC runtime libraries which can be installed with From 0efdf54a16d785598a2e310733a43e51d8a521b8 Mon Sep 17 00:00:00 2001 From: Alexandra Cherdantseva Date: Mon, 20 Jan 2020 17:10:26 +0300 Subject: [PATCH 22/34] wasm: fix texture leak when window is destroyed in a different context MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reproduce: Show first window in first canvas; Show second window in second canvas; After screens are rendered destroy first window in first canvas Change-Id: Ifbeb4824c1fdedecf24d5d20e58613d15c066420 Reviewed-by: Morten Johan Sørvig --- .../platforms/wasm/qwasmbackingstore.cpp | 27 +++++++++++++++---- .../platforms/wasm/qwasmcompositor.cpp | 7 +++-- src/plugins/platforms/wasm/qwasmcompositor.h | 5 ++-- .../platforms/wasm/qwasmintegration.cpp | 5 ++++ src/plugins/platforms/wasm/qwasmintegration.h | 1 + 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/plugins/platforms/wasm/qwasmbackingstore.cpp b/src/plugins/platforms/wasm/qwasmbackingstore.cpp index 7e8a3825124..6ac685083d9 100644 --- a/src/plugins/platforms/wasm/qwasmbackingstore.cpp +++ b/src/plugins/platforms/wasm/qwasmbackingstore.cpp @@ -36,7 +36,7 @@ #include #include #include - +#include #include QT_BEGIN_NAMESPACE @@ -53,12 +53,29 @@ QWasmBackingStore::QWasmBackingStore(QWasmCompositor *compositor, QWindow *windo QWasmBackingStore::~QWasmBackingStore() { + auto window = this->window(); + QWasmIntegration::get()->removeBackingStore(window); + destroy(); + QWasmWindow *wasmWindow = static_cast(window->handle()); + if (wasmWindow) + wasmWindow->setBackingStore(nullptr); } void QWasmBackingStore::destroy() { - if (m_texture->isCreated()) - m_texture->destroy(); + if (m_texture->isCreated()) { + auto context = m_compositor->context(); + auto currentContext = QOpenGLContext::currentContext(); + if (!currentContext || !QOpenGLContext::areSharing(context, currentContext)) { + QOffscreenSurface offScreenSurface(m_compositor->screen()->screen()); + offScreenSurface.setFormat(context->format()); + offScreenSurface.create(); + context->makeCurrent(&offScreenSurface); + m_texture->destroy(); + } else { + m_texture->destroy(); + } + } } QPaintDevice *QWasmBackingStore::paintDevice() @@ -81,9 +98,9 @@ void QWasmBackingStore::updateTexture() if (m_dirty.isNull()) return; - if (m_recreateTexture && m_texture->isCreated()) { + if (m_recreateTexture) { m_recreateTexture = false; - m_texture->destroy(); + destroy(); } if (!m_texture->isCreated()) { diff --git a/src/plugins/platforms/wasm/qwasmcompositor.cpp b/src/plugins/platforms/wasm/qwasmcompositor.cpp index e9c45599716..2f0b0414d97 100644 --- a/src/plugins/platforms/wasm/qwasmcompositor.cpp +++ b/src/plugins/platforms/wasm/qwasmcompositor.cpp @@ -59,7 +59,6 @@ QWasmCompositedWindow::QWasmCompositedWindow() QWasmCompositor::QWasmCompositor(QWasmScreen *screen) :QObject(screen) - , m_frameBuffer(nullptr) , m_blitter(new QOpenGLTextureBlitter) , m_needComposit(false) , m_inFlush(false) @@ -71,7 +70,6 @@ QWasmCompositor::QWasmCompositor(QWasmScreen *screen) QWasmCompositor::~QWasmCompositor() { - delete m_frameBuffer; destroy(); } @@ -748,3 +746,8 @@ QWasmScreen *QWasmCompositor::screen() { return static_cast(parent()); } + +QOpenGLContext *QWasmCompositor::context() +{ + return m_context.data(); +} diff --git a/src/plugins/platforms/wasm/qwasmcompositor.h b/src/plugins/platforms/wasm/qwasmcompositor.h index 98f4a79b27e..422f990175f 100644 --- a/src/plugins/platforms/wasm/qwasmcompositor.h +++ b/src/plugins/platforms/wasm/qwasmcompositor.h @@ -125,11 +125,13 @@ public: static QWasmTitleBarOptions makeTitleBarOptions(const QWasmWindow *window); static QRect titlebarRect(QWasmTitleBarOptions tb, QWasmCompositor::SubControls subcontrol); + QWasmScreen *screen(); + QOpenGLContext *context(); + private slots: void frame(); private: - QWasmScreen *screen(); void notifyTopWindowChanged(QWasmWindow *window); void drawWindow(QOpenGLTextureBlitter *blitter, QWasmScreen *screen, QWasmWindow *window); void drawWindowContent(QOpenGLTextureBlitter *blitter, QWasmScreen *screen, QWasmWindow *window); @@ -138,7 +140,6 @@ private: void drawWindowDecorations(QOpenGLTextureBlitter *blitter, QWasmScreen *screen, QWasmWindow *window); void drwPanelButton(); - QImage *m_frameBuffer; QScopedPointer m_context; QScopedPointer m_blitter; diff --git a/src/plugins/platforms/wasm/qwasmintegration.cpp b/src/plugins/platforms/wasm/qwasmintegration.cpp index 9934f5ac19a..f8eaa39f76d 100644 --- a/src/plugins/platforms/wasm/qwasmintegration.cpp +++ b/src/plugins/platforms/wasm/qwasmintegration.cpp @@ -193,6 +193,11 @@ QPlatformBackingStore *QWasmIntegration::createPlatformBackingStore(QWindow *win #endif } +void QWasmIntegration::removeBackingStore(QWindow* window) +{ + m_backingStores.remove(window); +} + #ifndef QT_NO_OPENGL QPlatformOpenGLContext *QWasmIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const { diff --git a/src/plugins/platforms/wasm/qwasmintegration.h b/src/plugins/platforms/wasm/qwasmintegration.h index 2102f5c2264..2eb64ed3660 100644 --- a/src/plugins/platforms/wasm/qwasmintegration.h +++ b/src/plugins/platforms/wasm/qwasmintegration.h @@ -88,6 +88,7 @@ public: void resizeScreen(const QString &canvasId); void resizeAllScreens(); void updateDpi(); + void removeBackingStore(QWindow* window); private: mutable QWasmFontDatabase *m_fontDb; From d32a6793a43dc64dab3364fe3052bc464192ba90 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Thu, 16 Jan 2020 09:33:59 +0100 Subject: [PATCH 23/34] MinGW: Fix debug-and-release configuration Make sure that, if Qt was configured with -debug-and-release, winmain and user apps are generated by default in debug-and-release mode, too. This amends 9b4ec1393fde2af7deb39b9a2f98bcc93635603f . Change-Id: I0f169d63ca98c9bde41114225004a0844425db33 Reviewed-by: Joerg Bornemann --- mkspecs/common/g++-win32.conf | 2 +- mkspecs/features/qt_helper_lib.prf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mkspecs/common/g++-win32.conf b/mkspecs/common/g++-win32.conf index 6369436863c..c3a1f3a3732 100644 --- a/mkspecs/common/g++-win32.conf +++ b/mkspecs/common/g++-win32.conf @@ -17,7 +17,7 @@ include(g++-base.conf) MAKEFILE_GENERATOR = MINGW QMAKE_PLATFORM = win32 mingw -CONFIG += precompile_header +CONFIG += debug_and_release debug_and_release_target precompile_header DEFINES += UNICODE _UNICODE WIN32 MINGW_HAS_SECURE_API=1 QMAKE_COMPILER_DEFINES += __GNUC__ _WIN32 # can't add 'DEFINES += WIN64' and 'QMAKE_COMPILER_DEFINES += _WIN64' defines for diff --git a/mkspecs/features/qt_helper_lib.prf b/mkspecs/features/qt_helper_lib.prf index 216c24c7aaa..8a9672e6036 100644 --- a/mkspecs/features/qt_helper_lib.prf +++ b/mkspecs/features/qt_helper_lib.prf @@ -60,7 +60,7 @@ win32|CONFIG(static, static|shared) { "QMAKE_DEFINES_$${ucmodule} = $$val_escape(MODULE_DEFINES)" android { MODULE_PRI_CONT += "QMAKE_LIBS_$${ucmodule} =" - } else: debug_and_release { + } else: qtConfig(debug_and_release): { win32: \ MODULE_DEBUG_LIBS = $$DESTDIR/$$prefix$${TARGET}d.$$suffix else: darwin: \ From 25677ec4b2957f7fd56618781dec28cb139f9df7 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Tue, 25 Feb 2020 15:59:31 +0100 Subject: [PATCH 24/34] Fix bounding box of zero-width entities in QFontEngineFT Freetype can give us non empty bounds for zero-width characters, this change just makes us skip metrics of characters already found to not contribute to text advance. The coretext and windows font-engines already uses the already calculated advance. Change-Id: I82b3521a4fb92614be509be5982cd5ab9c1eb7de Fixes: QTBUG-58854 Reviewed-by: Konstantin Ritt Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/text/qfontengine.cpp | 3 +++ .../fontdatabases/freetype/qfontengine_ft.cpp | 3 +++ .../text/qfontmetrics/tst_qfontmetrics.cpp | 24 +++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 403a0510fa7..2ed0f21d3eb 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -663,6 +663,9 @@ glyph_metrics_t QFontEngine::tightBoundingBox(const QGlyphLayout &glyphs) QFixed ymax = 0; QFixed xmax = 0; for (int i = 0; i < glyphs.numGlyphs; i++) { + // If shaping has found this should be ignored, ignore it. + if (!glyphs.advances[i] || glyphs.attributes[i].dontPrint) + continue; glyph_metrics_t bb = boundingBox(glyphs.glyphs[i]); QFixed x = overall.xoff + glyphs.offsets[i].x + bb.x; QFixed y = overall.yoff + glyphs.offsets[i].y + bb.y; diff --git a/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp b/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp index 8c6cc8fbc1e..d176f60d104 100644 --- a/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp +++ b/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp @@ -1672,6 +1672,9 @@ glyph_metrics_t QFontEngineFT::boundingBox(const QGlyphLayout &glyphs) QFixed ymax = 0; QFixed xmax = 0; for (int i = 0; i < glyphs.numGlyphs; i++) { + // If shaping has found this should be ignored, ignore it. + if (!glyphs.advances[i] || glyphs.attributes[i].dontPrint) + continue; Glyph *g = cacheEnabled ? defaultGlyphSet.getGlyph(glyphs.glyphs[i]) : 0; if (!g) { if (!face) diff --git a/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp b/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp index a0e85252682..6fe3e200835 100644 --- a/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp +++ b/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp @@ -59,6 +59,7 @@ private slots: void mnemonicTextWidth(); void leadingBelowLine(); void elidedMetrics(); + void zeroWidthMetrics(); }; void tst_QFontMetrics::same() @@ -358,5 +359,28 @@ void tst_QFontMetrics::elidedMetrics() QFontDatabase::removeApplicationFont(id); } +void tst_QFontMetrics::zeroWidthMetrics() +{ + QString zwnj(QChar(0x200c)); + QString zwsp(QChar(0x200b)); + + QFont font; + QFontMetricsF fm(font); + QCOMPARE(fm.horizontalAdvance(zwnj), 0); + QCOMPARE(fm.horizontalAdvance(zwsp), 0); + QCOMPARE(fm.boundingRect(zwnj).width(), 0); + QCOMPARE(fm.boundingRect(zwsp).width(), 0); + + QString string1 = QStringLiteral("(") + zwnj + QStringLiteral(")"); + QString string2 = QStringLiteral("(") + zwnj + zwnj + QStringLiteral(")"); + QString string3 = QStringLiteral("(") + zwsp + QStringLiteral(")"); + QString string4 = QStringLiteral("(") + zwsp + zwsp + QStringLiteral(")"); + + QCOMPARE(fm.horizontalAdvance(string1), fm.horizontalAdvance(string2)); + QCOMPARE(fm.horizontalAdvance(string3), fm.horizontalAdvance(string4)); + QCOMPARE(fm.boundingRect(string1).width(), fm.boundingRect(string2).width()); + QCOMPARE(fm.boundingRect(string3).width(), fm.boundingRect(string4).width()); +} + QTEST_MAIN(tst_QFontMetrics) #include "tst_qfontmetrics.moc" From e30aa59a897ca3849fb99c6393cfb426ed22d33b Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Fri, 14 Feb 2020 13:13:24 +0100 Subject: [PATCH 25/34] Fix a quadratic behavior in the BiDi algorithm Reset the lastETPosition after we changed DirET to DirEN, to avoid iterating over the same set of characters many times. Change-Id: Ib4113d0ba87ad70fc6bb386632eb094f943c080d Reviewed-by: Robert Loehning --- src/gui/text/qtextengine.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 209433dac5f..cd056a743a8 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -712,9 +712,8 @@ struct QBidiAlgorithm { analysis[pos].bidiDirection = QChar::DirEN; ++it; } - } else { - lastETPosition.clear(); } + lastETPosition.clear(); } last = current; lastPos = pos; From cb26a4da69db434d4227bc16e41187f3db93c984 Mon Sep 17 00:00:00 2001 From: Alexander Akulich Date: Fri, 7 Feb 2020 17:29:33 +0300 Subject: [PATCH 26/34] QAbstractSocket: deprecate 'error' signal, use 'errorOccurred' instead [ChangeLog][Deprecation Notice] QAbstractSocket::error() (the signal) is deprecated; superseded by errorOccurred() Change-Id: I11e9c774d7c6096d1e9b37c451cf0b99188b6aad Reviewed-by: Timur Pocheptsov --- examples/network/doc/src/fortuneclient.qdoc | 6 +-- examples/network/fortuneclient/client.cpp | 2 +- examples/network/loopback/dialog.cpp | 5 +-- examples/network/network-chat/client.cpp | 3 +- examples/network/torrent/peerwireclient.cpp | 4 +- examples/network/torrent/torrentclient.cpp | 2 +- examples/network/torrent/torrentserver.cpp | 2 +- src/network/access/qftp.cpp | 6 +-- .../access/qhttpnetworkconnectionchannel.cpp | 2 +- .../access/qnetworkaccessdebugpipebackend.cpp | 2 +- src/network/socket/qabstractsocket.cpp | 34 +++++++++----- src/network/socket/qabstractsocket.h | 4 ++ src/network/socket/qhttpsocketengine.cpp | 2 +- src/network/socket/qlocalsocket.h | 4 +- src/network/socket/qlocalsocket_p.h | 4 +- src/network/socket/qlocalsocket_tcp.cpp | 6 +-- src/network/socket/qlocalsocket_unix.cpp | 6 +-- src/network/socket/qsocks5socketengine.cpp | 8 ++-- src/network/socket/qsocks5socketengine_p.h | 4 +- src/network/ssl/qsslsocket.cpp | 2 +- .../image/qimagereader/tst_qimagereader.cpp | 2 +- .../qnetworkreply/tst_qnetworkreply.cpp | 2 +- .../tst_qhttpsocketengine.cpp | 2 +- .../tst_qsocks5socketengine.cpp | 6 +-- .../socket/qtcpsocket/tst_qtcpsocket.cpp | 20 ++++----- .../socket/qudpsocket/tst_qudpsocket.cpp | 4 +- tests/auto/network/ssl/qocsp/tst_qocsp.cpp | 2 +- .../network/ssl/qsslsocket/tst_qsslsocket.cpp | 44 +++++++++---------- tests/manual/bearerex/datatransferer.cpp | 2 +- 29 files changed, 103 insertions(+), 89 deletions(-) diff --git a/examples/network/doc/src/fortuneclient.qdoc b/examples/network/doc/src/fortuneclient.qdoc index 544fa156b7a..4cb7544fc09 100644 --- a/examples/network/doc/src/fortuneclient.qdoc +++ b/examples/network/doc/src/fortuneclient.qdoc @@ -89,7 +89,7 @@ The only QTcpSocket signals we need in this example are QTcpSocket::readyRead(), signifying that data has been received, and - QTcpSocket::error(), which we will use to catch any connection errors: + QTcpSocket::errorOccurred(), which we will use to catch any connection errors: \dots \snippet fortuneclient/client.cpp 3 @@ -118,11 +118,11 @@ \li \e{An error occurs.} We need to inform the user if the connection failed or was broken. In this case, QTcpSocket will emit - \l{QTcpSocket::error()}{error()}, and \c Client::displayError() will be + \l{QTcpSocket::errorOccurred()}{errorOccurred()}, and \c Client::displayError() will be called. \endlist - Let's go through the \l{QTcpSocket::error()}{error()} case first: + Let's go through the \l{QTcpSocket::errorOccurred()}{errorOccurred()} case first: \snippet fortuneclient/client.cpp 13 diff --git a/examples/network/fortuneclient/client.cpp b/examples/network/fortuneclient/client.cpp index 0ccbf51df86..2daac33c2b7 100644 --- a/examples/network/fortuneclient/client.cpp +++ b/examples/network/fortuneclient/client.cpp @@ -121,7 +121,7 @@ Client::Client(QWidget *parent) //! [2] //! [3] connect(tcpSocket, &QIODevice::readyRead, this, &Client::readFortune); //! [2] //! [4] - connect(tcpSocket, QOverload::of(&QAbstractSocket::error), + connect(tcpSocket, &QAbstractSocket::errorOccurred, //! [3] this, &Client::displayError); //! [4] diff --git a/examples/network/loopback/dialog.cpp b/examples/network/loopback/dialog.cpp index d87f024031f..4037f4c0853 100644 --- a/examples/network/loopback/dialog.cpp +++ b/examples/network/loopback/dialog.cpp @@ -78,7 +78,7 @@ Dialog::Dialog(QWidget *parent) connect(&tcpClient, &QAbstractSocket::connected, this, &Dialog::startTransfer); connect(&tcpClient, &QIODevice::bytesWritten, this, &Dialog::updateClientProgress); - connect(&tcpClient, QOverload::of(&QAbstractSocket::error), + connect(&tcpClient, &QAbstractSocket::errorOccurred, this, &Dialog::displayError); QVBoxLayout *mainLayout = new QVBoxLayout; @@ -131,8 +131,7 @@ void Dialog::acceptConnection() connect(tcpServerConnection, &QIODevice::readyRead, this, &Dialog::updateServerProgress); - connect(tcpServerConnection, - QOverload::of(&QAbstractSocket::error), + connect(tcpServerConnection, &QAbstractSocket::errorOccurred, this, &Dialog::displayError); connect(tcpServerConnection, &QTcpSocket::disconnected, tcpServerConnection, &QTcpSocket::deleteLater); diff --git a/examples/network/network-chat/client.cpp b/examples/network/network-chat/client.cpp index d4511818132..fe35d535f44 100644 --- a/examples/network/network-chat/client.cpp +++ b/examples/network/network-chat/client.cpp @@ -102,8 +102,7 @@ void Client::newConnection(Connection *connection) { connection->setGreetingMessage(peerManager->userName()); - connect(connection, QOverload::of(&Connection::error), - this, &Client::connectionError); + connect(connection, &Connection::errorOccurred, this, &Client::connectionError); connect(connection, &Connection::disconnected, this, &Client::disconnected); connect(connection, &Connection::readyForUse, this, &Client::readyForUse); } diff --git a/examples/network/torrent/peerwireclient.cpp b/examples/network/torrent/peerwireclient.cpp index cea4ef53fa6..c30abd0e130 100644 --- a/examples/network/torrent/peerwireclient.cpp +++ b/examples/network/torrent/peerwireclient.cpp @@ -107,8 +107,8 @@ PeerWireClient::PeerWireClient(const QByteArray &peerId, QObject *parent) this, &PeerWireClient::readyRead); connect(&socket, &QTcpSocket::disconnected, this, &PeerWireClient::disconnected); - connect(&socket, QOverload::of(&QTcpSocket::error), - this, QOverload::of(&PeerWireClient::error)); + connect(&socket, &QTcpSocket::errorOccurred, + this, &PeerWireClient::errorOccurred); connect(&socket, &QTcpSocket::bytesWritten, this, &PeerWireClient::bytesWritten); connect(&socket, &QTcpSocket::stateChanged, diff --git a/examples/network/torrent/torrentclient.cpp b/examples/network/torrent/torrentclient.cpp index 6b11338f422..2ba44768618 100644 --- a/examples/network/torrent/torrentclient.cpp +++ b/examples/network/torrent/torrentclient.cpp @@ -843,7 +843,7 @@ void TorrentClient::initializeConnection(PeerWireClient *client) this, &TorrentClient::setupOutgoingConnection); connect(client, &PeerWireClient::disconnected, this, &TorrentClient::removeClient); - connect(client, QOverload::of(&PeerWireClient::error), + connect(client, &PeerWireClient::errorOccurred, this, &TorrentClient::removeClient); connect(client, &PeerWireClient::piecesAvailable, this, &TorrentClient::peerPiecesAvailable); diff --git a/examples/network/torrent/torrentserver.cpp b/examples/network/torrent/torrentserver.cpp index 215498194b6..7af958c27c3 100644 --- a/examples/network/torrent/torrentserver.cpp +++ b/examples/network/torrent/torrentserver.cpp @@ -80,7 +80,7 @@ void TorrentServer::incomingConnection(qintptr socketDescriptor) if (ConnectionManager::instance()->canAddConnection() && !clients.isEmpty()) { connect(client, &PeerWireClient::infoHashReceived, this, &TorrentServer::processInfoHash); - connect(client, QOverload::of(&PeerWireClient::error), + connect(client, &PeerWireClient::errorOccurred, this, QOverload<>::of(&TorrentServer::removeClient)); RateController::instance()->addSocket(client); ConnectionManager::instance()->addConnection(client); diff --git a/src/network/access/qftp.cpp b/src/network/access/qftp.cpp index cda800ce354..2589c64b1c4 100644 --- a/src/network/access/qftp.cpp +++ b/src/network/access/qftp.cpp @@ -324,7 +324,7 @@ void QFtpDTP::connectToHost(const QString & host, quint16 port) socket->setObjectName(QLatin1String("QFtpDTP Passive state socket")); connect(socket, SIGNAL(connected()), SLOT(socketConnected())); connect(socket, SIGNAL(readyRead()), SLOT(socketReadyRead())); - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(socketError(QAbstractSocket::SocketError))); + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), SLOT(socketError(QAbstractSocket::SocketError))); connect(socket, SIGNAL(disconnected()), SLOT(socketConnectionClosed())); connect(socket, SIGNAL(bytesWritten(qint64)), SLOT(socketBytesWritten(qint64))); @@ -769,7 +769,7 @@ void QFtpDTP::setupSocket() socket->setObjectName(QLatin1String("QFtpDTP Active state socket")); connect(socket, SIGNAL(connected()), SLOT(socketConnected())); connect(socket, SIGNAL(readyRead()), SLOT(socketReadyRead())); - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(socketError(QAbstractSocket::SocketError))); + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), SLOT(socketError(QAbstractSocket::SocketError))); connect(socket, SIGNAL(disconnected()), SLOT(socketConnectionClosed())); connect(socket, SIGNAL(bytesWritten(qint64)), SLOT(socketBytesWritten(qint64))); @@ -807,7 +807,7 @@ QFtpPI::QFtpPI(QObject *parent) : SLOT(connectionClosed())); connect(&commandSocket, SIGNAL(readyRead()), SLOT(readyRead())); - connect(&commandSocket, SIGNAL(error(QAbstractSocket::SocketError)), + connect(&commandSocket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), SLOT(error(QAbstractSocket::SocketError))); connect(&dtp, SIGNAL(connectState(int)), diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index ccdb1cd6cd5..319c4953b10 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -157,7 +157,7 @@ void QHttpNetworkConnectionChannel::init() QObject::connect(socket, SIGNAL(disconnected()), this, SLOT(_q_disconnected()), Qt::DirectConnection); - QObject::connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), + QObject::connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SLOT(_q_error(QAbstractSocket::SocketError)), Qt::DirectConnection); diff --git a/src/network/access/qnetworkaccessdebugpipebackend.cpp b/src/network/access/qnetworkaccessdebugpipebackend.cpp index 03ffc696285..0029df41fe5 100644 --- a/src/network/access/qnetworkaccessdebugpipebackend.cpp +++ b/src/network/access/qnetworkaccessdebugpipebackend.cpp @@ -98,7 +98,7 @@ void QNetworkAccessDebugPipeBackend::open() // socket ready read -> we can push from socket to downstream connect(&socket, SIGNAL(readyRead()), SLOT(socketReadyRead())); - connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(socketError())); + connect(&socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), SLOT(socketError())); connect(&socket, SIGNAL(disconnected()), SLOT(socketDisconnected())); connect(&socket, SIGNAL(connected()), SLOT(socketConnected())); // socket bytes written -> we can push more from upstream to socket diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 57dec59bc74..fb792e428f1 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -84,7 +84,7 @@ HostLookupState. If the host is found, QAbstractSocket enters ConnectingState and emits the hostFound() signal. When the connection has been established, it enters ConnectedState and - emits connected(). If an error occurs at any stage, error() is + emits connected(). If an error occurs at any stage, errorOccurred() is emitted. Whenever the state changes, stateChanged() is emitted. For convenience, isValid() returns \c true if the socket is ready for reading and writing, but note that the socket's state must be @@ -113,7 +113,7 @@ QAbstractSocket::UnconnectedState, and emits disconnected(). If you want to abort a connection immediately, discarding all pending data, call abort() instead. If the remote host closes the connection, - QAbstractSocket will emit error(QAbstractSocket::RemoteHostClosedError), + QAbstractSocket will emit errorOccurred(QAbstractSocket::RemoteHostClosedError), during which the socket state will still be ConnectedState, and then the disconnected() signal will be emitted. @@ -203,6 +203,14 @@ /*! \fn void QAbstractSocket::error(QAbstractSocket::SocketError socketError) + \obsolete + + Use errorOccurred() instead. +*/ + +/*! + \fn void QAbstractSocket::errorOccurred(QAbstractSocket::SocketError socketError) + \since 5.15 This signal is emitted after an error occurred. The \a socketError parameter describes the type of error that occurred. @@ -330,6 +338,7 @@ \value UnknownSocketError An unidentified error occurred. \sa QAbstractSocket::error() + \sa QAbstractSocket::errorOccurred() */ /*! @@ -988,7 +997,7 @@ void QAbstractSocketPrivate::startConnectingByName(const QString &host) } state = QAbstractSocket::UnconnectedState; - emit q->error(socketError); + emit q->errorOccurred(socketError); emit q->stateChanged(state); } @@ -1047,7 +1056,7 @@ void QAbstractSocketPrivate::_q_startConnecting(const QHostInfo &hostInfo) state = QAbstractSocket::UnconnectedState; setError(QAbstractSocket::HostNotFoundError, QAbstractSocket::tr("Host not found")); emit q->stateChanged(state); - emit q->error(QAbstractSocket::HostNotFoundError); + emit q->errorOccurred(QAbstractSocket::HostNotFoundError); return; } @@ -1070,8 +1079,8 @@ void QAbstractSocketPrivate::_q_startConnecting(const QHostInfo &hostInfo) _q_testConnection(), this function takes the first address of the pending addresses list and tries to connect to it. If the connection succeeds, QAbstractSocket will emit - connected(). Otherwise, error(ConnectionRefusedError) or - error(SocketTimeoutError) is emitted. + connected(). Otherwise, errorOccurred(ConnectionRefusedError) or + errorOccurred(SocketTimeoutError) is emitted. */ void QAbstractSocketPrivate::_q_connectToNextAddress() { @@ -1101,7 +1110,7 @@ void QAbstractSocketPrivate::_q_connectToNextAddress() // q->setErrorString(QAbstractSocket::tr("Connection refused")); } emit q->stateChanged(state); - emit q->error(socketError); + emit q->errorOccurred(socketError); return; } @@ -1223,7 +1232,7 @@ void QAbstractSocketPrivate::_q_abortConnectionAttempt() setError(QAbstractSocket::SocketTimeoutError, QAbstractSocket::tr("Connection timed out")); emit q->stateChanged(state); - emit q->error(socketError); + emit q->errorOccurred(socketError); } else { _q_connectToNextAddress(); } @@ -1430,14 +1439,14 @@ void QAbstractSocketPrivate::setError(QAbstractSocket::SocketError errorCode, \internal Sets the socket error state to \c errorCode and \a errorString, - and emits the QAbstractSocket::error() signal. + and emits the QAbstractSocket::errorOccurred() signal. */ void QAbstractSocketPrivate::setErrorAndEmit(QAbstractSocket::SocketError errorCode, const QString &errorString) { Q_Q(QAbstractSocket); setError(errorCode, errorString); - emit q->error(errorCode); + emit q->errorOccurred(errorCode); } /*! \internal @@ -1456,6 +1465,9 @@ QAbstractSocket::QAbstractSocket(SocketType socketType, : socketType == SctpSocket ? "Sctp" : "Unknown", &dd, parent); #endif d->socketType = socketType; + + // Support the deprecated error() signal: + connect(this, &QAbstractSocket::errorOccurred, this, QOverload::of(&QAbstractSocket::error)); } /*! @@ -1654,7 +1666,7 @@ bool QAbstractSocket::isValid() const established, QAbstractSocket enters ConnectedState and emits connected(). - At any point, the socket can emit error() to signal that an error + At any point, the socket can emit errorOccurred() to signal that an error occurred. \a hostName may be an IP address in string form (e.g., diff --git a/src/network/socket/qabstractsocket.h b/src/network/socket/qabstractsocket.h index de09195eeb1..1482dcaab24 100644 --- a/src/network/socket/qabstractsocket.h +++ b/src/network/socket/qabstractsocket.h @@ -206,7 +206,11 @@ Q_SIGNALS: void connected(); void disconnected(); void stateChanged(QAbstractSocket::SocketState); +#if QT_DEPRECATED_SINCE(5,15) + QT_DEPRECATED_X("Use QAbstractSocket::errorOccurred(QAbstractSocket::SocketError) instead") void error(QAbstractSocket::SocketError); +#endif + void errorOccurred(QAbstractSocket::SocketError); #ifndef QT_NO_NETWORKPROXY void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator); #endif diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp index bce0da4ae42..9de9b284c1b 100644 --- a/src/network/socket/qhttpsocketengine.cpp +++ b/src/network/socket/qhttpsocketengine.cpp @@ -93,7 +93,7 @@ bool QHttpSocketEngine::initialize(QAbstractSocket::SocketType type, QAbstractSo connect(d->socket, SIGNAL(bytesWritten(qint64)), this, SLOT(slotSocketBytesWritten()), Qt::DirectConnection); - connect(d->socket, SIGNAL(error(QAbstractSocket::SocketError)), + connect(d->socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SLOT(slotSocketError(QAbstractSocket::SocketError)), Qt::DirectConnection); connect(d->socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), diff --git a/src/network/socket/qlocalsocket.h b/src/network/socket/qlocalsocket.h index ae78c86b3c5..9cd62abca64 100644 --- a/src/network/socket/qlocalsocket.h +++ b/src/network/socket/qlocalsocket.h @@ -132,14 +132,14 @@ private: Q_DISABLE_COPY(QLocalSocket) #if defined(QT_LOCALSOCKET_TCP) Q_PRIVATE_SLOT(d_func(), void _q_stateChanged(QAbstractSocket::SocketState)) - Q_PRIVATE_SLOT(d_func(), void _q_error(QAbstractSocket::SocketError)) + Q_PRIVATE_SLOT(d_func(), void _q_errorOccurred(QAbstractSocket::SocketError)) #elif defined(Q_OS_WIN) Q_PRIVATE_SLOT(d_func(), void _q_canWrite()) Q_PRIVATE_SLOT(d_func(), void _q_pipeClosed()) Q_PRIVATE_SLOT(d_func(), void _q_winError(ulong, const QString &)) #else Q_PRIVATE_SLOT(d_func(), void _q_stateChanged(QAbstractSocket::SocketState)) - Q_PRIVATE_SLOT(d_func(), void _q_error(QAbstractSocket::SocketError)) + Q_PRIVATE_SLOT(d_func(), void _q_errorOccurred(QAbstractSocket::SocketError)) Q_PRIVATE_SLOT(d_func(), void _q_connectToSocket()) Q_PRIVATE_SLOT(d_func(), void _q_abortConnectionAttempt()) #endif diff --git a/src/network/socket/qlocalsocket_p.h b/src/network/socket/qlocalsocket_p.h index e3bcd923263..0e05e4c5d75 100644 --- a/src/network/socket/qlocalsocket_p.h +++ b/src/network/socket/qlocalsocket_p.h @@ -127,7 +127,7 @@ public: QString generateErrorString(QLocalSocket::LocalSocketError, const QString &function) const; void setErrorAndEmit(QLocalSocket::LocalSocketError, const QString &function); void _q_stateChanged(QAbstractSocket::SocketState newState); - void _q_error(QAbstractSocket::SocketError newError); + void _q_errorOccurred(QAbstractSocket::SocketError newError); #elif defined(Q_OS_WIN) ~QLocalSocketPrivate(); void destroyPipeHandles(); @@ -144,7 +144,7 @@ public: QString generateErrorString(QLocalSocket::LocalSocketError, const QString &function) const; void setErrorAndEmit(QLocalSocket::LocalSocketError, const QString &function); void _q_stateChanged(QAbstractSocket::SocketState newState); - void _q_error(QAbstractSocket::SocketError newError); + void _q_errorOccurred(QAbstractSocket::SocketError newError); void _q_connectToSocket(); void _q_abortConnectionAttempt(); void cancelDelayedConnect(); diff --git a/src/network/socket/qlocalsocket_tcp.cpp b/src/network/socket/qlocalsocket_tcp.cpp index e13bcfc0cb9..1c63d161874 100644 --- a/src/network/socket/qlocalsocket_tcp.cpp +++ b/src/network/socket/qlocalsocket_tcp.cpp @@ -77,8 +77,8 @@ void QLocalSocketPrivate::setSocket(QLocalUnixSocket* socket) q->connect(tcpSocket, SIGNAL(disconnected()), q, SIGNAL(disconnected())); q->connect(tcpSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), q, SLOT(_q_stateChanged(QAbstractSocket::SocketState))); - q->connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), - q, SLOT(_q_error(QAbstractSocket::SocketError))); + q->connect(tcpSocket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), + q, SLOT(_q_errorOccurred(QAbstractSocket::SocketError))); q->connect(tcpSocket, SIGNAL(readChannelFinished()), q, SIGNAL(readChannelFinished())); tcpSocket->setParent(q); } @@ -88,7 +88,7 @@ qint64 QLocalSocketPrivate::skip(qint64 maxSize) return tcpSocket->skip(maxSize); } -void QLocalSocketPrivate::_q_error(QAbstractSocket::SocketError socketError) +void QLocalSocketPrivate::_q_errorOccurred(QAbstractSocket::SocketError socketError) { Q_Q(QLocalSocket); QString function = QLatin1String("QLocalSocket"); diff --git a/src/network/socket/qlocalsocket_unix.cpp b/src/network/socket/qlocalsocket_unix.cpp index 5e1da78c942..d9b39a7752f 100644 --- a/src/network/socket/qlocalsocket_unix.cpp +++ b/src/network/socket/qlocalsocket_unix.cpp @@ -81,8 +81,8 @@ void QLocalSocketPrivate::init() q->connect(&unixSocket, SIGNAL(disconnected()), q, SIGNAL(disconnected())); q->connect(&unixSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), q, SLOT(_q_stateChanged(QAbstractSocket::SocketState))); - q->connect(&unixSocket, SIGNAL(error(QAbstractSocket::SocketError)), - q, SLOT(_q_error(QAbstractSocket::SocketError))); + q->connect(&unixSocket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), + q, SLOT(_q_errorOccurred(QAbstractSocket::SocketError))); q->connect(&unixSocket, SIGNAL(readChannelFinished()), q, SIGNAL(readChannelFinished())); unixSocket.setParent(q); } @@ -92,7 +92,7 @@ qint64 QLocalSocketPrivate::skip(qint64 maxSize) return unixSocket.skip(maxSize); } -void QLocalSocketPrivate::_q_error(QAbstractSocket::SocketError socketError) +void QLocalSocketPrivate::_q_errorOccurred(QAbstractSocket::SocketError socketError) { Q_Q(QLocalSocket); QString function = QLatin1String("QLocalSocket"); diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp index 0530a1af30c..4f866e4da00 100644 --- a/src/network/socket/qsocks5socketengine.cpp +++ b/src/network/socket/qsocks5socketengine.cpp @@ -559,8 +559,8 @@ void QSocks5SocketEnginePrivate::initialize(Socks5Mode socks5Mode) Qt::DirectConnection); QObject::connect(data->controlSocket, SIGNAL(bytesWritten(qint64)), q, SLOT(_q_controlSocketBytesWritten()), Qt::DirectConnection); - QObject::connect(data->controlSocket, SIGNAL(error(QAbstractSocket::SocketError)), - q, SLOT(_q_controlSocketError(QAbstractSocket::SocketError)), + QObject::connect(data->controlSocket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), + q, SLOT(_q_controlSocketErrorOccurred(QAbstractSocket::SocketError)), Qt::DirectConnection); QObject::connect(data->controlSocket, SIGNAL(disconnected()), q, SLOT(_q_controlSocketDisconnected()), Qt::DirectConnection); @@ -1056,7 +1056,7 @@ bool QSocks5SocketEngine::initialize(qintptr socketDescriptor, QAbstractSocket:: Qt::DirectConnection); QObject::connect(d->data->controlSocket, SIGNAL(bytesWritten(qint64)), this, SLOT(_q_controlSocketBytesWritten()), Qt::DirectConnection); - QObject::connect(d->data->controlSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(_q_controlSocketError(QAbstractSocket::SocketError)), + QObject::connect(d->data->controlSocket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SLOT(_q_controlSocketErrorOccurred(QAbstractSocket::SocketError)), Qt::DirectConnection); QObject::connect(d->data->controlSocket, SIGNAL(disconnected()), this, SLOT(_q_controlSocketDisconnected()), Qt::DirectConnection); @@ -1231,7 +1231,7 @@ void QSocks5SocketEnginePrivate::_q_controlSocketBytesWritten() } } -void QSocks5SocketEnginePrivate::_q_controlSocketError(QAbstractSocket::SocketError error) +void QSocks5SocketEnginePrivate::_q_controlSocketErrorOccurred(QAbstractSocket::SocketError error) { QSOCKS5_D_DEBUG << "controlSocketError" << error << data->controlSocket->errorString(); diff --git a/src/network/socket/qsocks5socketengine_p.h b/src/network/socket/qsocks5socketengine_p.h index c256987e2de..77b461b9441 100644 --- a/src/network/socket/qsocks5socketengine_p.h +++ b/src/network/socket/qsocks5socketengine_p.h @@ -130,7 +130,7 @@ private: Q_DISABLE_COPY_MOVE(QSocks5SocketEngine) Q_PRIVATE_SLOT(d_func(), void _q_controlSocketConnected()) Q_PRIVATE_SLOT(d_func(), void _q_controlSocketReadNotification()) - Q_PRIVATE_SLOT(d_func(), void _q_controlSocketError(QAbstractSocket::SocketError)) + Q_PRIVATE_SLOT(d_func(), void _q_controlSocketErrorOccurred(QAbstractSocket::SocketError)) #ifndef QT_NO_UDPSOCKET Q_PRIVATE_SLOT(d_func(), void _q_udpSocketReadNotification()) #endif @@ -246,7 +246,7 @@ public: void _q_controlSocketConnected(); void _q_controlSocketReadNotification(); - void _q_controlSocketError(QAbstractSocket::SocketError); + void _q_controlSocketErrorOccurred(QAbstractSocket::SocketError); #ifndef QT_NO_UDPSOCKET void _q_udpSocketReadNotification(); #endif diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 775b6227ed1..912b30b29bb 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -2535,7 +2535,7 @@ void QSslSocketPrivate::createPlainSocket(QIODevice::OpenMode openMode) q->connect(plainSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), q, SLOT(_q_stateChangedSlot(QAbstractSocket::SocketState)), Qt::DirectConnection); - q->connect(plainSocket, SIGNAL(error(QAbstractSocket::SocketError)), + q->connect(plainSocket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), q, SLOT(_q_errorSlot(QAbstractSocket::SocketError)), Qt::DirectConnection); q->connect(plainSocket, SIGNAL(readyRead()), diff --git a/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp b/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp index 771a4d0a32c..60018298543 100644 --- a/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp +++ b/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp @@ -1081,7 +1081,7 @@ private slots: void acceptNewConnection() { serverSocket = server.nextPendingConnection(); - connect(serverSocket, SIGNAL(error(QAbstractSocket::SocketError)), + connect(serverSocket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SLOT(remoteHostClosed())); } diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index b1588d4120b..5a97d8a9b94 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -674,7 +674,7 @@ private: //qDebug() << "connectSocketSignals" << client; connect(client.data(), SIGNAL(readyRead()), this, SLOT(readyReadSlot())); connect(client.data(), SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWrittenSlot())); - connect(client.data(), SIGNAL(error(QAbstractSocket::SocketError)), + connect(client.data(), SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SLOT(slotError(QAbstractSocket::SocketError))); } diff --git a/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp b/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp index 7644a063801..2d0d9f5ffc1 100644 --- a/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp +++ b/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp @@ -270,7 +270,7 @@ void tst_QHttpSocketEngine::errorTest() socket.setProxy(QNetworkProxy(QNetworkProxy::HttpProxy, hostname, port, username, username)); socket.connectToHost("0.1.2.3", 12345); - connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), + connect(&socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(30); QVERIFY(!QTestEventLoop::instance().timeout()); diff --git a/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp b/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp index 44b5a02af41..85eec6e783b 100644 --- a/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp +++ b/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp @@ -283,7 +283,7 @@ void tst_QSocks5SocketEngine::errorTest() socket.setProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, hostname, port, username, username)); socket.connectToHost("0.1.2.3", 12345); - connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), + connect(&socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); @@ -753,7 +753,7 @@ void tst_QSocks5SocketEngine::downloadBigFile() QTestEventLoop::instance().exitLoop(); }); - connect(&socket, QOverload::of(&QAbstractSocket::error), + connect(&socket, &QAbstractSocket::errorOccurred, [&socket, &stopWatch] (QAbstractSocket::SocketError errorCode) { qWarning().noquote().nospace() << QTest::currentTestFunction() @@ -1006,7 +1006,7 @@ void tst_QSocks5SocketEngine::incomplete() connect(&socket, SIGNAL(connected()), &QTestEventLoop::instance(), SLOT(exitLoop())); - connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), + connect(&socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(70); QVERIFY(!QTestEventLoop::instance().timeout()); diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp index f85d041f49b..6dd390ccbd6 100644 --- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp +++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp @@ -2019,14 +2019,14 @@ void tst_QTcpSocket::remoteCloseError() QCOMPARE(clientSocket->bytesAvailable(), qint64(5)); qRegisterMetaType("QAbstractSocket::SocketError"); - QSignalSpy errorSpy(clientSocket, SIGNAL(error(QAbstractSocket::SocketError))); + QSignalSpy errorSpy(clientSocket, SIGNAL(errorOccurred(QAbstractSocket::SocketError))); QSignalSpy disconnectedSpy(clientSocket, SIGNAL(disconnected())); clientSocket->write("World"); serverSocket->disconnectFromHost(); tmpSocket = clientSocket; - connect(clientSocket, SIGNAL(error(QAbstractSocket::SocketError)), + connect(clientSocket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SLOT(remoteCloseErrorSlot())); enterLoop(30); @@ -2079,7 +2079,7 @@ void tst_QTcpSocket::nestedEventLoopInErrorSlot() { QTcpSocket *socket = newSocket(); QPointer p(socket); - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(enterLoopSlot())); + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SLOT(enterLoopSlot())); socket->connectToHost("hostnotfoundhostnotfound.qt-project.org", 9999); enterLoop(30); @@ -2109,7 +2109,7 @@ void tst_QTcpSocket::connectToHostError() QFETCH(int, port); QFETCH(QAbstractSocket::SocketError, expectedError); - connect(socket, QOverload::of(&QAbstractSocket::error),[&](QAbstractSocket::SocketError socketError){ + connect(socket, &QAbstractSocket::errorOccurred, [&](QAbstractSocket::SocketError socketError){ error = socketError; }); socket->connectToHost(host, port); // no service running here, one suspects @@ -2326,7 +2326,7 @@ void tst_QTcpSocket::abortiveClose() qRegisterMetaType("QAbstractSocket::SocketError"); QSignalSpy readyReadSpy(clientSocket, SIGNAL(readyRead())); - QSignalSpy errorSpy(clientSocket, SIGNAL(error(QAbstractSocket::SocketError))); + QSignalSpy errorSpy(clientSocket, SIGNAL(errorOccurred(QAbstractSocket::SocketError))); connect(clientSocket, SIGNAL(disconnected()), this, SLOT(exitLoopSlot())); QTimer::singleShot(0, this, SLOT(abortiveClose_abortSlot())); @@ -2439,14 +2439,14 @@ void tst_QTcpSocket::connectionRefused() QTcpSocket *socket = newSocket(); QSignalSpy stateSpy(socket, SIGNAL(stateChanged(QAbstractSocket::SocketState))); - QSignalSpy errorSpy(socket, SIGNAL(error(QAbstractSocket::SocketError))); - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), + QSignalSpy errorSpy(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError))); + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop())); socket->connectToHost(QtNetworkSettings::httpServerName(), 144); enterLoop(10); - disconnect(socket, SIGNAL(error(QAbstractSocket::SocketError)), + disconnect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop())); QVERIFY2(!timeout(), "Network timeout"); @@ -2773,7 +2773,7 @@ void tst_QTcpSocket::taskQtBug5799ConnectionErrorEventLoop() // check that we get a proper error connecting to port 12346 // This testcase uses an event loop QTcpSocket socket; - connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop())); + connect(&socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop())); socket.connectToHost(QtNetworkSettings::httpServerName(), 12346); QTestEventLoop::instance().enterLoop(10); @@ -3209,7 +3209,7 @@ void tst_QTcpSocket::readNotificationsAfterBind() QAbstractSocket socket(QAbstractSocket::TcpSocket, nullptr); QVERIFY2(socket.bind(), "Bind error!"); - connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop())); + connect(&socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop())); QSignalSpy spyReadyRead(&socket, SIGNAL(readyRead())); socket.connectToHost(QtNetworkSettings::serverName(), 12346); diff --git a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp index 0f419e9de49..cc41260d598 100644 --- a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp +++ b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp @@ -883,7 +883,7 @@ void tst_QUdpSocket::writeDatagram() qRegisterMetaType("QAbstractSocket::SocketError"); for(int i=0;;i++) { - QSignalSpy errorspy(&client, SIGNAL(error(QAbstractSocket::SocketError))); + QSignalSpy errorspy(&client, SIGNAL(errorOccurred(QAbstractSocket::SocketError))); QSignalSpy bytesspy(&client, SIGNAL(bytesWritten(qint64))); qint64 written = client.writeDatagram(QByteArray(i * 1024, 'w'), serverAddress, @@ -1044,7 +1044,7 @@ void tst_QUdpSocket::writeToNonExistingPeer() QUdpSocket sConnected; QSignalSpy sConnectedReadyReadSpy(&sConnected, SIGNAL(readyRead())); - QSignalSpy sConnectedErrorSpy(&sConnected, SIGNAL(error(QAbstractSocket::SocketError))); + QSignalSpy sConnectedErrorSpy(&sConnected, SIGNAL(errorOccurred(QAbstractSocket::SocketError))); sConnected.connectToHost(peerAddress, peerPort, QIODevice::ReadWrite); QVERIFY(sConnected.waitForConnected(10000)); diff --git a/tests/auto/network/ssl/qocsp/tst_qocsp.cpp b/tests/auto/network/ssl/qocsp/tst_qocsp.cpp index c1072303164..edd1c245478 100644 --- a/tests/auto/network/ssl/qocsp/tst_qocsp.cpp +++ b/tests/auto/network/ssl/qocsp/tst_qocsp.cpp @@ -410,7 +410,7 @@ private: static QString certDirPath; - void (QSslSocket::*socketErrorSignal)(QAbstractSocket::SocketError) = &QAbstractSocket::error; + void (QSslSocket::*socketErrorSignal)(QAbstractSocket::SocketError) = &QAbstractSocket::errorOccurred; void (QSslSocket::*tlsErrorsSignal)(const QList &) = &QSslSocket::sslErrors; void (QTestEventLoop::*exitLoopSlot)() = &QTestEventLoop::exitLoop; diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp index cf383afd8bd..23495436eb6 100644 --- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp @@ -1240,7 +1240,7 @@ protected: configuration.setProtocol(protocol); if (ignoreSslErrors) connect(socket, SIGNAL(sslErrors(QList)), this, SLOT(ignoreErrorSlot())); - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SIGNAL(socketError(QAbstractSocket::SocketError))); + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SIGNAL(socketError(QAbstractSocket::SocketError))); QFile file(m_keyFile); QVERIFY(file.open(QIODevice::ReadOnly)); @@ -1377,8 +1377,8 @@ void tst_QSslSocket::protocolServerSide() socket = &client; QFETCH(QSsl::SslProtocol, clientProtocol); socket->setProtocol(clientProtocol); - // upon SSL wrong version error, error will be triggered, not sslErrors - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), &loop, SLOT(quit())); + // upon SSL wrong version error, errorOccurred will be triggered, not sslErrors + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &loop, SLOT(quit())); connect(socket, SIGNAL(sslErrors(QList)), this, SLOT(ignoreErrorSlot())); connect(socket, SIGNAL(encrypted()), &loop, SLOT(quit())); @@ -1438,8 +1438,8 @@ void tst_QSslSocket::serverCipherPreferences() sslConfig.setCiphers({QSslCipher("AES256-SHA"), QSslCipher("AES128-SHA")}); socket->setSslConfiguration(sslConfig); - // upon SSL wrong version error, error will be triggered, not sslErrors - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), &loop, SLOT(quit())); + // upon SSL wrong version error, errorOccurred will be triggered, not sslErrors + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &loop, SLOT(quit())); connect(socket, SIGNAL(sslErrors(QList)), this, SLOT(ignoreErrorSlot())); connect(socket, SIGNAL(encrypted()), &loop, SLOT(quit())); @@ -1470,8 +1470,8 @@ void tst_QSslSocket::serverCipherPreferences() sslConfig.setCiphers({QSslCipher("AES256-SHA"), QSslCipher("AES128-SHA")}); socket->setSslConfiguration(sslConfig); - // upon SSL wrong version error, error will be triggered, not sslErrors - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), &loop, SLOT(quit())); + // upon SSL wrong version error, errorOccurred will be triggered, not sslErrors + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &loop, SLOT(quit())); connect(socket, SIGNAL(sslErrors(QList)), this, SLOT(ignoreErrorSlot())); connect(socket, SIGNAL(encrypted()), &loop, SLOT(quit())); @@ -1561,7 +1561,7 @@ void tst_QSslSocket::setLocalCertificateChain() const QScopedPointer client(new QSslSocket); socket = client.data(); connect(socket, SIGNAL(encrypted()), &loop, SLOT(quit())); - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), &loop, SLOT(quit())); + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &loop, SLOT(quit())); connect(socket, SIGNAL(sslErrors(QList)), this, SLOT(ignoreErrorSlot())); socket->connectToHostEncrypted(QHostAddress(QHostAddress::LocalHost).toString(), server.serverPort()); @@ -2551,8 +2551,8 @@ void tst_QSslSocket::closeWhileEmittingSocketError() clientConfig.setPeerVerifyMode(QSslSocket::VerifyNone); clientSocket.setSslConfiguration(clientConfig); - QSignalSpy socketErrorSpy(&clientSocket, SIGNAL(error(QAbstractSocket::SocketError))); - void (QSslSocket::*errorSignal)(QAbstractSocket::SocketError) = &QSslSocket::error; + QSignalSpy socketErrorSpy(&clientSocket, SIGNAL(errorOccurred(QAbstractSocket::SocketError))); + void (QSslSocket::*errorSignal)(QAbstractSocket::SocketError) = &QSslSocket::errorOccurred; connect(&clientSocket, errorSignal, &handshake, &BrokenPskHandshake::socketError); clientSocket.connectToHostEncrypted(QStringLiteral("127.0.0.1"), handshake.serverPort()); @@ -2652,7 +2652,7 @@ void tst_QSslSocket::ignoreSslErrorsList() socket.ignoreSslErrors(expectedSslErrors); QFETCH(int, expectedSslErrorSignalCount); - QSignalSpy sslErrorsSpy(&socket, SIGNAL(error(QAbstractSocket::SocketError))); + QSignalSpy sslErrorsSpy(&socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError))); socket.connectToHostEncrypted(QtNetworkSettings::httpServerName(), 443); @@ -2946,13 +2946,13 @@ void tst_QSslSocket::resume() QSignalSpy sslErrorSpy(&socket, SIGNAL(sslErrors(QList))); QSignalSpy encryptedSpy(&socket, SIGNAL(encrypted())); - QSignalSpy errorSpy(&socket, SIGNAL(error(QAbstractSocket::SocketError))); + QSignalSpy errorSpy(&socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError))); connect(&socket, SIGNAL(sslErrors(QList)), &QTestEventLoop::instance(), SLOT(exitLoop())); connect(&socket, SIGNAL(encrypted()), &QTestEventLoop::instance(), SLOT(exitLoop())); connect(&socket, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), this, SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); - connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop())); + connect(&socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop())); socket.connectToHostEncrypted(QtNetworkSettings::imapServerName(), 993); QTestEventLoop::instance().enterLoop(10); @@ -3263,7 +3263,7 @@ void tst_QSslSocket::dhServer() QSslSocket client; socket = &client; - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), &loop, SLOT(quit())); + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &loop, SLOT(quit())); connect(socket, SIGNAL(sslErrors(QList)), this, SLOT(ignoreErrorSlot())); connect(socket, SIGNAL(encrypted()), &loop, SLOT(quit())); @@ -3297,7 +3297,7 @@ void tst_QSslSocket::dhServerCustomParamsNull() QSslSocket client; socket = &client; - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), &loop, SLOT(quit())); + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &loop, SLOT(quit())); connect(socket, SIGNAL(sslErrors(QList)), this, SLOT(ignoreErrorSlot())); connect(socket, SIGNAL(encrypted()), &loop, SLOT(quit())); @@ -3342,7 +3342,7 @@ void tst_QSslSocket::dhServerCustomParams() QSslSocket client; socket = &client; - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), &loop, SLOT(quit())); + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &loop, SLOT(quit())); connect(socket, SIGNAL(sslErrors(QList)), this, SLOT(ignoreErrorSlot())); connect(socket, SIGNAL(encrypted()), &loop, SLOT(quit())); @@ -3377,7 +3377,7 @@ void tst_QSslSocket::ecdhServer() QSslSocket client; socket = &client; - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), &loop, SLOT(quit())); + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &loop, SLOT(quit())); connect(socket, SIGNAL(sslErrors(QList)), this, SLOT(ignoreErrorSlot())); connect(socket, SIGNAL(encrypted()), &loop, SLOT(quit())); @@ -3569,7 +3569,7 @@ void tst_QSslSocket::readBufferMaxSize() QSslSocketPtr client(new QSslSocket); socket = client.data(); - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), &loop, SLOT(quit())); + connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &loop, SLOT(quit())); connect(socket, SIGNAL(sslErrors(QList)), this, SLOT(ignoreErrorSlot())); connect(socket, SIGNAL(encrypted()), &loop, SLOT(quit())); @@ -3830,7 +3830,7 @@ void tst_QSslSocket::simplePskConnect() QSignalSpy sslErrorsSpy(&socket, SIGNAL(sslErrors(QList))); QVERIFY(sslErrorsSpy.isValid()); - QSignalSpy socketErrorsSpy(&socket, SIGNAL(error(QAbstractSocket::SocketError))); + QSignalSpy socketErrorsSpy(&socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError))); QVERIFY(socketErrorsSpy.isValid()); QSignalSpy peerVerifyErrorSpy(&socket, SIGNAL(peerVerifyError(QSslError))); @@ -3844,7 +3844,7 @@ void tst_QSslSocket::simplePskConnect() connect(&socket, SIGNAL(modeChanged(QSslSocket::SslMode)), this, SLOT(exitLoop())); connect(&socket, SIGNAL(encrypted()), this, SLOT(exitLoop())); connect(&socket, SIGNAL(sslErrors(QList)), this, SLOT(exitLoop())); - connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(exitLoop())); + connect(&socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SLOT(exitLoop())); connect(&socket, SIGNAL(peerVerifyError(QSslError)), this, SLOT(exitLoop())); connect(&socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(exitLoop())); @@ -4112,7 +4112,7 @@ void tst_QSslSocket::pskServer() connect(&socket, SIGNAL(modeChanged(QSslSocket::SslMode)), this, SLOT(exitLoop())); connect(&socket, SIGNAL(encrypted()), this, SLOT(exitLoop())); connect(&socket, SIGNAL(sslErrors(QList)), this, SLOT(exitLoop())); - connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(exitLoop())); + connect(&socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SLOT(exitLoop())); connect(&socket, SIGNAL(peerVerifyError(QSslError)), this, SLOT(exitLoop())); connect(&socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(exitLoop())); @@ -4292,7 +4292,7 @@ void tst_QSslSocket::signatureAlgorithm() QEventLoop loop; QTimer::singleShot(5000, &loop, &QEventLoop::quit); - connect(socket, QOverload::of(&QAbstractSocket::error), &loop, &QEventLoop::quit); + connect(socket, &QAbstractSocket::errorOccurred, &loop, &QEventLoop::quit); connect(socket, QOverload &>::of(&QSslSocket::sslErrors), this, &tst_QSslSocket::ignoreErrorSlot); connect(socket, &QSslSocket::encrypted, &loop, &QEventLoop::quit); diff --git a/tests/manual/bearerex/datatransferer.cpp b/tests/manual/bearerex/datatransferer.cpp index 0eeeb090ae0..b4409ce52cd 100644 --- a/tests/manual/bearerex/datatransferer.cpp +++ b/tests/manual/bearerex/datatransferer.cpp @@ -53,7 +53,7 @@ DataTransfererQTcp::DataTransfererQTcp(QObject* parent) connect(&m_qsocket, SIGNAL(readyRead()), this, SLOT(readyRead())); connect(&m_qsocket, SIGNAL(connected()), this, SLOT(connected())); - connect(&m_qsocket, SIGNAL(error(QAbstractSocket::SocketError)), + connect(&m_qsocket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SLOT(error(QAbstractSocket::SocketError))); } From cb390719c6cc8b31788755b98981bc2a4327a903 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Tue, 25 Feb 2020 16:10:24 +0100 Subject: [PATCH 27/34] Remove ### Qt 6 comment that we won't address MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QStatusBar is 22 years old, and those protected APIs have been around ever since. There is no good reason to make them private now. Change-Id: I62624800d8e287e21535967aa6a861b98cae97d5 Reviewed-by: Shawn Rutledge Reviewed-by: Jan Arve Sæther --- src/widgets/widgets/qstatusbar.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/widgets/widgets/qstatusbar.h b/src/widgets/widgets/qstatusbar.h index 2492e8487fd..976e45f9ed0 100644 --- a/src/widgets/widgets/qstatusbar.h +++ b/src/widgets/widgets/qstatusbar.h @@ -83,7 +83,6 @@ protected: void paintEvent(QPaintEvent *) override; void resizeEvent(QResizeEvent *) override; - // ### Qt 6: consider making reformat() and hideOrShow() private void reformat(); void hideOrShow(); bool event(QEvent *) override; From 31b06a0437f96935f12eb0db003a5867c83a9228 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Tue, 25 Feb 2020 15:30:16 +0100 Subject: [PATCH 28/34] QWizard: deprecate visitedPages and add visitedIds instead MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As per the ### Qt 6 comment. A method visitedPages should, following the convention of the other QWizard APIs, return a list of QWizardPage pointers. Since the method returns a list of IDs, visitedIds is the correct name. [ChangeLog][QtWidgets][QWizard] visitedPages has been deprecated, use visitedIds instead. Change-Id: Ifdb94adf093be14cb48c84cb40818c55ff5189a0 Reviewed-by: Jan Arve Sæther --- src/widgets/dialogs/qwizard.cpp | 12 +++++++- src/widgets/dialogs/qwizard.h | 5 +++- .../widgets/dialogs/qwizard/tst_qwizard.cpp | 30 +++++++++---------- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/src/widgets/dialogs/qwizard.cpp b/src/widgets/dialogs/qwizard.cpp index 31e32bb9313..b0f4312f401 100644 --- a/src/widgets/dialogs/qwizard.cpp +++ b/src/widgets/dialogs/qwizard.cpp @@ -2384,12 +2384,22 @@ bool QWizard::hasVisitedPage(int theid) const \sa hasVisitedPage() */ -QList QWizard::visitedPages() const +QList QWizard::visitedIds() const { Q_D(const QWizard); return d->history; } +/*! + \obsolete Use visitedIds() instead +*/ +#if QT_DEPRECATED_SINCE(5, 15) +QList QWizard::visitedPages() const +{ + return visitedIds(); +} +#endif + /*! Returns the list of page IDs. \since 4.5 diff --git a/src/widgets/dialogs/qwizard.h b/src/widgets/dialogs/qwizard.h index ef71efa0cb2..a40635c4a5f 100644 --- a/src/widgets/dialogs/qwizard.h +++ b/src/widgets/dialogs/qwizard.h @@ -128,7 +128,10 @@ public: void removePage(int id); QWizardPage *page(int id) const; bool hasVisitedPage(int id) const; - QList visitedPages() const; // ### Qt 6: visitedIds()? +#if QT_DEPRECATED_SINCE(5, 15) + QList visitedPages() const; +#endif + QList visitedIds() const; QList pageIds() const; void setStartId(int id); int startId() const; diff --git a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp index 9ae4508bc13..78616009a23 100644 --- a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp +++ b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp @@ -585,7 +585,7 @@ void tst_QWizard::addPage() #define CHECK_VISITED(wizard, list) \ do { \ QList myList = list; \ - QCOMPARE((wizard).visitedPages(), myList); \ + QCOMPARE((wizard).visitedIds(), myList); \ Q_FOREACH(int id, myList) \ QVERIFY((wizard).hasVisitedPage(id)); \ } while (0) @@ -2292,7 +2292,7 @@ void tst_QWizard::removePage() wizard.restart(); QCOMPARE(wizard.pageIds().size(), 4); - QCOMPARE(wizard.visitedPages().size(), 1); + QCOMPARE(wizard.visitedIds().size(), 1); QCOMPARE(spy.count(), 0); // Removing a non-existent page @@ -2330,14 +2330,14 @@ void tst_QWizard::removePage() wizard.setPage(2, page2); // restore wizard.restart(); wizard.next(); - QCOMPARE(wizard.visitedPages().size(), 2); + QCOMPARE(wizard.visitedIds().size(), 2); QCOMPARE(wizard.currentPage(), page1); QCOMPARE(spy.count(), 0); wizard.removePage(2); QCOMPARE(spy.count(), 1); arguments = spy.takeFirst(); QCOMPARE(arguments.at(0).toInt(), 2); - QCOMPARE(wizard.visitedPages().size(), 2); + QCOMPARE(wizard.visitedIds().size(), 2); QVERIFY(!wizard.pageIds().contains(2)); QCOMPARE(wizard.currentPage(), page1); @@ -2346,14 +2346,14 @@ void tst_QWizard::removePage() wizard.restart(); wizard.next(); QCOMPARE(spy.count(), 0); - QCOMPARE(wizard.visitedPages().size(), 2); + QCOMPARE(wizard.visitedIds().size(), 2); QCOMPARE(wizard.currentPage(), page1); wizard.removePage(0); QCOMPARE(spy.count(), 1); arguments = spy.takeFirst(); QCOMPARE(arguments.at(0).toInt(), 0); - QCOMPARE(wizard.visitedPages().size(), 1); - QVERIFY(!wizard.visitedPages().contains(0)); + QCOMPARE(wizard.visitedIds().size(), 1); + QVERIFY(!wizard.visitedIds().contains(0)); QVERIFY(!wizard.pageIds().contains(0)); QCOMPARE(wizard.currentPage(), page1); @@ -2362,14 +2362,14 @@ void tst_QWizard::removePage() wizard.restart(); wizard.next(); QCOMPARE(spy.count(), 0); - QCOMPARE(wizard.visitedPages().size(), 2); + QCOMPARE(wizard.visitedIds().size(), 2); QCOMPARE(wizard.currentPage(), page1); wizard.removePage(1); QCOMPARE(spy.count(), 1); arguments = spy.takeFirst(); QCOMPARE(arguments.at(0).toInt(), 1); - QCOMPARE(wizard.visitedPages().size(), 1); - QVERIFY(!wizard.visitedPages().contains(1)); + QCOMPARE(wizard.visitedIds().size(), 1); + QVERIFY(!wizard.visitedIds().contains(1)); QVERIFY(!wizard.pageIds().contains(1)); QCOMPARE(wizard.currentPage(), page0); @@ -2378,8 +2378,8 @@ void tst_QWizard::removePage() QCOMPARE(spy.count(), 1); arguments = spy.takeFirst(); QCOMPARE(arguments.at(0).toInt(), 0); - QCOMPARE(wizard.visitedPages().size(), 1); - QVERIFY(!wizard.visitedPages().contains(0)); + QCOMPARE(wizard.visitedIds().size(), 1); + QVERIFY(!wizard.visitedIds().contains(0)); QCOMPARE(wizard.pageIds().size(), 2); QVERIFY(!wizard.pageIds().contains(0)); QCOMPARE(wizard.currentPage(), page2); @@ -2388,8 +2388,8 @@ void tst_QWizard::removePage() QCOMPARE(spy.count(), 1); arguments = spy.takeFirst(); QCOMPARE(arguments.at(0).toInt(), 2); - QCOMPARE(wizard.visitedPages().size(), 1); - QVERIFY(!wizard.visitedPages().contains(2)); + QCOMPARE(wizard.visitedIds().size(), 1); + QVERIFY(!wizard.visitedIds().contains(2)); QCOMPARE(wizard.pageIds().size(), 1); QVERIFY(!wizard.pageIds().contains(2)); QCOMPARE(wizard.currentPage(), page3); @@ -2398,7 +2398,7 @@ void tst_QWizard::removePage() QCOMPARE(spy.count(), 1); arguments = spy.takeFirst(); QCOMPARE(arguments.at(0).toInt(), 3); - QVERIFY(wizard.visitedPages().empty()); + QVERIFY(wizard.visitedIds().empty()); QVERIFY(wizard.pageIds().empty()); QCOMPARE(wizard.currentPage(), nullptr); } From 924b97d6abf6f9935c9698984a1596c65324e3fa Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Thu, 20 Feb 2020 17:30:57 +0100 Subject: [PATCH 29/34] Fix QDateTimeEdit's handling of invalid time in dst gap During a spring forward, a time-zone omits an hour. A QDateTime with such an hour is invalid, but QDateTimeEdit's handling of this invalid time was not done correctly. With this fix, up/down changes of any field that would result in an invalid date-time corrects the time to be valid, while leaving as much as possible of the user-entered data unchanged. To do that, we rely on QDateTime::toMSecsSinceEpoch to return a value even for such an invalid time, which then can be used to construct a valid QDateTime. Edits that would result in an invalid hour are reverted to the previous when pressing return, if correctionMode is CorrectToPreviousValue. This change also implements support for CorrectToNearestValue, which uses the same mechanism as when stepping over an invalid time. Include a test that verifies that the various interactions result in a reasonable value. Since QDateTimeEdit does not respect the timezone or timespec of the QDateTime it is initialized with, we have to find the first hour of daylight saving time for a year that we know works for most time zones. Failing that, we have to skip the tests. Verified in a wide range of time zones. Change-Id: I05b906ae3b5f6681891d23704f00f9c10cd479ae Fixes: QTBUG-79803 Reviewed-by: Edward Welbourne --- src/corelib/time/qdatetimeparser.cpp | 8 + src/widgets/widgets/qdatetimeedit.cpp | 22 +- .../qdatetimeedit/tst_qdatetimeedit.cpp | 231 ++++++++++++++++++ 3 files changed, 260 insertions(+), 1 deletion(-) diff --git a/src/corelib/time/qdatetimeparser.cpp b/src/corelib/time/qdatetimeparser.cpp index 790c20004a1..2a19611493b 100644 --- a/src/corelib/time/qdatetimeparser.cpp +++ b/src/corelib/time/qdatetimeparser.cpp @@ -1539,6 +1539,14 @@ QDateTimeParser::parse(QString input, int position, const QDateTime &defaultValu text = scan.input = input; // Set spec *after* all checking, so validity is a property of the string: scan.value = scan.value.toTimeSpec(spec); + + /* + However, even with a valid string we might have ended up with an invalid datetime: + the non-existent hour during dst changes, for instance. + */ + if (!scan.value.isValid() && scan.state == Acceptable) + scan.state = Intermediate; + return scan; } diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp index 63d5ae268e2..c89cef99b5e 100644 --- a/src/widgets/widgets/qdatetimeedit.cpp +++ b/src/widgets/widgets/qdatetimeedit.cpp @@ -1442,7 +1442,16 @@ void QDateTimeEdit::fixup(QString &input) const QValidator::State state; int copy = d->edit->cursorPosition(); - d->validateAndInterpret(input, copy, state, true); + QDateTime value = d->validateAndInterpret(input, copy, state, true); + /* + String was valid, but the datetime still is not; use the time that + has the same distance from epoch. + CorrectToPreviousValue correction is handled by QAbstractSpinBox. + */ + if (!value.isValid() && d->correctionMode == QAbstractSpinBox::CorrectToNearestValue) { + value = QDateTime::fromMSecsSinceEpoch(value.toMSecsSinceEpoch(), value.timeSpec()); + input = textFromDateTime(value); + } } @@ -2060,6 +2069,17 @@ QDateTime QDateTimeEditPrivate::stepBy(int sectionIndex, int steps, bool test) c const int oldDay = v.date().day(calendar); setDigit(v, sectionIndex, val); + /* + Stepping into a daylight saving time that doesn't exist, + so use the time that has the same distance from epoch. + */ + if (!v.isValid()) { + auto msecsSinceEpoch = v.toMSecsSinceEpoch(); + // decreasing from e.g 3am to 2am would get us back to 3am, but we want 1am + if (steps < 0 && sn.type & HourSectionMask) + msecsSinceEpoch -= 3600 * 1000; + v = QDateTime::fromMSecsSinceEpoch(msecsSinceEpoch, v.timeSpec()); + } // if this sets year or month it will make // sure that days are lowered if needed. diff --git a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp index 264625777f8..4c6cf3588a5 100644 --- a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp +++ b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp @@ -294,6 +294,13 @@ private slots: void stepModifierPressAndHold_data(); void stepModifierPressAndHold(); + + void springForward_data(); + void springForward(); + + void stepIntoDSTGap_data(); + void stepIntoDSTGap(); + private: EditorDateEdit* testWidget; QWidget *testFocusWidget; @@ -4337,5 +4344,229 @@ void tst_QDateTimeEdit::stepModifierPressAndHold() QCOMPARE(value.toDate(), expectedDate); } +/* + The following tests verify correct handling of the spring forward gap; which + hour is skipped, and on which day, depends on the local time zone. We try to + make it reasonably robust by discovering the first day of spring in a given + year, but we won't try to handle every situation. + + If this function returns an invalid QDateTime, then the tests should be skipped. +*/ +static QDateTime findSpring(int year, const QTimeZone &timeZone) +{ + if (!timeZone.hasTransitions()) + return QDateTime(); + + // Southern hemisphere spring is after midsummer + const QDateTime midSummer = QDate(year, 6, 21).startOfDay(); + const QTimeZone::OffsetData transition = + midSummer.isDaylightTime() ? timeZone.previousTransition(midSummer) + : timeZone.nextTransition(midSummer); + const QDateTime spring = transition.atUtc.toLocalTime(); + // there might have been DST at some point, but not in the year we care about + if (spring.date().year() != year || !spring.isDaylightTime()) + return QDateTime(); + + return spring; +}; + +/*! + Test that typing in a time that is invalid due to spring forward gap + produces reasonable results. +*/ +void tst_QDateTimeEdit::springForward_data() +{ + QTest::addColumn("start"); + QTest::addColumn("correctionMode"); + QTest::addColumn("inputTime"); + QTest::addColumn("expected"); + + const QTimeZone timeZone = QTimeZone::systemTimeZone(); + if (!timeZone.hasDaylightTime()) + QSKIP("This test needs to run in a timezone that observes DST!"); + + const QDateTime springTransition = findSpring(2019, timeZone); + if (!springTransition.isValid()) + QSKIP("Failed to obtain valid spring forward datetime for 2019!"); + + const QDate springDate = springTransition.date(); + const int gapWidth = timeZone.daylightTimeOffset(springTransition.addDays(1)); + const QTime springGap = springTransition.time().addSecs(-gapWidth); + const QTime springGapMiddle = springTransition.time().addSecs(-gapWidth/2); + + QTest::addRow("forward to %s, correct to previous", qPrintable(springGap.toString("hh:mm"))) + << QDateTime(springDate, springGap.addSecs(-gapWidth)) + << QAbstractSpinBox::CorrectToPreviousValue + << springGap + << QDateTime(springDate, springGap.addSecs(-gapWidth)); + + QTest::addRow("back to %s, correct to previous", qPrintable(springGap.toString("hh:mm"))) + << springTransition + << QAbstractSpinBox::CorrectToPreviousValue + << springGap + << springTransition; + + QTest::addRow("forward to %s, correct to nearest", qPrintable(springGap.toString("hh:mm"))) + << QDateTime(springDate, springGap.addSecs(-gapWidth)) + << QAbstractSpinBox::CorrectToNearestValue + << springGapMiddle + << springTransition; + + QTest::addRow("back to %s, correct to nearest", qPrintable(springGap.toString("hh:mm"))) + << springTransition + << QAbstractSpinBox::CorrectToNearestValue + << springGapMiddle + << springTransition; + + QTest::addRow("jump to %s, correct to nearest", qPrintable(springGapMiddle.toString("hh:mm"))) + << QDateTime(QDate(1980, 5, 10), springGap) + << QAbstractSpinBox::CorrectToNearestValue + << springGapMiddle + << springTransition; +} + +void tst_QDateTimeEdit::springForward() +{ + QFETCH(QDateTime, start); + QFETCH(QAbstractSpinBox::CorrectionMode, correctionMode); + QFETCH(QTime, inputTime); + QFETCH(QDateTime, expected); + + QDateTimeEdit edit; + edit.setDisplayFormat(QLatin1String("dd.MM.yyyy hh:mm")); + edit.setCorrectionMode(correctionMode); + + // we always want to start with a valid time + QVERIFY(start.isValid()); + edit.setDateTime(start); + + edit.setSelectedSection(QDateTimeEdit::DaySection); + const QDate date = expected.date(); + const QString day = QString::number(date.day()).rightJustified(2, QLatin1Char('0')); + const QString month = QString::number(date.month()).rightJustified(2, QLatin1Char('0')); + const QString year = QString::number(date.year()); + const QString hour = QString::number(inputTime.hour()).rightJustified(2, QLatin1Char('0')); + const QString minute = QString::number(inputTime.minute()).rightJustified(2, QLatin1Char('0')); + QTest::keyClicks(&edit, day); + QTest::keyClicks(&edit, month); + QTest::keyClicks(&edit, year); + QTest::keyClicks(&edit, hour); + QTest::keyClicks(&edit, minute); + QTest::keyClick(&edit, Qt::Key_Return, {}); + + QCOMPARE(edit.dateTime(), expected); +} + +/*! + Test that using the up/down spinners to modify a valid time into a time that + is invalid due to daylight-saving changes produces reasonable results. + + 2007 is a year in which the DST transition in most tested places was not on the + last or first day of the month, which allows us to test the various steps. +*/ +void tst_QDateTimeEdit::stepIntoDSTGap_data() +{ + QTest::addColumn("start"); + QTest::addColumn("section"); + QTest::addColumn("steps"); + QTest::addColumn("end"); + + const QTimeZone timeZone = QTimeZone::systemTimeZone(); + if (!timeZone.hasDaylightTime()) + QSKIP("This test needs to run in a timezone that observes DST!"); + + const QDateTime springTransition = findSpring(2007, timeZone); + if (!springTransition.isValid()) + QSKIP("Failed to obtain valid spring forward datetime for 2007!"); + + const QDate spring = springTransition.date(); + const int gapWidth = timeZone.daylightTimeOffset(springTransition.addDays(1)); + const QTime springGap = springTransition.time().addSecs(-gapWidth); + + // change hour + if (springGap.hour() != 0) { + QTest::addRow("hour up into %s gap", qPrintable(springGap.toString("hh:mm"))) + << QDateTime(spring, springGap.addSecs(-3600)) + << QDateTimeEdit::HourSection + << +1 + << springTransition; + + // 3:00:10 into 2:00:10 should get us to 1:00:10 + QTest::addRow("hour down into %s gap", qPrintable(springGap.toString("hh:mm"))) + << QDateTime(spring, springGap.addSecs(3610)) + << QDateTimeEdit::HourSection + << -1 + << QDateTime(spring, springGap.addSecs(-3590)); + } + + // change day + if (spring.day() != 1) { + // today's 2:05 is tomorrow's 3:05 + QTest::addRow("day up into %s gap", qPrintable(springGap.toString("hh:mm"))) + << QDateTime(spring.addDays(-1), springGap.addSecs(300)) + << QDateTimeEdit::DaySection + << +1 + << springTransition.addSecs(300); + } + + if (spring.day() != spring.daysInMonth()) { + QTest::addRow("day down into %s gap", qPrintable(springGap.toString("hh:mm"))) + << QDateTime(spring.addDays(1), springGap) + << QDateTimeEdit::DaySection + << -1 + << springTransition; + } + + // 2018-03-25 - change month + QTest::addRow("month up into %s gap", qPrintable(springGap.toString("hh:mm"))) + << QDateTime(spring.addMonths(-1), springGap) + << QDateTimeEdit::MonthSection + << +1 + << springTransition; + QTest::addRow("month down into %s gap", qPrintable(springGap.toString("hh:mm"))) + << QDateTime(spring.addMonths(1), springGap) + << QDateTimeEdit::MonthSection + << -1 + << springTransition; + + // 2018-03-25 - change year + QTest::addRow("year up into %s gap", qPrintable(springGap.toString("hh:mm"))) + << QDateTime(spring.addYears(-1), springGap) + << QDateTimeEdit::YearSection + << +1 + << springTransition; + QTest::addRow("year down into %s gap", qPrintable(springGap.toString("hh:mm"))) + << QDateTime(spring.addYears(1), springGap) + << QDateTimeEdit::YearSection + << -1 + << springTransition; +} + +void tst_QDateTimeEdit::stepIntoDSTGap() +{ + QFETCH(QDateTime, start); + QFETCH(QDateTimeEdit::Section, section); + QFETCH(int, steps); + QFETCH(QDateTime, end); + + QDateTimeEdit edit; + edit.setDisplayFormat(QLatin1String("dd.MM.yyyy hh:mm")); + + // we always want to start with a valid time + QVERIFY(start.isValid()); + edit.setDateTime(start); + + edit.setSelectedSection(section); + + // we want to end with a valid value + QVERIFY(end.isValid()); + + const auto stepCount = qAbs(steps); + for (int step = 0; step < stepCount; ++step) + QTest::keyClick(&edit, steps > 0 ? Qt::Key_Up : Qt::Key_Down, {}); + + QCOMPARE(edit.dateTime(), end); +} + QTEST_MAIN(tst_QDateTimeEdit) #include "tst_qdatetimeedit.moc" From cb1145fb269dd2063c0e1979ad118e72b83d5dc4 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Tue, 25 Feb 2020 21:31:03 +0100 Subject: [PATCH 30/34] Fuzzing: Add fuzz target for QCborValue::fromCbor Change-Id: I59fbab99849a23c553520db33d6c7182dc7b114d Reviewed-by: Albert Astals Cid Reviewed-by: Ulf Hermann Reviewed-by: Shawn Rutledge --- .../qcborvalue/fromcbor/fromcbor.pro | 10 ++++++ .../qcborvalue/fromcbor/main.cpp | 34 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/fromcbor.pro create mode 100644 tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/main.cpp diff --git a/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/fromcbor.pro b/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/fromcbor.pro new file mode 100644 index 00000000000..6c988c24342 --- /dev/null +++ b/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/fromcbor.pro @@ -0,0 +1,10 @@ +QT -= gui +CONFIG += console +CONFIG -= app_bundle +SOURCES += main.cpp +FUZZ_ENGINE = $$(LIB_FUZZING_ENGINE) +isEmpty(FUZZ_ENGINE) { + QMAKE_LFLAGS += -fsanitize=fuzzer +} else { + LIBS += $$FUZZ_ENGINE +} diff --git a/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/main.cpp b/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/main.cpp new file mode 100644 index 00000000000..5e2a440d1bb --- /dev/null +++ b/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/main.cpp @@ -0,0 +1,34 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +extern "C" int LLVMFuzzerTestOneInput(const char *Data, size_t Size) { + QCborValue::fromCbor(QByteArray::fromRawData(Data, Size)); + return 0; +} From ecae4732a7a7e3a94dd06a47273a5cec7a1ad8f3 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Sat, 22 Feb 2020 19:51:02 +0200 Subject: [PATCH 31/34] Android: QFileDialog::selectedFiles() check isLocalFile() call toLocalFile() only if the returned QUrl::isLocalFile() is true, otherwise return toString(). Same thing as done for QFileDialog static functions as in 1576f81baa8a1c992a005397edfc5d6f9e1b44c1. Change-Id: I3f8cab385e32d0943587b3382a636ea3a168d518 Reviewed-by: Andy Shaw --- src/widgets/dialogs/qfiledialog.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 81f0cde407f..6283e28c0ee 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -1298,8 +1298,12 @@ QStringList QFileDialog::selectedFiles() const QStringList files; const QList userSelectedFiles = d->userSelectedFiles(); files.reserve(userSelectedFiles.size()); - for (const QUrl &file : userSelectedFiles) - files.append(file.toLocalFile()); + for (const QUrl &file : userSelectedFiles) { + if (file.isLocalFile() || file.isEmpty()) + files.append(file.toLocalFile()); + else + files.append(file.toString()); + } if (files.isEmpty() && d->usingWidgets()) { const FileMode fm = fileMode(); if (fm != ExistingFile && fm != ExistingFiles) From ede8545245377da0e770d6129be71cdc3ff5ad17 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 27 Feb 2020 08:08:25 -0800 Subject: [PATCH 32/34] QMimeXMLProvider: add missing semi-colon in the #else case Fixes: QTBUG-82547 Change-Id: Ia8b65350cd5d49debca9fffd15f74e22c0536805 Reviewed-by: David Faure --- src/corelib/mimetypes/qmimeprovider_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/mimetypes/qmimeprovider_p.h b/src/corelib/mimetypes/qmimeprovider_p.h index 0629df8a950..c4e712b318c 100644 --- a/src/corelib/mimetypes/qmimeprovider_p.h +++ b/src/corelib/mimetypes/qmimeprovider_p.h @@ -140,7 +140,7 @@ public: enum : bool { InternalDatabaseAvailable = false }; QMimeXMLProvider(QMimeDatabasePrivate *db, InternalDatabaseEnum) : QMimeProviderBase(db, QString()) - { Q_UNREACHABLE() }; + { Q_UNREACHABLE(); }; #endif QMimeXMLProvider(QMimeDatabasePrivate *db, const QString &directory); ~QMimeXMLProvider(); From c2a13ae501776e621e21a33a8b04af038704bfdd Mon Sep 17 00:00:00 2001 From: Kai Uwe Broulik Date: Thu, 14 Nov 2019 15:19:17 +0100 Subject: [PATCH 33/34] QConcatenateTablesProxyModel: Add getter for sourceModels Currently, there's no generic way to get the source models as there's only calls to add or remove them. Change-Id: I23cdef7c93328b58a80ec4659b44073f8ff05088 Reviewed-by: David Faure --- .../itemmodels/qconcatenatetablesproxymodel.cpp | 11 +++++++++++ src/corelib/itemmodels/qconcatenatetablesproxymodel.h | 1 + 2 files changed, 12 insertions(+) diff --git a/src/corelib/itemmodels/qconcatenatetablesproxymodel.cpp b/src/corelib/itemmodels/qconcatenatetablesproxymodel.cpp index 3afa1324837..a2597faa93c 100644 --- a/src/corelib/itemmodels/qconcatenatetablesproxymodel.cpp +++ b/src/corelib/itemmodels/qconcatenatetablesproxymodel.cpp @@ -447,6 +447,17 @@ QSize QConcatenateTablesProxyModel::span(const QModelIndex &index) const return sourceIndex.model()->span(sourceIndex); } +/*! + Returns a list of models that were added as source models for this proxy model. + + \since 5.15 +*/ +QList QConcatenateTablesProxyModel::sourceModels() const +{ + Q_D(const QConcatenateTablesProxyModel); + return d->m_models.toList(); +} + /*! Adds a source model \a sourceModel, below all previously added source models. diff --git a/src/corelib/itemmodels/qconcatenatetablesproxymodel.h b/src/corelib/itemmodels/qconcatenatetablesproxymodel.h index 69b3a2ba097..1fa84d5f519 100644 --- a/src/corelib/itemmodels/qconcatenatetablesproxymodel.h +++ b/src/corelib/itemmodels/qconcatenatetablesproxymodel.h @@ -56,6 +56,7 @@ public: explicit QConcatenateTablesProxyModel(QObject *parent = nullptr); ~QConcatenateTablesProxyModel(); + QList sourceModels() const; Q_SCRIPTABLE void addSourceModel(QAbstractItemModel *sourceModel); Q_SCRIPTABLE void removeSourceModel(QAbstractItemModel *sourceModel); From 4c86e667d220e27bb4b6e370675ffb2872e8521c Mon Sep 17 00:00:00 2001 From: Alexander Akulich Date: Mon, 10 Feb 2020 12:29:57 +0300 Subject: [PATCH 34/34] Revert "QNetworkReply: deprecate the 'error' getter" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit ccb2cb84f535b0bfce19a95d7f3a36803480cae8 and commit 0f568d0a671e9f0667a1b47ffa6fbb9f7a10d9f5. The patches fix ambiguity between a getter and a signal by changing the getter name, but we still have to rename the signal to follow the signals naming convention. Revert the commits to keep the getter as is and change the signal name instead. Change-Id: Iddbab7c33eea03826ae7c114a01857ed45bde6db Reviewed-by: Mårten Nordheim --- examples/embedded/flightinfo/flightinfo.cpp | 2 +- examples/embedded/lightmaps/slippymap.cpp | 2 +- examples/network/download/main.cpp | 2 +- .../downloadmanager/downloadmanager.cpp | 2 +- .../network/googlesuggest/googlesuggest.cpp | 2 +- examples/network/http/httpwindow.cpp | 2 +- examples/network/torrent/trackerclient.cpp | 4 +- src/network/access/qnetworkreply.cpp | 23 +- src/network/access/qnetworkreply.h | 7 +- tests/auto/network/access/http2/tst_http2.cpp | 20 +- .../tst_qabstractnetworkcache.cpp | 10 +- .../qnetworkreply/tst_qnetworkreply.cpp | 327 +++++++++--------- tests/auto/network/access/spdy/tst_spdy.cpp | 8 +- .../qxmlinputsource/tst_qxmlinputsource.cpp | 2 +- .../qnetworkreply/tst_qnetworkreply.cpp | 22 +- 15 files changed, 208 insertions(+), 227 deletions(-) diff --git a/examples/embedded/flightinfo/flightinfo.cpp b/examples/embedded/flightinfo/flightinfo.cpp index a20a03de433..f7df368dd77 100644 --- a/examples/embedded/flightinfo/flightinfo.cpp +++ b/examples/embedded/flightinfo/flightinfo.cpp @@ -144,7 +144,7 @@ public: private slots: void handleNetworkData(QNetworkReply *networkReply) { - if (!networkReply->networkError()) { + if (!networkReply->error()) { if (!mapReplies.contains(networkReply)) { // Assume UTF-8 encoded QByteArray data = networkReply->readAll(); diff --git a/examples/embedded/lightmaps/slippymap.cpp b/examples/embedded/lightmaps/slippymap.cpp index dfc21862fb5..da003981ff8 100644 --- a/examples/embedded/lightmaps/slippymap.cpp +++ b/examples/embedded/lightmaps/slippymap.cpp @@ -162,7 +162,7 @@ void SlippyMap::handleNetworkData(QNetworkReply *reply) { QImage img; QPoint tp = reply->request().attribute(QNetworkRequest::User).toPoint(); - if (!reply->networkError()) + if (!reply->error()) if (!img.load(reply, 0)) img = QImage(); reply->deleteLater(); diff --git a/examples/network/download/main.cpp b/examples/network/download/main.cpp index f496c1723e8..076dfdfd0b2 100644 --- a/examples/network/download/main.cpp +++ b/examples/network/download/main.cpp @@ -175,7 +175,7 @@ void DownloadManager::sslErrors(const QList &sslErrors) void DownloadManager::downloadFinished(QNetworkReply *reply) { QUrl url = reply->url(); - if (reply->networkError()) { + if (reply->error()) { fprintf(stderr, "Download of %s failed: %s\n", url.toEncoded().constData(), qPrintable(reply->errorString())); diff --git a/examples/network/downloadmanager/downloadmanager.cpp b/examples/network/downloadmanager/downloadmanager.cpp index eceb48977bd..cbad29541a8 100644 --- a/examples/network/downloadmanager/downloadmanager.cpp +++ b/examples/network/downloadmanager/downloadmanager.cpp @@ -162,7 +162,7 @@ void DownloadManager::downloadFinished() progressBar.clear(); output.close(); - if (currentDownload->networkError()) { + if (currentDownload->error()) { // download failed fprintf(stderr, "Failed: %s\n", qPrintable(currentDownload->errorString())); output.remove(); diff --git a/examples/network/googlesuggest/googlesuggest.cpp b/examples/network/googlesuggest/googlesuggest.cpp index 1ae515f5305..2cba43178ea 100644 --- a/examples/network/googlesuggest/googlesuggest.cpp +++ b/examples/network/googlesuggest/googlesuggest.cpp @@ -209,7 +209,7 @@ void GSuggestCompletion::preventSuggest() void GSuggestCompletion::handleNetworkData(QNetworkReply *networkReply) { QUrl url = networkReply->url(); - if (networkReply->networkError() == QNetworkReply::NoError) { + if (networkReply->error() == QNetworkReply::NoError) { QVector choices; QByteArray response(networkReply->readAll()); diff --git a/examples/network/http/httpwindow.cpp b/examples/network/http/httpwindow.cpp index d0eb2529cde..c7bf0c0dff9 100644 --- a/examples/network/http/httpwindow.cpp +++ b/examples/network/http/httpwindow.cpp @@ -249,7 +249,7 @@ void HttpWindow::httpFinished() return; } - if (reply->networkError()) { + if (reply->error()) { QFile::remove(fi.absoluteFilePath()); statusLabel->setText(tr("Download failed:\n%1.").arg(reply->errorString())); downloadButton->setEnabled(true); diff --git a/examples/network/torrent/trackerclient.cpp b/examples/network/torrent/trackerclient.cpp index a50a49fd64d..264a6cc04cb 100644 --- a/examples/network/torrent/trackerclient.cpp +++ b/examples/network/torrent/trackerclient.cpp @@ -165,8 +165,8 @@ void TrackerClient::httpRequestDone(QNetworkReply *reply) return; } - if (reply->networkError() != QNetworkReply::NoError) { - emit connectionError(reply->networkError()); + if (reply->error() != QNetworkReply::NoError) { + emit connectionError(reply->error()); return; } diff --git a/src/network/access/qnetworkreply.cpp b/src/network/access/qnetworkreply.cpp index c22dce8f1c3..fb30bfd4f18 100644 --- a/src/network/access/qnetworkreply.cpp +++ b/src/network/access/qnetworkreply.cpp @@ -554,32 +554,13 @@ QNetworkAccessManager::Operation QNetworkReply::operation() const return d_func()->operation; } -#if QT_DEPRECATED_SINCE(5, 15) /*! - \deprecated - - Use networkError() instead. - - Returns the error that was found during the processing of this - request. If no error was found, returns NoError. - - \sa setError(), networkError() -*/ -QNetworkReply::NetworkError QNetworkReply::error() const -{ - return networkError(); -} -#endif // QT_DEPRECATED_SINCE(5, 15) - -/*! - \since 5.15 - Returns the error that was found during the processing of this request. If no error was found, returns NoError. \sa setError() */ -QNetworkReply::NetworkError QNetworkReply::networkError() const +QNetworkReply::NetworkError QNetworkReply::error() const { return d_func()->errorCode; } @@ -877,7 +858,7 @@ void QNetworkReply::setRequest(const QNetworkRequest &request) Calling setError() does not emit the error(QNetworkReply::NetworkError) signal. - \sa error(), errorString(), networkError() + \sa error(), errorString() */ void QNetworkReply::setError(NetworkError errorCode, const QString &errorString) { diff --git a/src/network/access/qnetworkreply.h b/src/network/access/qnetworkreply.h index 139009a56ab..4a402daa91a 100644 --- a/src/network/access/qnetworkreply.h +++ b/src/network/access/qnetworkreply.h @@ -124,12 +124,7 @@ public: QNetworkAccessManager *manager() const; QNetworkAccessManager::Operation operation() const; QNetworkRequest request() const; - -#if QT_DEPRECATED_SINCE(5, 15) - QT_DEPRECATED_X("Use networkError()") NetworkError error() const; -#endif // QT_DEPRECATED_SINCE(5, 15) - NetworkError networkError() const; - + NetworkError error() const; bool isFinished() const; bool isRunning() const; QUrl url() const; diff --git a/tests/auto/network/access/http2/tst_http2.cpp b/tests/auto/network/access/http2/tst_http2.cpp index d4e967d2cb8..6f94692cb19 100644 --- a/tests/auto/network/access/http2/tst_http2.cpp +++ b/tests/auto/network/access/http2/tst_http2.cpp @@ -279,7 +279,7 @@ void tst_Http2::singleRequest() QVERIFY(prefaceOK); QVERIFY(serverGotSettingsACK); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(reply->isFinished()); } @@ -444,7 +444,7 @@ void tst_Http2::pushPromise() QVERIFY(prefaceOK); QVERIFY(serverGotSettingsACK); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(reply->isFinished()); // Now, the most interesting part! @@ -466,7 +466,7 @@ void tst_Http2::pushPromise() QCOMPARE(nSentRequests, 0); // Decreased by replyFinished(): QCOMPARE(nRequests, 0); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(reply->isFinished()); } @@ -511,7 +511,7 @@ void tst_Http2::goaway() QNetworkRequest request(url); request.setAttribute(QNetworkRequest::Http2AllowedAttribute, QVariant(true)); replies[i] = manager->get(request); - QCOMPARE(replies[i]->networkError(), QNetworkReply::NoError); + QCOMPARE(replies[i]->error(), QNetworkReply::NoError); void (QNetworkReply::*errorSignal)(QNetworkReply::NetworkError) = &QNetworkReply::error; connect(replies[i], errorSignal, this, &tst_Http2::replyFinishedWithError); @@ -671,7 +671,7 @@ void tst_Http2::connectToHost() connect(reply, &QNetworkReply::finished, [this, reply]() { --nRequests; eventLoop.exitLoop(); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(reply->isFinished()); // Nothing received back: QVERIFY(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).isNull()); @@ -698,7 +698,7 @@ void tst_Http2::connectToHost() QVERIFY(prefaceOK); QVERIFY(serverGotSettingsACK); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(reply->isFinished()); } @@ -927,10 +927,10 @@ void tst_Http2::replyFinished() QVERIFY(nRequests); if (const auto reply = qobject_cast(sender())) { - if (reply->networkError() != QNetworkReply::NoError) + if (reply->error() != QNetworkReply::NoError) stopEventLoop(); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); const QVariant http2Used(reply->attribute(QNetworkRequest::Http2WasUsedAttribute)); if (!http2Used.isValid() || !http2Used.toBool()) @@ -967,9 +967,9 @@ void tst_Http2::replyFinishedWithError() if (const auto reply = qobject_cast(sender())) { // For now this is a 'generic' code, it just verifies some error was // reported without testing its type. - if (reply->networkError() == QNetworkReply::NoError) + if (reply->error() == QNetworkReply::NoError) stopEventLoop(); - QVERIFY(reply->networkError() != QNetworkReply::NoError); + QVERIFY(reply->error() != QNetworkReply::NoError); } --nRequests; diff --git a/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp b/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp index 4b6e04f4677..182e3e95476 100644 --- a/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp +++ b/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp @@ -322,10 +322,10 @@ void tst_QAbstractNetworkCache::runTest() QByteArray secondData = reply2->readAll(); if (!fetchFromCache && cacheLoadControl == QNetworkRequest::AlwaysCache) { - QCOMPARE(reply2->networkError(), QNetworkReply::ContentNotFoundError); + QCOMPARE(reply2->error(), QNetworkReply::ContentNotFoundError); QCOMPARE(secondData, QByteArray()); } else { - QCOMPARE(reply2->networkError(), QNetworkReply::NoError); + QCOMPARE(reply2->error(), QNetworkReply::NoError); QCOMPARE(QString(secondData), QString(goodData)); QCOMPARE(secondData, goodData); QCOMPARE(reply2->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); @@ -375,12 +375,12 @@ void tst_QAbstractNetworkCache::checkSynchronous() QByteArray secondData = reply2->readAll(); if (!fetchFromCache && cacheLoadControl == QNetworkRequest::AlwaysCache) { - QCOMPARE(reply2->networkError(), QNetworkReply::ContentNotFoundError); + QCOMPARE(reply2->error(), QNetworkReply::ContentNotFoundError); QCOMPARE(secondData, QByteArray()); } else { - if (reply2->networkError() != QNetworkReply::NoError) + if (reply2->error() != QNetworkReply::NoError) qDebug() << reply2->errorString(); - QCOMPARE(reply2->networkError(), QNetworkReply::NoError); + QCOMPARE(reply2->error(), QNetworkReply::NoError); QCOMPARE(QString(secondData), QString(goodData)); QCOMPARE(secondData, goodData); QCOMPARE(reply2->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 5a97d8a9b94..65f355ca255 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -1426,7 +1426,7 @@ QString tst_QNetworkReply::runSimpleRequest(QNetworkAccessManager::Operation op, if (request.attribute(QNetworkRequest::SynchronousRequestAttribute).toBool()) { if (reply->isFinished()) - code = reply->networkError() != QNetworkReply::NoError ? Failure : Success; + code = reply->error() != QNetworkReply::NoError ? Failure : Success; else code = Failure; } else { @@ -1491,10 +1491,10 @@ static QByteArray msgWaitForFinished(QNetworkReplyPtr &reply) debug << reply->url(); if (!reply->isFinished()) debug << "timed out."; - else if (reply->networkError() == QNetworkReply::NoError) + else if (reply->error() == QNetworkReply::NoError) debug << "finished."; else - debug << "failed: #" << reply->networkError() << reply->errorString(); + debug << "failed: #" << reply->error() << reply->errorString(); return result.toLocal8Bit(); } @@ -1642,7 +1642,7 @@ void tst_QNetworkReply::stateChecking() QCOMPARE(int(reply->operation()), int(QNetworkAccessManager::GetOperation)); // error and not error are OK since we might change underlying behaviour again if (!reply->isFinished()) - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->url(), url); reply->abort(); @@ -1659,7 +1659,7 @@ void tst_QNetworkReply::invalidProtocol() QCOMPARE(result, errorMsg); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::ProtocolUnknownError); + QCOMPARE(reply->error(), QNetworkReply::ProtocolUnknownError); } void tst_QNetworkReply::getFromData_data() @@ -1751,7 +1751,7 @@ void tst_QNetworkReply::getFromData() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, req, reply)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentTypeHeader).toString(), mimeType); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), qint64(expected.size())); @@ -1790,7 +1790,7 @@ void tst_QNetworkReply::getFromFile() QVERIFY(waitForFinish(reply) != Timeout); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), file.size()); QCOMPARE(reply->readAll(), data); @@ -1807,7 +1807,7 @@ void tst_QNetworkReply::getFromFile() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply)); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), file.size()); QCOMPARE(qint64(reply->readAll().size()), file.size()); @@ -1846,7 +1846,7 @@ void tst_QNetworkReply::getFromFileSpecial() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply)); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), resource.size()); QCOMPARE(reply->readAll(), resource.readAll()); @@ -1879,7 +1879,7 @@ void tst_QNetworkReply::getFromFtp() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply)); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size()); QCOMPARE(reply->readAll(), reference.readAll()); @@ -1892,7 +1892,7 @@ void tst_QNetworkReply::getFromFtpAfterError() invalidReply.reset(manager.get(invalidRequest)); QSignalSpy spy(invalidReply.data(), SIGNAL(error(QNetworkReply::NetworkError))); QVERIFY(spy.wait()); - QCOMPARE(invalidReply->networkError(), QNetworkReply::ContentNotFoundError); + QCOMPARE(invalidReply->error(), QNetworkReply::ContentNotFoundError); QFile reference(testDataDir + "/rfc3252.txt"); QVERIFY(reference.open(QIODevice::ReadOnly)); @@ -1900,7 +1900,7 @@ void tst_QNetworkReply::getFromFtpAfterError() QNetworkReplyPtr validReply; RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, validRequest, validReply)); QCOMPARE(validReply->url(), validRequest.url()); - QCOMPARE(validReply->networkError(), QNetworkReply::NoError); + QCOMPARE(validReply->error(), QNetworkReply::NoError); QCOMPARE(validReply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size()); QCOMPARE(validReply->readAll(), reference.readAll()); } @@ -1936,7 +1936,7 @@ void tst_QNetworkReply::getFromHttp() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply)); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); QCOMPARE(reply->size(), reference.size()); // only compare when the header is set. @@ -2031,7 +2031,7 @@ void tst_QNetworkReply::headFromHttp() QVERIFY(time.elapsed() < 8000); //check authentication didn't wait for the server to timeout the http connection (15s on qt test server) QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // only compare when the header is set. if (reply->header(QNetworkRequest::ContentLengthHeader).isValid() && referenceSize >= 0) @@ -2105,8 +2105,8 @@ static QByteArray msgGetErrors(int waitResult, const QNetworkReplyPtr &reply) QByteArray result ="waitResult=" + QByteArray::number(waitResult); if (reply->isFinished()) result += ", finished"; - if (reply->networkError() != QNetworkReply::NoError) - result += ", error: " + QByteArray::number(int(reply->networkError())); + if (reply->error() != QNetworkReply::NoError) + result += ", error: " + QByteArray::number(int(reply->error())); return result; } @@ -2136,7 +2136,7 @@ void tst_QNetworkReply::getErrors() reply->setParent(this); // we have expect-fails if (!reply->isFinished()) - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); // now run the request: const int waitResult = waitForFinish(reply); @@ -2146,7 +2146,7 @@ void tst_QNetworkReply::getErrors() QEXPECT_FAIL("ftp-is-dir", "QFtp cannot provide enough detail", Abort); // the line below is not necessary QEXPECT_FAIL("ftp-dir-not-readable", "QFtp cannot provide enough detail", Abort); - QCOMPARE(reply->networkError(), QNetworkReply::NetworkError(error)); + QCOMPARE(reply->error(), QNetworkReply::NetworkError(error)); QTEST(reply->readAll().isEmpty(), "dataIsEmpty"); @@ -2205,7 +2205,7 @@ void tst_QNetworkReply::putToFile() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, request, reply, data)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0)); QVERIFY(reply->readAll().isEmpty()); @@ -2235,7 +2235,7 @@ void tst_QNetworkReply::putToFtp() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, request, reply, data)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0)); QVERIFY(reply->readAll().isEmpty()); @@ -2283,7 +2283,7 @@ void tst_QNetworkReply::putToFtpWithInvalidCredentials() QVERIFY(r->isFinished()); QCOMPARE(r->url(), url); - QCOMPARE(r->networkError(), QNetworkReply::AuthenticationRequiredError); + QCOMPARE(r->error(), QNetworkReply::AuthenticationRequiredError); r->close(); } } @@ -2308,7 +2308,7 @@ void tst_QNetworkReply::putToHttp() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, request, reply, data)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 201); // 201 Created @@ -2349,7 +2349,7 @@ void tst_QNetworkReply::putToHttpSynchronous() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, request, reply, data)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 201); // 201 Created @@ -2383,7 +2383,7 @@ void tst_QNetworkReply::postToHttp() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok @@ -2415,7 +2415,7 @@ void tst_QNetworkReply::postToHttpSynchronous() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok @@ -2678,7 +2678,7 @@ void tst_QNetworkReply::postToHttpMultipart() multiPart->deleteLater(); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok @@ -2720,7 +2720,7 @@ void tst_QNetworkReply::multipartSkipIndices() // QTBUG-32534 QNetworkReplyPtr reply; RUN_REQUEST(runMultipartRequest(request, reply, multiPart, "POST")); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok QByteArray line; @@ -2766,7 +2766,7 @@ void tst_QNetworkReply::putToHttpMultipart() multiPart->deleteLater(); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok @@ -2805,7 +2805,7 @@ void tst_QNetworkReply::putToHttps() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, request, reply, data)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 201); // 201 Created @@ -2850,7 +2850,7 @@ void tst_QNetworkReply::putToHttpsSynchronous() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, request, reply, data)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 201); // 201 Created @@ -2888,7 +2888,7 @@ void tst_QNetworkReply::postToHttps() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok @@ -2924,7 +2924,7 @@ void tst_QNetworkReply::postToHttpsSynchronous() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok @@ -2969,7 +2969,7 @@ void tst_QNetworkReply::postToHttpsMultipart() multiPart->deleteLater(); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok @@ -3022,7 +3022,7 @@ void tst_QNetworkReply::deleteFromHttp() QNetworkReplyPtr reply; runSimpleRequest(QNetworkAccessManager::DeleteOperation, request, reply, 0); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), error); + QCOMPARE(reply->error(), error); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), resultCode); } @@ -3072,19 +3072,19 @@ void tst_QNetworkReply::putGetDeleteGetFromHttp() QNetworkReplyPtr reply; RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, putRequest, reply, 0)); - QCOMPARE(reply->networkError(), putError); + QCOMPARE(reply->error(), putError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), putResultCode); runSimpleRequest(QNetworkAccessManager::GetOperation, putRequest, reply, 0); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); runSimpleRequest(QNetworkAccessManager::DeleteOperation, deleteRequest, reply, 0); - QCOMPARE(reply->networkError(), deleteError); + QCOMPARE(reply->error(), deleteError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), deleteResultCode); runSimpleRequest(QNetworkAccessManager::GetOperation, get2Request, reply, 0); - QCOMPARE(reply->networkError(), get2Error); + QCOMPARE(reply->error(), get2Error); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), get2ResultCode); } @@ -3129,7 +3129,7 @@ void tst_QNetworkReply::connectToIPv6Address() QVERIFY(server.receivedData.contains(hostinfo)); QCOMPARE(content, dataToSend); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), error); + QCOMPARE(reply->error(), error); } void tst_QNetworkReply::sendCustomRequestToHttp_data() @@ -3175,7 +3175,7 @@ void tst_QNetworkReply::sendCustomRequestToHttp() runCustomRequest(request, reply, verb, device); QCOMPARE(reply->url(), url); QFETCH(QNetworkReply::NetworkError, error); - QCOMPARE(reply->networkError(), error); + QCOMPARE(reply->error(), error); QFETCH(int, resultCode); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), resultCode); QFETCH(QByteArray, expectedContent); @@ -3211,7 +3211,7 @@ void tst_QNetworkReply::ioGetFromData() QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QFETCH(QByteArray, data); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toInt(), data.size()); @@ -3247,7 +3247,7 @@ void tst_QNetworkReply::ioGetFromFileSpecial() QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), resource.size()); QCOMPARE(qint64(reader.data.size()), resource.size()); @@ -3280,7 +3280,7 @@ void tst_QNetworkReply::ioGetFromFile() QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), file.size()); QCOMPARE(qint64(reader.data.size()), file.size()); @@ -3311,7 +3311,7 @@ void tst_QNetworkReply::ioGetFromFtp() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QFETCH(qint64, expectedSize); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), expectedSize); @@ -3341,8 +3341,8 @@ void tst_QNetworkReply::ioGetFromFtpWithReuse() QCOMPARE(reply1->url(), request.url()); QCOMPARE(reply2->url(), request.url()); - QCOMPARE(reply1->networkError(), QNetworkReply::NoError); - QCOMPARE(reply2->networkError(), QNetworkReply::NoError); + QCOMPARE(reply1->error(), QNetworkReply::NoError); + QCOMPARE(reply2->error(), QNetworkReply::NoError); QCOMPARE(qint64(reader1.data.size()), reference.size()); QCOMPARE(qint64(reader2.data.size()), reference.size()); @@ -3366,7 +3366,7 @@ void tst_QNetworkReply::ioGetFromHttp() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size()); @@ -3392,8 +3392,8 @@ void tst_QNetworkReply::ioGetFromHttpWithReuseParallel() QCOMPARE(reply1->url(), request.url()); QCOMPARE(reply2->url(), request.url()); - QCOMPARE(reply1->networkError(), QNetworkReply::NoError); - QCOMPARE(reply2->networkError(), QNetworkReply::NoError); + QCOMPARE(reply1->error(), QNetworkReply::NoError); + QCOMPARE(reply2->error(), QNetworkReply::NoError); QCOMPARE(reply1->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); QCOMPARE(reply2->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); @@ -3420,7 +3420,7 @@ void tst_QNetworkReply::ioGetFromHttpWithReuseSequential() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size()); @@ -3438,7 +3438,7 @@ void tst_QNetworkReply::ioGetFromHttpWithReuseSequential() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size()); @@ -3561,7 +3561,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuth() QVERIFY(replySync->isFinished()); // synchronous if (expectedAuth) { // bad credentials in a synchronous request should just fail - QCOMPARE(replySync->networkError(), QNetworkReply::AuthenticationRequiredError); + QCOMPARE(replySync->error(), QNetworkReply::AuthenticationRequiredError); } else { QCOMPARE(authspy.count(), 0); @@ -3587,7 +3587,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuth() QVERIFY(replySync->isFinished()); // synchronous if (expectedAuth) { // bad credentials in a synchronous request should just fail - QCOMPARE(replySync->networkError(), QNetworkReply::AuthenticationRequiredError); + QCOMPARE(replySync->error(), QNetworkReply::AuthenticationRequiredError); } else { QCOMPARE(authspy.count(), 0); @@ -3614,7 +3614,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuthSynchronous() QSignalSpy authspy(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*))); QNetworkReplyPtr replySync(manager.get(request)); QVERIFY(replySync->isFinished()); // synchronous - QCOMPARE(replySync->networkError(), QNetworkReply::AuthenticationRequiredError); + QCOMPARE(replySync->error(), QNetworkReply::AuthenticationRequiredError); QCOMPARE(authspy.count(), 0); QCOMPARE(replySync->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 401); } @@ -3719,7 +3719,7 @@ void tst_QNetworkReply::ioGetFromHttpWithProxyAuthSynchronous() QNetworkReplyPtr replySync(manager.get(request)); manager.setProxy(QNetworkProxy()); // reset QVERIFY(replySync->isFinished()); // synchronous - QCOMPARE(replySync->networkError(), QNetworkReply::ProxyAuthenticationRequiredError); + QCOMPARE(replySync->error(), QNetworkReply::ProxyAuthenticationRequiredError); QCOMPARE(authspy.count(), 0); QCOMPARE(replySync->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 407); } @@ -3775,9 +3775,9 @@ void tst_QNetworkReply::ioGetFromHttpWithSocksProxy() QVERIFY(!reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).isValid()); QVERIFY(reader.data.isEmpty()); - QVERIFY(int(reply->networkError()) > 0); + QVERIFY(int(reply->error()) > 0); QEXPECT_FAIL("", "QTcpSocket doesn't return enough information yet", Continue); - QCOMPARE(int(reply->networkError()), int(QNetworkReply::ProxyConnectionRefusedError)); + QCOMPARE(int(reply->error()), int(QNetworkReply::ProxyConnectionRefusedError)); QCOMPARE(authspy.count(), 0); } @@ -3857,7 +3857,7 @@ void tst_QNetworkReply::ioGetFromHttpsWithSslHandshakeError() QCOMPARE(waitForFinish(reply), int(Failure)); - QCOMPARE(reply->networkError(), QNetworkReply::SslHandshakeFailedError); + QCOMPARE(reply->error(), QNetworkReply::SslHandshakeFailedError); QCOMPARE(sslspy.count(), 0); } #endif @@ -3917,7 +3917,7 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer() QCOMPARE(reply->url(), request.url()); QCOMPARE(spy.count(), 1); - QVERIFY(reply->networkError() != QNetworkReply::NoError); + QVERIFY(reply->error() != QNetworkReply::NoError); } void tst_QNetworkReply::ioGetFromHttpStatus100_data() @@ -3946,7 +3946,7 @@ void tst_QNetworkReply::ioGetFromHttpStatus100() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), statusCode); QVERIFY(reply->rawHeader("bla").isNull()); } @@ -3969,7 +3969,7 @@ void tst_QNetworkReply::ioGetFromHttpNoHeaders() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); } @@ -4408,7 +4408,7 @@ void tst_QNetworkReply::ioGetWithManyProxies() QFETCH(QNetworkReply::NetworkError, expectedError); QEXPECT_FAIL("ftp-on-socks", "QFtp is too limited and won't accept non-FTP proxies", Abort); - QCOMPARE(reply->networkError(), expectedError); + QCOMPARE(reply->error(), expectedError); // Verify that the factory was called properly QCOMPARE(proxyFactory->callCount, 1); @@ -4460,7 +4460,7 @@ void tst_QNetworkReply::ioPutToFileFromFile() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0)); QVERIFY(reply->readAll().isEmpty()); @@ -4493,10 +4493,10 @@ void tst_QNetworkReply::ioPutToFileFromSocket() socketpair.endPoints[0]->close(); QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0)); QVERIFY(reply->readAll().isEmpty()); @@ -4541,10 +4541,10 @@ void tst_QNetworkReply::ioPutToFileFromLocalSocket() QEXPECT_FAIL("", "QTBUG-18385", Abort); #endif QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0)); QVERIFY(reply->readAll().isEmpty()); @@ -4593,7 +4593,7 @@ void tst_QNetworkReply::ioPutToFileFromProcess() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0)); QVERIFY(reply->readAll().isEmpty()); @@ -4627,7 +4627,7 @@ void tst_QNetworkReply::ioPutToFtpFromFile() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0)); QVERIFY(reply->readAll().isEmpty()); @@ -4676,7 +4676,7 @@ void tst_QNetworkReply::ioPutToHttpFromFile() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); // verify that the HTTP status code is 201 Created QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 201); @@ -4691,7 +4691,7 @@ void tst_QNetworkReply::ioPutToHttpFromFile() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok QCOMPARE(reply->readAll(), sourceFile.readAll()); @@ -4717,7 +4717,7 @@ void tst_QNetworkReply::ioPostToHttpFromFile() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); // verify that the HTTP status code is 200 Ok QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); @@ -4807,10 +4807,10 @@ void tst_QNetworkReply::ioPostToHttpFromSocket() this, SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); disconnect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), this, SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*))); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); // verify that the HTTP status code is 200 Ok QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); @@ -4870,10 +4870,10 @@ void tst_QNetworkReply::ioPostToHttpFromSocketSynchronous() QVERIFY(reply->isFinished()); socketpair.endPoints[0]->close(); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); // verify that the HTTP status code is 200 Ok QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); @@ -4993,7 +4993,7 @@ void tst_QNetworkReply::ioPostToHttpNoBufferFlag() this, SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*))); // verify: error code is QNetworkReply::ContentReSendError - QCOMPARE(reply->networkError(), QNetworkReply::ContentReSendError); + QCOMPARE(reply->error(), QNetworkReply::ContentReSendError); } #ifndef QT_NO_SSL @@ -5175,7 +5175,7 @@ void tst_QNetworkReply::ioGetFromBuiltinHttp() << "(it received" << reader.totalBytesRead << "bytes in" << elapsedTime << "ms)"; QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), (qint64)testData.size()); @@ -5411,7 +5411,7 @@ void tst_QNetworkReply::httpCanReadLine() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(reply->canReadLine()); QVERIFY(!reply->readAll().isEmpty()); @@ -5470,7 +5470,7 @@ void tst_QNetworkReply::rateControl() sender.wait(); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(sender.transferRate != -1); int minRate = rate * 1024 * 9 / 10; @@ -5620,11 +5620,11 @@ void tst_QNetworkReply::chaining() QCOMPARE(waitForFinish(putReply), int(Success)); QCOMPARE(getReply->url(), QUrl::fromLocalFile(sourceFile.fileName())); - QCOMPARE(getReply->networkError(), QNetworkReply::NoError); + QCOMPARE(getReply->error(), QNetworkReply::NoError); QCOMPARE(getReply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), sourceFile.size()); QCOMPARE(putReply->url(), url); - QCOMPARE(putReply->networkError(), QNetworkReply::NoError); + QCOMPARE(putReply->error(), QNetworkReply::NoError); QCOMPARE(putReply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0)); QVERIFY(putReply->readAll().isEmpty()); @@ -5695,7 +5695,7 @@ void tst_QNetworkReply::receiveCookiesFromHttp() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok @@ -5727,7 +5727,7 @@ void tst_QNetworkReply::receiveCookiesFromHttpSynchronous() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok @@ -5790,7 +5790,7 @@ void tst_QNetworkReply::sendCookies() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok @@ -5819,7 +5819,7 @@ void tst_QNetworkReply::sendCookiesSynchronous() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok @@ -5912,6 +5912,9 @@ void tst_QNetworkReply::httpProxyCommands() // wait for the finished signal QVERIFY(waitForFinish(reply) != Timeout); + //qDebug() << reply->error() << reply->errorString(); + //qDebug() << proxyServer.receivedData; + // we don't really care if the request succeeded // especially since it won't succeed in the HTTPS case // so just check that the command was correct @@ -5994,6 +5997,8 @@ void tst_QNetworkReply::httpProxyCommandsSynchronous() QVERIFY(reply->isFinished()); // synchronous manager.setProxy(QNetworkProxy()); + //qDebug() << reply->error() << reply->errorString(); + // we don't really care if the request succeeded // especially since it won't succeed in the HTTPS case // so just check that the command was correct @@ -6033,11 +6038,11 @@ void tst_QNetworkReply::proxyChange() QVERIFY(!QTestEventLoop::instance().timeout()); // verify that the replies succeeded - QCOMPARE(reply1->networkError(), QNetworkReply::NoError); + QCOMPARE(reply1->error(), QNetworkReply::NoError); QCOMPARE(reply1->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); QCOMPARE(reply1->size(), 1); - QCOMPARE(reply2->networkError(), QNetworkReply::NoError); + QCOMPARE(reply2->error(), QNetworkReply::NoError); QCOMPARE(reply2->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); QVERIFY(reply2->size() > 1); @@ -6054,7 +6059,7 @@ void tst_QNetworkReply::proxyChange() QCOMPARE(waitForFinish(reply3), int(Failure)); - QVERIFY(int(reply3->networkError()) > 0); + QVERIFY(int(reply3->error()) > 0); } #endif // !QT_NO_NETWORKPROXY @@ -6087,7 +6092,7 @@ void tst_QNetworkReply::authorizationError() QNetworkRequest request(url); QNetworkReplyPtr reply(manager.get(request)); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QSignalSpy errorSpy(reply.data(), SIGNAL(error(QNetworkReply::NetworkError))); QSignalSpy finishedSpy(reply.data(), SIGNAL(finished())); @@ -6099,7 +6104,7 @@ void tst_QNetworkReply::authorizationError() QFETCH(int, finishedSignalCount); QCOMPARE(finishedSpy.count(), finishedSignalCount); QFETCH(int, error); - QCOMPARE(reply->networkError(), QNetworkReply::NetworkError(error)); + QCOMPARE(reply->error(), QNetworkReply::NetworkError(error)); QFETCH(int, httpStatusCode); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), httpStatusCode); @@ -6167,7 +6172,7 @@ void tst_QNetworkReply::httpReUsingConnectionSequential() connect(reply1, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(2); QVERIFY(!QTestEventLoop::instance().timeout()); - QVERIFY(!reply1->networkError()); + QVERIFY(!reply1->error()); int reply1port = server.client->peerPort(); if (doDeleteLater) @@ -6178,7 +6183,7 @@ void tst_QNetworkReply::httpReUsingConnectionSequential() connect(reply2, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(2); QVERIFY(!QTestEventLoop::instance().timeout()); - QVERIFY(!reply2->networkError()); + QVERIFY(!reply2->error()); int reply2port = server.client->peerPort(); // should still be the same object QVERIFY(reply1port > 0); @@ -6201,7 +6206,7 @@ public: public slots: void finishedSlot() { - QVERIFY(!reply1->networkError()); + QVERIFY(!reply1->error()); QFETCH(bool, doDeleteLater); if (doDeleteLater) { @@ -6243,7 +6248,7 @@ void tst_QNetworkReply::httpReUsingConnectionFromFinishedSlot() QVERIFY(!QTestEventLoop::instance().timeout()); QVERIFY(helper.reply2); - QVERIFY(!helper.reply2->networkError()); + QVERIFY(!helper.reply2->error()); QCOMPARE(server.totalConnections, 1); } @@ -6270,7 +6275,7 @@ public slots: requestsFinishedCount++; QNetworkReply *reply = qobject_cast(sender()); - QVERIFY(!reply->networkError()); + QVERIFY(!reply->error()); QCOMPARE(reply->bytesAvailable(), 27906); if (requestsFinishedCount == 60) { @@ -6288,7 +6293,7 @@ public slots: void readyReadSlot() { QNetworkReply *reply = qobject_cast(sender()); - QVERIFY(!reply->networkError()); + QVERIFY(!reply->error()); if (requestsStartedCount_readyRead < 30 && reply->bytesAvailable() > 27906/2) { startOne(); @@ -6350,7 +6355,7 @@ void tst_QNetworkReply::ignoreSslErrorsList() QVERIFY(waitForFinish(reply) != Timeout); QFETCH(QNetworkReply::NetworkError, expectedNetworkError); - QCOMPARE(reply->networkError(), expectedNetworkError); + QCOMPARE(reply->error(), expectedNetworkError); } void tst_QNetworkReply::ignoreSslErrorsListWithSlot_data() @@ -6381,7 +6386,7 @@ void tst_QNetworkReply::ignoreSslErrorsListWithSlot() QVERIFY(waitForFinish(reply) != Timeout); QFETCH(QNetworkReply::NetworkError, expectedNetworkError); - QCOMPARE(reply->networkError(), expectedNetworkError); + QCOMPARE(reply->error(), expectedNetworkError); } void tst_QNetworkReply::sslConfiguration_data() @@ -6460,7 +6465,7 @@ void tst_QNetworkReply::sslConfiguration() QFETCH(bool, works); QNetworkReply::NetworkError expectedError = works ? QNetworkReply::NoError : QNetworkReply::SslHandshakeFailedError; - QCOMPARE(reply->networkError(), expectedError); + QCOMPARE(reply->error(), expectedError); } #ifdef QT_BUILD_INTERNAL @@ -6495,7 +6500,7 @@ void tst_QNetworkReply::sslSessionSharing() connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(20); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); reply->deleteLater(); // now send several requests at the same time, so we open more sockets and reuse the SSL session @@ -6520,7 +6525,7 @@ void tst_QNetworkReply::sslSessionSharingHelperSlot() sslSessionSharingWasUsed = true; QString urlQueryString = reply->url().query(); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); count++; @@ -6561,7 +6566,7 @@ void tst_QNetworkReply::sslSessionSharingFromPersistentSession() connect(warmupReply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(20); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(warmupReply->networkError(), QNetworkReply::NoError); + QCOMPARE(warmupReply->error(), QNetworkReply::NoError); QByteArray sslSession = warmupReply->sslConfiguration().sessionTicket(); QCOMPARE(!sslSession.isEmpty(), sessionPersistenceEnabled); @@ -6589,7 +6594,7 @@ void tst_QNetworkReply::sslSessionSharingFromPersistentSession() connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(20); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); bool sslSessionSharingWasUsedInReply = QSslConfigurationPrivate::peerSessionWasShared( reply->sslConfiguration()); @@ -6643,7 +6648,7 @@ void tst_QNetworkReply::symbianOpenCDataUrlCrash() RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, req, reply)); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), qint64(598)); } @@ -6863,7 +6868,7 @@ void tst_QNetworkReply::getFromHttpIntoBuffer2() connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection); QTestEventLoop::instance().enterLoop(40); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(!QTestEventLoop::instance().timeout()); } @@ -6881,7 +6886,7 @@ void tst_QNetworkReply::getFromHttpIntoBufferCanReadLine() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(reply->canReadLine()); QCOMPARE(reply->read(1), QByteArray("x")); QVERIFY(reply->canReadLine()); @@ -6907,7 +6912,7 @@ void tst_QNetworkReply::ioGetFromHttpWithoutContentLength() QCOMPARE(reply->url(), request.url()); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); } // Is handled somewhere else too, introduced this special test to have it more accessible @@ -6929,7 +6934,7 @@ void tst_QNetworkReply::ioGetFromHttpBrokenChunkedEncoding() QVERIFY(!QTestEventLoop::instance().timeout()); QEXPECT_FAIL(0, "We should close the socket and not just do nothing", Continue); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); } // TODO: @@ -6953,7 +6958,7 @@ void tst_QNetworkReply::qtbug12908compressedHttpReply() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->size(), qint64(16384)); QCOMPARE(reply->readAll(), QByteArray(16384, '\0')); } @@ -6976,7 +6981,7 @@ void tst_QNetworkReply::compressedHttpReplyBrokenGzip() QCOMPARE(waitForFinish(reply), int(Failure)); - QCOMPARE(reply->networkError(), QNetworkReply::ProtocolFailure); + QCOMPARE(reply->error(), QNetworkReply::ProtocolFailure); } // TODO add similar test for FTP @@ -7031,7 +7036,7 @@ void tst_QNetworkReply::getFromUnreachableIp() QCOMPARE(waitForFinish(reply), int(Failure)); - QVERIFY(reply->networkError() != QNetworkReply::NoError); + QVERIFY(reply->error() != QNetworkReply::NoError); } void tst_QNetworkReply::qtbug4121unknownAuthentication() @@ -7055,7 +7060,7 @@ void tst_QNetworkReply::qtbug4121unknownAuthentication() QCOMPARE(finishedSpy.count(), 1); QCOMPARE(errorSpy.count(), 1); - QCOMPARE(reply->networkError(), QNetworkReply::AuthenticationRequiredError); + QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError); } #ifndef QT_NO_NETWORKPROXY @@ -7146,7 +7151,7 @@ void tst_QNetworkReply::authenticationCacheAfterCancel() QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(reply->networkError(), QNetworkReply::ProxyAuthenticationRequiredError); + QCOMPARE(reply->error(), QNetworkReply::ProxyAuthenticationRequiredError); QCOMPARE(authSpy.count(), 0); QCOMPARE(proxyAuthSpy.count(), 1); proxyAuthSpy.clear(); @@ -7160,8 +7165,8 @@ void tst_QNetworkReply::authenticationCacheAfterCancel() QVERIFY(!QTestEventLoop::instance().timeout()); // Work round known quirk in the old test server (danted -v < v1.1.19): - if (reply->networkError() != QNetworkReply::HostNotFoundError) - QCOMPARE(reply->networkError(), QNetworkReply::ProxyAuthenticationRequiredError); + if (reply->error() != QNetworkReply::HostNotFoundError) + QCOMPARE(reply->error(), QNetworkReply::ProxyAuthenticationRequiredError); QCOMPARE(authSpy.count(), 0); QVERIFY(proxyAuthSpy.count() > 0); proxyAuthSpy.clear(); @@ -7187,7 +7192,7 @@ void tst_QNetworkReply::authenticationCacheAfterCancel() QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(reply->networkError(), QNetworkReply::AuthenticationRequiredError); + QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError); QVERIFY(authSpy.count() > 0); authSpy.clear(); if (proxyAuth) { @@ -7203,7 +7208,7 @@ void tst_QNetworkReply::authenticationCacheAfterCancel() QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(reply->networkError(), QNetworkReply::AuthenticationRequiredError); + QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError); QVERIFY(authSpy.count() > 0); authSpy.clear(); if (proxyAuth) { @@ -7221,7 +7226,7 @@ void tst_QNetworkReply::authenticationCacheAfterCancel() QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(authSpy.count() > 0); authSpy.clear(); if (proxyAuth) { @@ -7236,7 +7241,7 @@ void tst_QNetworkReply::authenticationCacheAfterCancel() QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); //should be supplied from cache QCOMPARE(authSpy.count(), 0); authSpy.clear(); @@ -7267,7 +7272,7 @@ void tst_QNetworkReply::authenticationWithDifferentRealm() connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection); QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); helper.httpUserName = "httptest"; helper.httpPassword = "httptest"; @@ -7277,7 +7282,7 @@ void tst_QNetworkReply::authenticationWithDifferentRealm() connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection); QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); } #endif // !QT_NO_NETWORKPROXY @@ -7328,7 +7333,7 @@ void tst_QNetworkReply::qtbug13431replyThrottling() QTestEventLoop::instance().enterLoop(30); QVERIFY(!QTestEventLoop::instance().timeout()); QVERIFY(helper.m_reply->isFinished()); - QCOMPARE(helper.m_reply->networkError(), QNetworkReply::NoError); + QCOMPARE(helper.m_reply->error(), QNetworkReply::NoError); } void tst_QNetworkReply::httpWithNoCredentialUsage() @@ -7377,7 +7382,7 @@ void tst_QNetworkReply::httpWithNoCredentialUsage() QCOMPARE(finishedSpy.count(), 1); QCOMPARE(errorSpy.count(), 1); - QCOMPARE(reply->networkError(), QNetworkReply::AuthenticationRequiredError); + QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError); } } @@ -7393,7 +7398,7 @@ void tst_QNetworkReply::qtbug15311doubleContentLength() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->size(), qint64(3)); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), qint64(3)); QCOMPARE(reply->rawHeader("Content-length"), QByteArray("3, 3")); @@ -7412,7 +7417,7 @@ void tst_QNetworkReply::qtbug18232gzipContentLengthZero() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->size(), qint64(0)); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), qint64(0)); QCOMPARE(reply->readAll(), QByteArray()); @@ -7433,7 +7438,7 @@ void tst_QNetworkReply::qtbug22660gzipNoContentLengthEmptyContent() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->size(), qint64(0)); QVERIFY(!reply->header(QNetworkRequest::ContentLengthHeader).isValid()); QCOMPARE(reply->readAll(), QByteArray()); @@ -7506,7 +7511,7 @@ void tst_QNetworkReply::qtbug27161httpHeaderMayBeDamaged(){ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->size(), qint64(3)); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), qint64(3)); QCOMPARE(reply->rawHeader("Content-length"), QByteArray("3")); @@ -7557,7 +7562,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() { QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->readAll(), QByteArray("GET")); QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false); @@ -7567,7 +7572,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() { QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->readAll(), QByteArray("GET")); QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), true); @@ -7579,7 +7584,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() { QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->rawHeader("Content-length"), QByteArray("4")); QCOMPARE(reply->readAll(), QByteArray("POST")); QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false); @@ -7591,7 +7596,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() { QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->readAll(), QByteArray("GET")); QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false); @@ -7602,7 +7607,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() { QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->readAll(), QByteArray("GET")); QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), true); @@ -7613,7 +7618,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() { QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false); server.clearHeaderParserState(); @@ -7623,7 +7628,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() { QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->readAll(), QByteArray("GET")); QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false); @@ -7634,7 +7639,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() { QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->readAll(), QByteArray("GET")); QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), true); } @@ -7785,7 +7790,7 @@ void tst_QNetworkReply::synchronousRequestSslFailure() QSignalSpy sslErrorsSpy(&manager, SIGNAL(sslErrors(QNetworkReply*,QList))); runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply, 0); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::SslHandshakeFailedError); + QCOMPARE(reply->error(), QNetworkReply::SslHandshakeFailedError); QCOMPARE(sslErrorsSpy.count(), 0); } #endif @@ -7827,14 +7832,14 @@ void tst_QNetworkReply::httpAbort() HttpAbortHelper replyHolder(reply.data()); QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(reply->networkError(), QNetworkReply::OperationCanceledError); + QCOMPARE(reply->error(), QNetworkReply::OperationCanceledError); QVERIFY(reply->isFinished()); // Abort immediately after the get() QNetworkReplyPtr reply2(manager.get(request)); connect(reply2, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); reply2->abort(); - QCOMPARE(reply2->networkError(), QNetworkReply::OperationCanceledError); + QCOMPARE(reply2->error(), QNetworkReply::OperationCanceledError); QVERIFY(reply2->isFinished()); // Abort after the finished() @@ -7845,7 +7850,7 @@ void tst_QNetworkReply::httpAbort() QVERIFY(reply3->isFinished()); reply3->abort(); - QCOMPARE(reply3->networkError(), QNetworkReply::NoError); + QCOMPARE(reply3->error(), QNetworkReply::NoError); } void tst_QNetworkReply::dontInsertPartialContentIntoTheCache() @@ -7892,7 +7897,7 @@ void tst_QNetworkReply::httpUserAgent() QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(server.receivedData.contains("\r\nUser-Agent: abcDEFghi\r\n")); } @@ -7945,7 +7950,7 @@ void tst_QNetworkReply::synchronousAuthenticationCache() QNetworkReplyPtr reply(manager.get(request)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::AuthenticationRequiredError); + QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError); } //2) URL with credentials, we are authenticated @@ -7956,7 +7961,7 @@ void tst_QNetworkReply::synchronousAuthenticationCache() QNetworkReplyPtr reply(manager.get(request)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->readAll().constData(), "OK"); } @@ -7968,7 +7973,7 @@ void tst_QNetworkReply::synchronousAuthenticationCache() QNetworkReplyPtr reply(manager.get(request)); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->readAll().constData(), "OK"); } } @@ -8062,7 +8067,7 @@ void tst_QNetworkReply::ftpAuthentication() runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->networkError(), QNetworkReply::NetworkError(error)); + QCOMPARE(reply->error(), QNetworkReply::NetworkError(error)); } void tst_QNetworkReply::emitErrorForAllReplies() // QTBUG-36890 @@ -8165,7 +8170,7 @@ void tst_QNetworkReply::backgroundRequest() QNetworkSessionPrivate::setUsagePolicies(*session, original); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), error); + QCOMPARE(reply->error(), error); #endif } #endif @@ -8243,7 +8248,7 @@ void tst_QNetworkReply::backgroundRequestInterruption() QNetworkSessionPrivate::setUsagePolicies(*session, original); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), error); + QCOMPARE(reply->error(), error); #endif } #endif @@ -8390,7 +8395,7 @@ void tst_QNetworkReply::putWithRateLimiting() rateLimitedUploadDevice.open(QIODevice::ReadOnly); RUN_REQUEST(runCustomRequest(request, reply,QByteArray("POST"), &rateLimitedUploadDevice)); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); QByteArray uploadedData = reply->readAll(); @@ -8438,7 +8443,7 @@ void tst_QNetworkReply::ioHttpSingleRedirect() // Reply url is set to the redirect url QCOMPARE(reply->url(), redirectUrl); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(validateRedirectedResponseHeaders(reply)); } @@ -8475,7 +8480,7 @@ void tst_QNetworkReply::ioHttpChangeMaxRedirects() QCOMPARE(redSpy.count(), request.maximumRedirectsAllowed()); QCOMPARE(spy.count(), 1); - QCOMPARE(reply->networkError(), QNetworkReply::TooManyRedirectsError); + QCOMPARE(reply->error(), QNetworkReply::TooManyRedirectsError); // Increase max redirects to allow successful completion request.setMaximumRedirectsAllowed(3); @@ -8487,7 +8492,7 @@ void tst_QNetworkReply::ioHttpChangeMaxRedirects() QCOMPARE(redSpy2.count(), 2); QCOMPARE(reply2->url(), server3Url); - QCOMPARE(reply2->networkError(), QNetworkReply::NoError); + QCOMPARE(reply2->error(), QNetworkReply::NoError); QVERIFY(validateRedirectedResponseHeaders(reply2)); } @@ -8545,7 +8550,7 @@ void tst_QNetworkReply::ioHttpRedirectErrors() watchDog.start(5000); QCOMPARE(eventLoop.exec(), int(Failure)); - QCOMPARE(reply->networkError(), error); + QCOMPARE(reply->error(), error); } struct SameOriginRedirector : MiniHttpServer @@ -8703,7 +8708,7 @@ void tst_QNetworkReply::ioHttpRedirectPolicyErrors() QCOMPARE(waitForFinish(reply), int(Failure)); QCOMPARE(spy.count(), 1); - QCOMPARE(reply->networkError(), expectedError); + QCOMPARE(reply->error(), expectedError); } void tst_QNetworkReply::ioHttpUserVerifiedRedirect_data() @@ -8846,7 +8851,7 @@ void tst_QNetworkReply::ioHttpRedirectFromLocalToRemote() QCOMPARE(waitForFinish(reply), int(Success)); QCOMPARE(reply->url(), targetUrl); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size()); QCOMPARE(reply->readAll(), reference.readAll()); } @@ -8965,7 +8970,7 @@ void tst_QNetworkReply::ioHttpRedirectMultipartPost() multiPart->deleteLater(); QCOMPARE(reply->url(), url); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 OK @@ -9352,7 +9357,7 @@ void tst_QNetworkReply::getWithTimeout() QCOMPARE(waitForFinish(reply), int(Success)); QCOMPARE(spy.count(), 0); - QVERIFY(reply->networkError() == QNetworkReply::NoError); + QVERIFY(reply->error() == QNetworkReply::NoError); request.setTransferTimeout(1000); server.stopTransfer = true; @@ -9363,7 +9368,7 @@ void tst_QNetworkReply::getWithTimeout() QCOMPARE(waitForFinish(reply2), int(Failure)); QCOMPARE(spy2.count(), 1); - QVERIFY(reply2->networkError() == QNetworkReply::OperationCanceledError); + QVERIFY(reply2->error() == QNetworkReply::OperationCanceledError); request.setTransferTimeout(0); manager.setTransferTimeout(1000); @@ -9374,7 +9379,7 @@ void tst_QNetworkReply::getWithTimeout() QCOMPARE(waitForFinish(reply3), int(Failure)); QCOMPARE(spy3.count(), 1); - QVERIFY(reply3->networkError() == QNetworkReply::OperationCanceledError); + QVERIFY(reply3->error() == QNetworkReply::OperationCanceledError); manager.setTransferTimeout(0); } @@ -9392,7 +9397,7 @@ void tst_QNetworkReply::postWithTimeout() QCOMPARE(waitForFinish(reply), int(Success)); QCOMPARE(spy.count(), 0); - QVERIFY(reply->networkError() == QNetworkReply::NoError); + QVERIFY(reply->error() == QNetworkReply::NoError); request.setTransferTimeout(1000); server.stopTransfer = true; @@ -9403,7 +9408,7 @@ void tst_QNetworkReply::postWithTimeout() QCOMPARE(waitForFinish(reply2), int(Failure)); QCOMPARE(spy2.count(), 1); - QVERIFY(reply2->networkError() == QNetworkReply::OperationCanceledError); + QVERIFY(reply2->error() == QNetworkReply::OperationCanceledError); request.setTransferTimeout(0); manager.setTransferTimeout(1000); @@ -9414,7 +9419,7 @@ void tst_QNetworkReply::postWithTimeout() QCOMPARE(waitForFinish(reply3), int(Failure)); QCOMPARE(spy3.count(), 1); - QVERIFY(reply3->networkError() == QNetworkReply::OperationCanceledError); + QVERIFY(reply3->error() == QNetworkReply::OperationCanceledError); manager.setTransferTimeout(0); } diff --git a/tests/auto/network/access/spdy/tst_spdy.cpp b/tests/auto/network/access/spdy/tst_spdy.cpp index 66aee8cdcd3..5701f4911cc 100644 --- a/tests/auto/network/access/spdy/tst_spdy.cpp +++ b/tests/auto/network/access/spdy/tst_spdy.cpp @@ -275,7 +275,7 @@ void tst_Spdy::download() QVERIFY(proxyAuthRequiredSpy.count() <= 1); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::SpdyWasUsedAttribute).toBool(), true); QCOMPARE(reply->attribute(QNetworkRequest::ConnectionEncryptedAttribute).toBool(), true); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); @@ -508,7 +508,7 @@ void tst_Spdy::upload() QVERIFY(uploadProgressSpy.count() > 0); QVERIFY(readyReadSpy.count() > 0); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::SpdyWasUsedAttribute).toBool(), true); QCOMPARE(reply->attribute(QNetworkRequest::ConnectionEncryptedAttribute).toBool(), true); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); @@ -591,7 +591,7 @@ void tst_Spdy::errors() QCOMPARE(finishedSpy.count(), 1); QCOMPARE(errorSpy.count(), 1); - QCOMPARE(reply->networkError(), static_cast(expectedReplyError)); + QCOMPARE(reply->error(), static_cast(expectedReplyError)); m_manager.setProxy(QNetworkProxy()); // reset m_manager.clearAccessCache(); // e.g. to get an SSL error we need a new connection @@ -666,7 +666,7 @@ void tst_Spdy::multipleRequests() QByteArray(QSslConfiguration::NextProtocolSpdy3_0)); #endif // QT_NO_OPENSSL - QCOMPARE(replies.at(a)->networkError(), QNetworkReply::NoError); + QCOMPARE(replies.at(a)->error(), QNetworkReply::NoError); QCOMPARE(replies.at(a)->attribute(QNetworkRequest::SpdyWasUsedAttribute).toBool(), true); QCOMPARE(replies.at(a)->attribute(QNetworkRequest::ConnectionEncryptedAttribute).toBool(), true); QCOMPARE(replies.at(a)->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); diff --git a/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp b/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp index 5dce69bd8c8..afdcc825d80 100644 --- a/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp +++ b/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp @@ -149,7 +149,7 @@ public slots: void requestFinished(QNetworkReply *reply) { - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); reply->deleteLater(); } diff --git a/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp index 540e197e096..bcd354ebeec 100644 --- a/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -537,7 +537,7 @@ void tst_qnetworkreply::echoPerformance() connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection); QTestEventLoop::instance().enterLoop(5); QVERIFY(!QTestEventLoop::instance().timeout()); - QVERIFY(reply->networkError() == QNetworkReply::NoError); + QVERIFY(reply->error() == QNetworkReply::NoError); delete reply; } } @@ -567,7 +567,7 @@ void tst_qnetworkreply::preConnectEncrypted() QPair normalResult = runGetRequest(&manager, request); QNetworkReply *normalReply = normalResult.first; QVERIFY(!QTestEventLoop::instance().timeout()); - QVERIFY(normalReply->networkError() == QNetworkReply::NoError); + QVERIFY(normalReply->error() == QNetworkReply::NoError); qint64 normalElapsed = normalResult.second; // clear all caches again @@ -591,7 +591,7 @@ void tst_qnetworkreply::preConnectEncrypted() QPair preConnectResult = runGetRequest(&manager, request); QNetworkReply *preConnectReply = normalResult.first; QVERIFY(!QTestEventLoop::instance().timeout()); - QVERIFY(preConnectReply->networkError() == QNetworkReply::NoError); + QVERIFY(preConnectReply->error() == QNetworkReply::NoError); bool spdyWasUsed = preConnectReply->attribute(QNetworkRequest::SpdyWasUsedAttribute).toBool(); QCOMPARE(spdyEnabled, spdyWasUsed); qint64 preConnectElapsed = preConnectResult.second; @@ -664,7 +664,7 @@ void tst_qnetworkreply::uploadPerformance() QTimer::singleShot(5000, &generator, SLOT(stop())); QTestEventLoop::instance().enterLoop(30); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(!QTestEventLoop::instance().timeout()); } @@ -690,7 +690,7 @@ void tst_qnetworkreply::httpUploadPerformance() reader.exit(); reader.wait(); QVERIFY(reply->isFinished()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(!QTestEventLoop::instance().timeout()); qDebug() << "tst_QNetworkReply::httpUploadPerformance" << elapsed << "msec, " @@ -751,7 +751,7 @@ void tst_qnetworkreply::httpDownloadPerformance() QTime time; time.start(); QTestEventLoop::instance().enterLoop(40); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(!QTestEventLoop::instance().timeout()); qint64 elapsed = time.elapsed(); @@ -833,7 +833,7 @@ void tst_qnetworkreply::httpDownloadPerformanceDownloadBuffer() QBENCHMARK_ONCE { QTestEventLoop::instance().enterLoop(40); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(reply->isFinished()); QVERIFY(!QTestEventLoop::instance().timeout()); } @@ -868,7 +868,7 @@ public slots: } QNetworkReply *reply = qobject_cast(sender()); if (reply) { - QVERIFY(reply->networkError() == QNetworkReply::NoError); + QVERIFY(reply->error() == QNetworkReply::NoError); qDebug() << "time =" << timeOneRequest.elapsed() << "ms"; timeList.append(timeOneRequest.elapsed()); } @@ -923,7 +923,7 @@ void tst_qnetworkreply::runHttpsUploadRequest(const QByteArray &data, const QNet connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(15); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(reply->networkError(), QNetworkReply::NoError); + QCOMPARE(reply->error(), QNetworkReply::NoError); reply->deleteLater(); } @@ -963,7 +963,7 @@ void tst_qnetworkreply::preConnect() QPair normalResult = runGetRequest(&manager, request); QNetworkReply *normalReply = normalResult.first; QVERIFY(!QTestEventLoop::instance().timeout()); - QVERIFY(normalReply->networkError() == QNetworkReply::NoError); + QVERIFY(normalReply->error() == QNetworkReply::NoError); qint64 normalElapsed = normalResult.second; // clear all caches again @@ -983,7 +983,7 @@ void tst_qnetworkreply::preConnect() QPair preConnectResult = runGetRequest(&manager, request); QNetworkReply *preConnectReply = normalResult.first; QVERIFY(!QTestEventLoop::instance().timeout()); - QVERIFY(preConnectReply->networkError() == QNetworkReply::NoError); + QVERIFY(preConnectReply->error() == QNetworkReply::NoError); qint64 preConnectElapsed = preConnectResult.second; qDebug() << request.url().toString() << "full request:" << normalElapsed << "ms, pre-connect request:" << preConnectElapsed << "ms, difference:"