AusweisApp2/patches/qt-Introduce-QNetworkAccess...

141 lines
6.2 KiB
Diff

From 523c61571e234865e411d823366dc87d62fe50ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20L=C3=B6sch?= <Sebastian.Loesch@governikus.de>
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<QNetworkProxy> 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<const QNetworkSession> 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