diff --git a/src/network/access/qnetworkrequestfactory.cpp b/src/network/access/qnetworkrequestfactory.cpp index 517adad9996..081ff8ac8f3 100644 --- a/src/network/access/qnetworkrequestfactory.cpp +++ b/src/network/access/qnetworkrequestfactory.cpp @@ -475,6 +475,37 @@ void QNetworkRequestFactory::clearQueryParameters() d->queryParameters.clear(); } +/*! + \since 6.8 + + Sets the priority for any future requests created by this factory to + \a priority. + + The default priority is \l QNetworkRequest::NormalPriority. + + \sa priority(), QNetworkRequest::setPriority() +*/ +void QNetworkRequestFactory::setPriority(QNetworkRequest::Priority priority) +{ + if (d->priority == priority) + return; + d.detach(); + d->priority = priority; +} + +/*! + \since 6.8 + + Returns the priority assigned to any future requests created by this + factory. + + \sa setPriority(), QNetworkRequest::priority() +*/ +QNetworkRequest::Priority QNetworkRequestFactory::priority() const +{ + return d->priority; +} + QNetworkRequestFactoryPrivate::QNetworkRequestFactoryPrivate() = default; @@ -507,6 +538,7 @@ QNetworkRequest QNetworkRequestFactoryPrivate::newRequest(const QUrl &url) const request.setRawHeader("Authorization"_ba, Bearer + bearerToken); request.setTransferTimeout(transferTimeout); + request.setPriority(priority); return request; } diff --git a/src/network/access/qnetworkrequestfactory.h b/src/network/access/qnetworkrequestfactory.h index 6eb439e03e8..ea887ea05b9 100644 --- a/src/network/access/qnetworkrequestfactory.h +++ b/src/network/access/qnetworkrequestfactory.h @@ -74,6 +74,9 @@ public: Q_NETWORK_EXPORT void setQueryParameters(const QUrlQuery &query); Q_NETWORK_EXPORT void clearQueryParameters(); + Q_NETWORK_EXPORT void setPriority(QNetworkRequest::Priority priority); + Q_NETWORK_EXPORT QNetworkRequest::Priority priority() const; + private: #ifndef QT_NO_DEBUG_STREAM friend Q_NETWORK_EXPORT QDebug operator<<(QDebug debug, const QNetworkRequestFactory &reply); diff --git a/src/network/access/qnetworkrequestfactory_p.h b/src/network/access/qnetworkrequestfactory_p.h index 4807e619f3c..e98a1f7bb9d 100644 --- a/src/network/access/qnetworkrequestfactory_p.h +++ b/src/network/access/qnetworkrequestfactory_p.h @@ -44,6 +44,7 @@ public: QString userName; QString password; QUrlQuery queryParameters; + QNetworkRequest::Priority priority = QNetworkRequest::NormalPriority; std::chrono::milliseconds transferTimeout{0}; }; diff --git a/tests/auto/network/access/qnetworkrequestfactory/tst_qnetworkrequestfactory.cpp b/tests/auto/network/access/qnetworkrequestfactory/tst_qnetworkrequestfactory.cpp index 80d9e0a3dde..06e751808e3 100644 --- a/tests/auto/network/access/qnetworkrequestfactory/tst_qnetworkrequestfactory.cpp +++ b/tests/auto/network/access/qnetworkrequestfactory/tst_qnetworkrequestfactory.cpp @@ -26,6 +26,7 @@ private Q_SLOTS: void operators(); void timeout(); void userInfo(); + void priority(); private: const QUrl url1{u"http://foo.io"_s}; @@ -354,5 +355,18 @@ void tst_QNetworkRequestFactory::userInfo() QVERIFY(factory.password().isEmpty()); } +void tst_QNetworkRequestFactory::priority() +{ + QNetworkRequestFactory factory(u"http://example.com"_s); + QCOMPARE(factory.priority(), QNetworkRequest::NormalPriority); + auto request = factory.createRequest("/index.html"); + QCOMPARE(request.priority(), QNetworkRequest::NormalPriority); + + factory.setPriority(QNetworkRequest::HighPriority); + QCOMPARE(factory.priority(), QNetworkRequest::HighPriority); + request = factory.createRequest("/index.html"); + QCOMPARE(request.priority(), QNetworkRequest::HighPriority); +} + QTEST_MAIN(tst_QNetworkRequestFactory) #include "tst_qnetworkrequestfactory.moc"