From 523c61571e234865e411d823366dc87d62fe50ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20L=C3=B6sch?= Date: Wed, 10 Aug 2016 16:51:34 +0200 Subject: Introduce QNetworkAccessManager::clearConnectionCache() Sometimes it is desirable to use a new connection but keep already entered user credentials for usability reasons. This is now possible by clearing the connection cache (but keeping the authentication cache). Change-Id: I2f5f64836ce19f81c8525701783a3da823dd468e --- src/network/access/qnetworkaccessmanager.cpp | 25 +++++++++++++++++++--- src/network/access/qnetworkaccessmanager.h | 2 ++ src/network/access/qnetworkaccessmanager_p.h | 3 ++- .../access/qnetworkreply/tst_qnetworkreply.cpp | 3 ++- .../tst_network_remote_stresstest.cpp | 3 ++- .../network_stresstest/tst_network_stresstest.cpp | 3 ++- 6 files changed, 32 insertions(+), 7 deletions(-) diff --git x/qtbase/src/network/access/qnetworkaccessmanager.cpp y/qtbase/src/network/access/qnetworkaccessmanager.cpp index 6d5b2400f1..b763547a15 100644 --- x/qtbase/src/network/access/qnetworkaccessmanager.cpp +++ y/qtbase/src/network/access/qnetworkaccessmanager.cpp @@ -1352,10 +1352,26 @@ QStringList QNetworkAccessManager::supportedSchemesImplementation() const This function is useful for doing auto tests. + \sa clearConnectionCache() */ void QNetworkAccessManager::clearAccessCache() { - QNetworkAccessManagerPrivate::clearCache(this); + QNetworkAccessManagerPrivate::clearAuthenticationCache(this); + QNetworkAccessManagerPrivate::clearConnectionCache(this); +} + +/*! + \since 5.9 + + Flushes the internal cache of network connections. + In contrast to clearAccessCache() the authentication data + is preserved. + + \sa clearAccessCache() +*/ +void QNetworkAccessManager::clearConnectionCache() +{ + QNetworkAccessManagerPrivate::clearConnectionCache(this); } void QNetworkAccessManagerPrivate::_q_replyFinished() @@ -1552,11 +1568,14 @@ QList QNetworkAccessManagerPrivate::queryProxy(const QNetworkProx } #endif -void QNetworkAccessManagerPrivate::clearCache(QNetworkAccessManager *manager) +void QNetworkAccessManagerPrivate::clearAuthenticationCache(QNetworkAccessManager *manager) { - manager->d_func()->objectCache.clear(); manager->d_func()->authenticationManager->clearCache(); +} +void QNetworkAccessManagerPrivate::clearConnectionCache(QNetworkAccessManager *manager) +{ + manager->d_func()->objectCache.clear(); manager->d_func()->destroyThread(); } diff --git x/qtbase/src/network/access/qnetworkaccessmanager.h y/qtbase/src/network/access/qnetworkaccessmanager.h index 4b8c4ddf0e..649013cced 100644 --- x/qtbase/src/network/access/qnetworkaccessmanager.h +++ y/qtbase/src/network/access/qnetworkaccessmanager.h @@ -106,6 +106,8 @@ public: void clearAccessCache(); + void clearConnectionCache(); + #ifndef QT_NO_NETWORKPROXY QNetworkProxy proxy() const; void setProxy(const QNetworkProxy &proxy); diff --git x/qtbase/src/network/access/qnetworkaccessmanager_p.h y/qtbase/src/network/access/qnetworkaccessmanager_p.h index bb4641ab8b..b4b5e6a789 100644 --- x/qtbase/src/network/access/qnetworkaccessmanager_p.h +++ y/qtbase/src/network/access/qnetworkaccessmanager_p.h @@ -202,7 +202,8 @@ public: QNetworkAccessCache objectCache; static inline QNetworkAccessCache *getObjectCache(QNetworkAccessBackend *backend) { return &backend->manager->objectCache; } - Q_AUTOTEST_EXPORT static void clearCache(QNetworkAccessManager *manager); + Q_AUTOTEST_EXPORT static void clearAuthenticationCache(QNetworkAccessManager *manager); + Q_AUTOTEST_EXPORT static void clearConnectionCache(QNetworkAccessManager *manager); #ifndef QT_NO_BEARERMANAGEMENT Q_AUTOTEST_EXPORT static const QWeakPointer getNetworkSession(const QNetworkAccessManager *manager); #endif diff --git x/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp y/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 649278d48b..c555cd8fa0 100644 --- x/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ y/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -6797,7 +6797,8 @@ void tst_QNetworkReply::authenticationCacheAfterCancel() // QTBUG-23136 workaround (needed even with danted v1.1.19): if (proxy.port() == 1081) { #ifdef QT_BUILD_INTERNAL - QNetworkAccessManagerPrivate::clearCache(&manager); + QNetworkAccessManagerPrivate::clearAuthenticationCache(&manager); + QNetworkAccessManagerPrivate::clearConnectionCache(&manager); #else return; #endif diff --git x/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp y/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp index 05ede9da99..99e3d148df 100644 --- x/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp +++ y/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp @@ -147,7 +147,8 @@ void tst_NetworkRemoteStressTest::init() void tst_NetworkRemoteStressTest::clearManager() { #ifdef QT_BUILD_INTERNAL - QNetworkAccessManagerPrivate::clearCache(&manager); + QNetworkAccessManagerPrivate::clearAuthenticationCache(&manager); + QNetworkAccessManagerPrivate::clearConnectionCache(&manager); manager.setProxy(QNetworkProxy()); manager.setCache(0); #endif diff --git x/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp y/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp index e3c76ea11b..d46703c671 100644 --- x/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp +++ y/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp @@ -138,7 +138,8 @@ void tst_NetworkStressTest::init() void tst_NetworkStressTest::clearManager() { #ifdef QT_BUILD_INTERNAL - QNetworkAccessManagerPrivate::clearCache(&manager); + QNetworkAccessManagerPrivate::clearAuthenticationCache(&manager); + QNetworkAccessManagerPrivate::clearConnectionCache(&manager); manager.setProxy(QNetworkProxy()); manager.setCache(0); #endif -- 2.11.0