diff options
Diffstat (limited to 'src/network/access/qnetworkreplyhttpimpl.cpp')
-rw-r--r-- | src/network/access/qnetworkreplyhttpimpl.cpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp index 0ac3e26ada..e2d75c06f8 100644 --- a/src/network/access/qnetworkreplyhttpimpl.cpp +++ b/src/network/access/qnetworkreplyhttpimpl.cpp @@ -1068,7 +1068,7 @@ void QNetworkReplyHttpImplPrivate::replyDownloadMetaData downloadZerocopyBuffer = downloadBufferPointer.data(); downloadBufferCurrentSize = 0; downloadBufferMaximumSize = contentLength; - q->setAttribute(QNetworkRequest::DownloadBufferAttribute, qVariantFromValue<QSharedPointer<char> > (downloadBufferPointer)); + q->setAttribute(QNetworkRequest::DownloadBufferAttribute, QVariant::fromValue<QSharedPointer<char> > (downloadBufferPointer)); } q->setAttribute(QNetworkRequest::HttpPipeliningWasUsedAttribute, pu); @@ -1521,6 +1521,9 @@ bool QNetworkReplyHttpImplPrivate::start() if (managerPrivate->networkSession->isOpen() && managerPrivate->networkSession->state() == QNetworkSession::Connected) { + Q_Q(QNetworkReplyHttpImpl); + QObject::connect(managerPrivate->networkSession.data(), SIGNAL(usagePoliciesChanged(QNetworkSession::UsagePolicies)), + q, SLOT(_q_networkSessionUsagePoliciesChanged(QNetworkSession::UsagePolicies))); postRequest(); return true; } @@ -1565,8 +1568,10 @@ void QNetworkReplyHttpImplPrivate::_q_startOperation() QObject::connect(session, SIGNAL(error(QNetworkSession::SessionError)), q, SLOT(_q_networkSessionFailed())); - if (!session->isOpen()) + if (!session->isOpen()) { + session->setSessionProperty(QStringLiteral("ConnectInBackground"), isBackground); session->open(); + } } else { qWarning("Backend is waiting for QNetworkSession to connect, but there is none!"); QMetaObject::invokeMethod(q, "_q_error", synchronous ? Qt::DirectConnection : Qt::QueuedConnection, @@ -1762,6 +1767,23 @@ void QNetworkReplyHttpImplPrivate::_q_networkSessionFailed() finished(); } } + +void QNetworkReplyHttpImplPrivate::_q_networkSessionUsagePoliciesChanged(QNetworkSession::UsagePolicies newPolicies) +{ + if (request.attribute(QNetworkRequest::BackgroundRequestAttribute).toBool()) { + if (newPolicies & QNetworkSession::NoBackgroundTrafficPolicy) { + // Abort waiting and working replies. + if (state == WaitingForSession || state == Working) { + state = Working; + error(QNetworkReply::BackgroundRequestNotAllowedError, + QCoreApplication::translate("QNetworkReply", "Background request not allowed.")); + finished(); + } + // ### if canResume(), then we could resume automatically + } + } + +} #endif @@ -1974,10 +1996,7 @@ void QNetworkReplyHttpImplPrivate::createCache() { // check if we can save and if we're allowed to if (!managerPrivate->networkCache - || !request.attribute(QNetworkRequest::CacheSaveControlAttribute, true).toBool() - || request.attribute(QNetworkRequest::CacheLoadControlAttribute, - QNetworkRequest::PreferNetwork).toInt() - == QNetworkRequest::AlwaysNetwork) + || !request.attribute(QNetworkRequest::CacheSaveControlAttribute, true).toBool()) return; cacheEnabled = true; } |