From 856da3ee19a6c0f6c88ecc77b69ad41b4d4e6ffa Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 5 Apr 2011 16:24:01 +0200 Subject: QNAM: Improve internal authenticationRequired() Make it independant from the backend architecture to improve refactorability. Reviewed-by: Peter Hartmann --- src/network/access/qnetworkaccessbackend.cpp | 2 +- src/network/access/qnetworkaccessmanager.cpp | 22 +++++++++++----------- src/network/access/qnetworkaccessmanager_p.h | 6 +++++- 3 files changed, 17 insertions(+), 13 deletions(-) (limited to 'src/network') diff --git a/src/network/access/qnetworkaccessbackend.cpp b/src/network/access/qnetworkaccessbackend.cpp index 6220abed02..2847cd5a50 100644 --- a/src/network/access/qnetworkaccessbackend.cpp +++ b/src/network/access/qnetworkaccessbackend.cpp @@ -321,7 +321,7 @@ void QNetworkAccessBackend::proxyAuthenticationRequired(const QNetworkProxy &pro void QNetworkAccessBackend::authenticationRequired(QAuthenticator *authenticator) { - manager->authenticationRequired(this, authenticator); + manager->authenticationRequired(authenticator, reply->q_func(), synchronous, reply->url, &reply->urlForLastAuthentication); } void QNetworkAccessBackend::metaDataChanged() diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 5a7521e33e..a809583550 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -1055,35 +1055,35 @@ void QNetworkAccessManagerPrivate::createCookieJar() const } } -void QNetworkAccessManagerPrivate::authenticationRequired(QNetworkAccessBackend *backend, - QAuthenticator *authenticator) +void QNetworkAccessManagerPrivate::authenticationRequired(QAuthenticator *authenticator, + QNetworkReply *reply, + bool synchronous, + QUrl &url, + QUrl *urlForLastAuthentication) { Q_Q(QNetworkAccessManager); - // FIXME: Add support for domains (i.e., the leading path) - QUrl url = backend->reply->url; - // don't try the cache for the same URL twice in a row // being called twice for the same URL means the authentication failed // also called when last URL is empty, e.g. on first call - if (backend->reply->urlForLastAuthentication.isEmpty() - || url != backend->reply->urlForLastAuthentication) { + if (urlForLastAuthentication->isEmpty() + || url != *urlForLastAuthentication) { QNetworkAuthenticationCredential cred = authenticationManager->fetchCachedCredentials(url, authenticator); if (!cred.isNull()) { authenticator->setUser(cred.user); authenticator->setPassword(cred.password); - backend->reply->urlForLastAuthentication = url; + *urlForLastAuthentication = url; return; } } // if we emit a signal here in synchronous mode, the user might spin // an event loop, which might recurse and lead to problems - if (backend->isSynchronous()) + if (synchronous) return; - backend->reply->urlForLastAuthentication = url; - emit q->authenticationRequired(backend->reply->q_func(), authenticator); + *urlForLastAuthentication = url; + emit q->authenticationRequired(reply, authenticator); authenticationManager->cacheCredentials(url, authenticator); } diff --git a/src/network/access/qnetworkaccessmanager_p.h b/src/network/access/qnetworkaccessmanager_p.h index f64cc4dc79..a8237b30d2 100644 --- a/src/network/access/qnetworkaccessmanager_p.h +++ b/src/network/access/qnetworkaccessmanager_p.h @@ -94,7 +94,11 @@ public: QNetworkReply *postProcess(QNetworkReply *reply); void createCookieJar() const; - void authenticationRequired(QNetworkAccessBackend *backend, QAuthenticator *authenticator); + void authenticationRequired(QAuthenticator *authenticator, + QNetworkReply *reply, + bool synchronous, + QUrl &url, + QUrl *urlForLastAuthentication); void cacheCredentials(const QUrl &url, const QAuthenticator *auth); QNetworkAuthenticationCredential *fetchCachedCredentials(const QUrl &url, const QAuthenticator *auth = 0); -- cgit v1.2.3