From 8b6838347de2d065f96d7f1c519edaaf01701014 Mon Sep 17 00:00:00 2001 From: David Faure Date: Fri, 16 Mar 2018 13:27:21 +0100 Subject: [PATCH] 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 --- src/network/access/qnetworkreplyimpl.cpp | 1 + .../qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index 54930a351a..a794b492e7 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -1125,6 +1125,7 @@ QDisabledNetworkReply::QDisabledNetworkReply(QObject *parent, setRequest(req); setUrl(req.url()); setOperation(op); + setFinished(true); qRegisterMetaType(); diff --git a/tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp b/tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp index bc2e2822cb..120b1c4b66 100644 --- a/tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp +++ b/tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp @@ -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::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);