QNetworkReply: fix isFinished() for disabled replies

When network access is disabled, every QNAM request returns a
QDisabledNetworkReply instance, which emits error and finished
immediately. However isFinished() was still false, which could confuse
application code.

Change-Id: Ifd43c86364b11a9583a38fde536e6c09c109b55f
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
bb10
David Faure 2018-03-16 13:27:21 +01:00
parent 23fd4f7171
commit 8b6838347d
2 changed files with 10 additions and 0 deletions

View File

@ -1125,6 +1125,7 @@ QDisabledNetworkReply::QDisabledNetworkReply(QObject *parent,
setRequest(req);
setUrl(req.url());
setOperation(op);
setFinished(true);
qRegisterMetaType<QNetworkReply::NetworkError>();

View File

@ -84,6 +84,15 @@ void tst_QNetworkAccessManager::networkAccessible()
QNetworkAccessManager::NotAccessible);
QCOMPARE(manager.networkAccessible(), QNetworkAccessManager::NotAccessible);
// When network is not accessible, all requests fail
QNetworkReply *reply = manager.get(QNetworkRequest(QUrl("http://www.example.org")));
QSignalSpy finishedSpy(reply, &QNetworkReply::finished);
QSignalSpy errorSpy(reply, QOverload<QNetworkReply::NetworkError>::of(&QNetworkReply::error));
QVERIFY(finishedSpy.wait());
QCOMPARE(reply->isFinished(), true);
QCOMPARE(reply->errorString(), QStringLiteral("Network access is disabled."));
QCOMPARE(errorSpy.count(), 1);
manager.setNetworkAccessible(QNetworkAccessManager::Accessible);
QCOMPARE(spy.count(), expectedCount);