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
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
bb10
Sebastian Lösch 2016-08-10 16:51:34 +02:00 committed by André Klitzing
parent abb47fc680
commit 14bff46df4
6 changed files with 33 additions and 8 deletions

View File

@ -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()->authenticationManager->clearCache();
}
void QNetworkAccessManagerPrivate::clearConnectionCache(QNetworkAccessManager *manager)
{
manager->d_func()->objectCache.clear();
manager->d_func()->authenticationManager->clearCache();
manager->d_func()->destroyThread();
}

View File

@ -106,6 +106,8 @@ public:
void clearAccessCache();
void clearConnectionCache();
#ifndef QT_NO_NETWORKPROXY
QNetworkProxy proxy() const;
void setProxy(const QNetworkProxy &proxy);

View File

@ -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

View File

@ -6812,7 +6812,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

View File

@ -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

View File

@ -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