diff options
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/access/qnetworkreplyhttpimpl.cpp | 12 | ||||
-rw-r--r-- | src/network/access/qnetworkreplyimpl.cpp | 19 |
2 files changed, 26 insertions, 5 deletions
diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp index 54b98ceb78..9aabe4f318 100644 --- a/src/network/access/qnetworkreplyhttpimpl.cpp +++ b/src/network/access/qnetworkreplyhttpimpl.cpp @@ -1536,6 +1536,18 @@ void QNetworkReplyHttpImplPrivate::_q_startOperation() } state = Working; +#ifndef QT_NO_BEARERMANAGEMENT + // Do not start background requests if they are not allowed by session policy + QSharedPointer<QNetworkSession> session(manager->d_func()->networkSession); + QVariant isBackground = request.attribute(QNetworkRequest::BackgroundRequestAttribute, QVariant::fromValue(false)); + if (isBackground.toBool() && session && session->usagePolicies().testFlag(QNetworkSession::NoBackgroundTrafficPolicy)) { + error(QNetworkReply::BackgroundRequestNotAllowedError, + QCoreApplication::translate("QNetworkReply", "Background request not allowed.")); + finished(); + return; + } +#endif + if (!start()) { #ifndef QT_NO_BEARERMANAGEMENT // backend failed to start because the session state is not Connected. diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index 8a66539444..79e922387c 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -90,6 +90,18 @@ void QNetworkReplyImplPrivate::_q_startOperation() return; } +#ifndef QT_NO_BEARERMANAGEMENT + // Do not start background requests if they are not allowed by session policy + QSharedPointer<QNetworkSession> session(manager->d_func()->networkSession); + QVariant isBackground = backend->request().attribute(QNetworkRequest::BackgroundRequestAttribute, QVariant::fromValue(false)); + if (isBackground.toBool() && session && session->usagePolicies().testFlag(QNetworkSession::NoBackgroundTrafficPolicy)) { + error(QNetworkReply::BackgroundRequestNotAllowedError, + QCoreApplication::translate("QNetworkReply", "Background request not allowed.")); + finished(); + return; + } +#endif + if (!backend->start()) { #ifndef QT_NO_BEARERMANAGEMENT // backend failed to start because the session state is not Connected. @@ -97,17 +109,14 @@ void QNetworkReplyImplPrivate::_q_startOperation() // state changes. state = WaitingForSession; - QNetworkSession *session = manager->d_func()->networkSession.data(); - if (session) { Q_Q(QNetworkReplyImpl); - QObject::connect(session, SIGNAL(error(QNetworkSession::SessionError)), + QObject::connect(session.data(), SIGNAL(error(QNetworkSession::SessionError)), q, SLOT(_q_networkSessionFailed())); if (!session->isOpen()) { - session->setSessionProperty(QStringLiteral("ConnectInBackground"), - backend->request().attribute(QNetworkRequest::BackgroundRequestAttribute, QVariant::fromValue(false))); + session->setSessionProperty(QStringLiteral("ConnectInBackground"), isBackground); session->open(); } } else { |