diff options
Diffstat (limited to 'src/network/access')
26 files changed, 150 insertions, 118 deletions
diff --git a/src/network/access/qhttpmultipart_p.h b/src/network/access/qhttpmultipart_p.h index f00883afd0..307843ea27 100644 --- a/src/network/access/qhttpmultipart_p.h +++ b/src/network/access/qhttpmultipart_p.h @@ -117,30 +117,30 @@ public: ~QHttpMultiPartIODevice() { } - virtual bool atEnd() const { + virtual bool atEnd() const Q_DECL_OVERRIDE { return readPointer == size(); } - virtual qint64 bytesAvailable() const { + virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE { return size() - readPointer; } - virtual void close() { + virtual void close() Q_DECL_OVERRIDE { readPointer = 0; partOffsets.clear(); deviceSize = -1; QIODevice::close(); } - virtual qint64 bytesToWrite() const { + virtual qint64 bytesToWrite() const Q_DECL_OVERRIDE { return 0; } - virtual qint64 size() const; - virtual bool isSequential() const; - virtual bool reset(); - virtual qint64 readData(char *data, qint64 maxSize); - virtual qint64 writeData(const char *data, qint64 maxSize); + virtual qint64 size() const Q_DECL_OVERRIDE; + virtual bool isSequential() const Q_DECL_OVERRIDE; + virtual bool reset() Q_DECL_OVERRIDE; + virtual qint64 readData(char *data, qint64 maxSize) Q_DECL_OVERRIDE; + virtual qint64 writeData(const char *data, qint64 maxSize) Q_DECL_OVERRIDE; QHttpMultiPartPrivate *multiPart; qint64 readPointer; diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 365ce55f2b..6caf118c59 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -385,11 +385,12 @@ void QHttpNetworkConnectionPrivate::copyCredentials(int fromChannel, QAuthentica Q_ASSERT(auth); // NTLM is a multi phase authentication. Copying credentials between authenticators would mess things up. - if (!isProxy && channels[fromChannel].authMethod == QAuthenticatorPrivate::Ntlm) - return; - if (isProxy && channels[fromChannel].proxyAuthMethod == QAuthenticatorPrivate::Ntlm) - return; - + if (fromChannel >= 0) { + if (!isProxy && channels[fromChannel].authMethod == QAuthenticatorPrivate::Ntlm) + return; + if (isProxy && channels[fromChannel].proxyAuthMethod == QAuthenticatorPrivate::Ntlm) + return; + } // select another channel QAuthenticator* otherAuth = 0; diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index e34c15d729..a65f9018fe 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -79,6 +79,7 @@ QT_BEGIN_NAMESPACE class QHttpNetworkRequest; class QHttpNetworkReply; +class QHttpThreadDelegate; class QByteArray; class QHostInfo; @@ -148,6 +149,7 @@ public: private: Q_DECLARE_PRIVATE(QHttpNetworkConnection) Q_DISABLE_COPY(QHttpNetworkConnection) + friend class QHttpThreadDelegate; friend class QHttpNetworkReply; friend class QHttpNetworkReplyPrivate; friend class QHttpNetworkConnectionChannel; diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h index 6163f6c789..7a13358a4b 100644 --- a/src/network/access/qhttpnetworkreply_p.h +++ b/src/network/access/qhttpnetworkreply_p.h @@ -82,18 +82,18 @@ public: explicit QHttpNetworkReply(const QUrl &url = QUrl(), QObject *parent = 0); virtual ~QHttpNetworkReply(); - QUrl url() const; - void setUrl(const QUrl &url); + QUrl url() const Q_DECL_OVERRIDE; + void setUrl(const QUrl &url) Q_DECL_OVERRIDE; - int majorVersion() const; - int minorVersion() const; + int majorVersion() const Q_DECL_OVERRIDE; + int minorVersion() const Q_DECL_OVERRIDE; - qint64 contentLength() const; - void setContentLength(qint64 length); + qint64 contentLength() const Q_DECL_OVERRIDE; + void setContentLength(qint64 length) Q_DECL_OVERRIDE; - QList<QPair<QByteArray, QByteArray> > header() const; - QByteArray headerField(const QByteArray &name, const QByteArray &defaultValue = QByteArray()) const; - void setHeaderField(const QByteArray &name, const QByteArray &data); + QList<QPair<QByteArray, QByteArray> > header() const Q_DECL_OVERRIDE; + QByteArray headerField(const QByteArray &name, const QByteArray &defaultValue = QByteArray()) const Q_DECL_OVERRIDE; + void setHeaderField(const QByteArray &name, const QByteArray &data) Q_DECL_OVERRIDE; void parseHeader(const QByteArray &header); // mainly for testing QHttpNetworkRequest request() const; diff --git a/src/network/access/qhttpnetworkrequest_p.h b/src/network/access/qhttpnetworkrequest_p.h index d6683afa20..f39f3c7b6f 100644 --- a/src/network/access/qhttpnetworkrequest_p.h +++ b/src/network/access/qhttpnetworkrequest_p.h @@ -81,18 +81,18 @@ public: QHttpNetworkRequest &operator=(const QHttpNetworkRequest &other); bool operator==(const QHttpNetworkRequest &other) const; - QUrl url() const; - void setUrl(const QUrl &url); + QUrl url() const Q_DECL_OVERRIDE; + void setUrl(const QUrl &url) Q_DECL_OVERRIDE; - int majorVersion() const; - int minorVersion() const; + int majorVersion() const Q_DECL_OVERRIDE; + int minorVersion() const Q_DECL_OVERRIDE; - qint64 contentLength() const; - void setContentLength(qint64 length); + qint64 contentLength() const Q_DECL_OVERRIDE; + void setContentLength(qint64 length) Q_DECL_OVERRIDE; - QList<QPair<QByteArray, QByteArray> > header() const; - QByteArray headerField(const QByteArray &name, const QByteArray &defaultValue = QByteArray()) const; - void setHeaderField(const QByteArray &name, const QByteArray &data); + QList<QPair<QByteArray, QByteArray> > header() const Q_DECL_OVERRIDE; + QByteArray headerField(const QByteArray &name, const QByteArray &defaultValue = QByteArray()) const Q_DECL_OVERRIDE; + void setHeaderField(const QByteArray &name, const QByteArray &data) Q_DECL_OVERRIDE; Operation operation() const; void setOperation(Operation operation); diff --git a/src/network/access/qhttpthreaddelegate.cpp b/src/network/access/qhttpthreaddelegate.cpp index 06d62fbbcb..e31f23c18c 100644 --- a/src/network/access/qhttpthreaddelegate.cpp +++ b/src/network/access/qhttpthreaddelegate.cpp @@ -187,7 +187,7 @@ public: setShareable(true); } - virtual void dispose() + virtual void dispose() Q_DECL_OVERRIDE { #if 0 // sample code; do this right with the API Q_ASSERT(!isWorking()); @@ -328,6 +328,16 @@ void QHttpThreadDelegate::startRequest() // cache the QHttpNetworkConnection corresponding to this cache key connections.localData()->addEntry(cacheKey, httpConnection); + } else { + if (httpRequest.withCredentials()) { + QNetworkAuthenticationCredential credential = authenticationManager->fetchCachedCredentials(httpRequest.url(), 0); + if (!credential.user.isEmpty() && !credential.password.isEmpty()) { + QAuthenticator auth; + auth.setUser(credential.user); + auth.setPassword(credential.password); + httpConnection->d_func()->copyCredentials(-1, &auth, false); + } + } } diff --git a/src/network/access/qhttpthreaddelegate_p.h b/src/network/access/qhttpthreaddelegate_p.h index 16610828cb..b1367fec0c 100644 --- a/src/network/access/qhttpthreaddelegate_p.h +++ b/src/network/access/qhttpthreaddelegate_p.h @@ -202,7 +202,7 @@ public: { } - const char* readPointer(qint64 maximumLength, qint64 &len) + const char* readPointer(qint64 maximumLength, qint64 &len) Q_DECL_OVERRIDE { if (m_amount > 0) { len = m_amount; @@ -222,7 +222,7 @@ public: return 0; } - bool advanceReadPointer(qint64 a) + bool advanceReadPointer(qint64 a) Q_DECL_OVERRIDE { if (m_data == 0) return false; @@ -238,7 +238,7 @@ public: return true; } - bool atEnd() + bool atEnd() Q_DECL_OVERRIDE { if (m_amount > 0) return false; @@ -246,7 +246,7 @@ public: return m_atEnd; } - bool reset() + bool reset() Q_DECL_OVERRIDE { m_amount = 0; m_data = 0; @@ -257,7 +257,7 @@ public: return b; } - qint64 size() + qint64 size() Q_DECL_OVERRIDE { return m_size; } diff --git a/src/network/access/qnetworkaccessauthenticationmanager.cpp b/src/network/access/qnetworkaccessauthenticationmanager.cpp index c8ba8ae978..622ec6c082 100644 --- a/src/network/access/qnetworkaccessauthenticationmanager.cpp +++ b/src/network/access/qnetworkaccessauthenticationmanager.cpp @@ -89,7 +89,7 @@ public: } } - virtual void dispose() { delete this; } + virtual void dispose() Q_DECL_OVERRIDE { delete this; } }; #ifndef QT_NO_NETWORKPROXY diff --git a/src/network/access/qnetworkaccesscache_p.h b/src/network/access/qnetworkaccesscache_p.h index 171c2cda86..66b2e509bf 100644 --- a/src/network/access/qnetworkaccesscache_p.h +++ b/src/network/access/qnetworkaccesscache_p.h @@ -99,7 +99,7 @@ signals: void entryReady(QNetworkAccessCache::CacheableObject *); protected: - void timerEvent(QTimerEvent *); + void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE; private: // idea copied from qcache.h diff --git a/src/network/access/qnetworkaccesscachebackend_p.h b/src/network/access/qnetworkaccesscachebackend_p.h index f298b84471..c91e5a9206 100644 --- a/src/network/access/qnetworkaccesscachebackend_p.h +++ b/src/network/access/qnetworkaccesscachebackend_p.h @@ -58,12 +58,12 @@ public: QNetworkAccessCacheBackend(); ~QNetworkAccessCacheBackend(); - void open(); - void closeDownstreamChannel(); + void open() Q_DECL_OVERRIDE; + void closeDownstreamChannel() Q_DECL_OVERRIDE; void closeUpstreamChannel(); void upstreamReadyRead(); - void downstreamReadyWrite(); + void downstreamReadyWrite() Q_DECL_OVERRIDE; private: bool sendCacheContents(); diff --git a/src/network/access/qnetworkaccessdebugpipebackend_p.h b/src/network/access/qnetworkaccessdebugpipebackend_p.h index da8cc9a8d2..cb5a12722f 100644 --- a/src/network/access/qnetworkaccessdebugpipebackend_p.h +++ b/src/network/access/qnetworkaccessdebugpipebackend_p.h @@ -61,10 +61,10 @@ public: QNetworkAccessDebugPipeBackend(); virtual ~QNetworkAccessDebugPipeBackend(); - virtual void open(); - virtual void closeDownstreamChannel(); + virtual void open() Q_DECL_OVERRIDE; + virtual void closeDownstreamChannel() Q_DECL_OVERRIDE; - virtual void downstreamReadyWrite(); + virtual void downstreamReadyWrite() Q_DECL_OVERRIDE; protected: void pushFromSocketToDownstream(); @@ -96,7 +96,7 @@ class QNetworkAccessDebugPipeBackendFactory: public QNetworkAccessBackendFactory public: virtual QStringList supportedSchemes() const Q_DECL_OVERRIDE; virtual QNetworkAccessBackend *create(QNetworkAccessManager::Operation op, - const QNetworkRequest &request) const; + const QNetworkRequest &request) const Q_DECL_OVERRIDE; }; #endif // QT_BUILD_INTERNAL diff --git a/src/network/access/qnetworkaccessfilebackend_p.h b/src/network/access/qnetworkaccessfilebackend_p.h index e0fe148aa0..3109bb55e7 100644 --- a/src/network/access/qnetworkaccessfilebackend_p.h +++ b/src/network/access/qnetworkaccessfilebackend_p.h @@ -59,10 +59,10 @@ public: QNetworkAccessFileBackend(); virtual ~QNetworkAccessFileBackend(); - virtual void open(); - virtual void closeDownstreamChannel(); + virtual void open() Q_DECL_OVERRIDE; + virtual void closeDownstreamChannel() Q_DECL_OVERRIDE; - virtual void downstreamReadyWrite(); + virtual void downstreamReadyWrite() Q_DECL_OVERRIDE; public slots: void uploadReadyReadSlot(); @@ -82,7 +82,7 @@ class QNetworkAccessFileBackendFactory: public QNetworkAccessBackendFactory public: virtual QStringList supportedSchemes() const Q_DECL_OVERRIDE; virtual QNetworkAccessBackend *create(QNetworkAccessManager::Operation op, - const QNetworkRequest &request) const; + const QNetworkRequest &request) const Q_DECL_OVERRIDE; }; QT_END_NAMESPACE diff --git a/src/network/access/qnetworkaccessftpbackend.cpp b/src/network/access/qnetworkaccessftpbackend.cpp index 317d9f90d5..60dcf0f49e 100644 --- a/src/network/access/qnetworkaccessftpbackend.cpp +++ b/src/network/access/qnetworkaccessftpbackend.cpp @@ -90,7 +90,7 @@ public: setShareable(false); } - void dispose() + void dispose() Q_DECL_OVERRIDE { connect(this, SIGNAL(done(bool)), this, SLOT(deleteLater())); close(); diff --git a/src/network/access/qnetworkaccessftpbackend_p.h b/src/network/access/qnetworkaccessftpbackend_p.h index 0371c456f3..d49ed2afdf 100644 --- a/src/network/access/qnetworkaccessftpbackend_p.h +++ b/src/network/access/qnetworkaccessftpbackend_p.h @@ -77,10 +77,10 @@ public: QNetworkAccessFtpBackend(); virtual ~QNetworkAccessFtpBackend(); - virtual void open(); - virtual void closeDownstreamChannel(); + virtual void open() Q_DECL_OVERRIDE; + virtual void closeDownstreamChannel() Q_DECL_OVERRIDE; - virtual void downstreamReadyWrite(); + virtual void downstreamReadyWrite() Q_DECL_OVERRIDE; enum CacheCleanupMode { ReleaseCachedConnection, @@ -110,7 +110,7 @@ class QNetworkAccessFtpBackendFactory: public QNetworkAccessBackendFactory public: virtual QStringList supportedSchemes() const Q_DECL_OVERRIDE; virtual QNetworkAccessBackend *create(QNetworkAccessManager::Operation op, - const QNetworkRequest &request) const; + const QNetworkRequest &request) const Q_DECL_OVERRIDE; }; QT_END_NAMESPACE diff --git a/src/network/access/qnetworkdiskcache.h b/src/network/access/qnetworkdiskcache.h index 8984c640e7..426c71b6d6 100644 --- a/src/network/access/qnetworkdiskcache.h +++ b/src/network/access/qnetworkdiskcache.h @@ -56,18 +56,18 @@ public: qint64 maximumCacheSize() const; void setMaximumCacheSize(qint64 size); - qint64 cacheSize() const; - QNetworkCacheMetaData metaData(const QUrl &url); - void updateMetaData(const QNetworkCacheMetaData &metaData); - QIODevice *data(const QUrl &url); - bool remove(const QUrl &url); - QIODevice *prepare(const QNetworkCacheMetaData &metaData); - void insert(QIODevice *device); + qint64 cacheSize() const Q_DECL_OVERRIDE; + QNetworkCacheMetaData metaData(const QUrl &url) Q_DECL_OVERRIDE; + void updateMetaData(const QNetworkCacheMetaData &metaData) Q_DECL_OVERRIDE; + QIODevice *data(const QUrl &url) Q_DECL_OVERRIDE; + bool remove(const QUrl &url) Q_DECL_OVERRIDE; + QIODevice *prepare(const QNetworkCacheMetaData &metaData) Q_DECL_OVERRIDE; + void insert(QIODevice *device) Q_DECL_OVERRIDE; QNetworkCacheMetaData fileMetaData(const QString &fileName) const; public Q_SLOTS: - void clear(); + void clear() Q_DECL_OVERRIDE; protected: virtual qint64 expire(); diff --git a/src/network/access/qnetworkreply.cpp b/src/network/access/qnetworkreply.cpp index 18ff05fcd7..d9b3acdd92 100644 --- a/src/network/access/qnetworkreply.cpp +++ b/src/network/access/qnetworkreply.cpp @@ -41,6 +41,7 @@ const int QNetworkReplyPrivate::progressSignalInterval = 100; QNetworkReplyPrivate::QNetworkReplyPrivate() : readBufferMaxSize(0), + emitAllUploadProgressSignals(false), operation(QNetworkAccessManager::UnknownOperation), errorCode(QNetworkReply::NoError) , isFinished(false) diff --git a/src/network/access/qnetworkreply.h b/src/network/access/qnetworkreply.h index 4a32131775..453116ea0e 100644 --- a/src/network/access/qnetworkreply.h +++ b/src/network/access/qnetworkreply.h @@ -104,8 +104,8 @@ public: ~QNetworkReply(); // reimplemented from QIODevice - virtual void close(); - virtual bool isSequential() const; + virtual void close() Q_DECL_OVERRIDE; + virtual bool isSequential() const Q_DECL_OVERRIDE; // like QAbstractSocket: qint64 readBufferSize() const; @@ -158,7 +158,7 @@ Q_SIGNALS: protected: explicit QNetworkReply(QObject *parent = 0); QNetworkReply(QNetworkReplyPrivate &dd, QObject *parent); - virtual qint64 writeData(const char *data, qint64 len); + virtual qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE; void setOperation(QNetworkAccessManager::Operation operation); void setRequest(const QNetworkRequest &request); diff --git a/src/network/access/qnetworkreply_p.h b/src/network/access/qnetworkreply_p.h index 6a68ecfea3..1d7d027954 100644 --- a/src/network/access/qnetworkreply_p.h +++ b/src/network/access/qnetworkreply_p.h @@ -74,6 +74,7 @@ public: qint64 readBufferMaxSize; QElapsedTimer downloadProgressSignalChoke; QElapsedTimer uploadProgressSignalChoke; + bool emitAllUploadProgressSignals; const static int progressSignalInterval; QNetworkAccessManager::Operation operation; QNetworkReply::NetworkError errorCode; diff --git a/src/network/access/qnetworkreplydataimpl_p.h b/src/network/access/qnetworkreplydataimpl_p.h index 469203019a..bae3e58faf 100644 --- a/src/network/access/qnetworkreplydataimpl_p.h +++ b/src/network/access/qnetworkreplydataimpl_p.h @@ -60,15 +60,15 @@ class QNetworkReplyDataImpl: public QNetworkReply public: QNetworkReplyDataImpl(QObject *parent, const QNetworkRequest &req, const QNetworkAccessManager::Operation op); ~QNetworkReplyDataImpl(); - virtual void abort(); + virtual void abort() Q_DECL_OVERRIDE; // reimplemented from QNetworkReply - virtual void close(); - virtual qint64 bytesAvailable() const; - virtual bool isSequential () const; - qint64 size() const; + virtual void close() Q_DECL_OVERRIDE; + virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE; + virtual bool isSequential () const Q_DECL_OVERRIDE; + qint64 size() const Q_DECL_OVERRIDE; - virtual qint64 readData(char *data, qint64 maxlen); + virtual qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE; Q_DECLARE_PRIVATE(QNetworkReplyDataImpl) }; diff --git a/src/network/access/qnetworkreplyfileimpl_p.h b/src/network/access/qnetworkreplyfileimpl_p.h index 715a48d508..b4526d0bf5 100644 --- a/src/network/access/qnetworkreplyfileimpl_p.h +++ b/src/network/access/qnetworkreplyfileimpl_p.h @@ -61,15 +61,15 @@ class QNetworkReplyFileImpl: public QNetworkReply public: QNetworkReplyFileImpl(QObject *parent, const QNetworkRequest &req, const QNetworkAccessManager::Operation op); ~QNetworkReplyFileImpl(); - virtual void abort(); + virtual void abort() Q_DECL_OVERRIDE; // reimplemented from QNetworkReply - virtual void close(); - virtual qint64 bytesAvailable() const; - virtual bool isSequential () const; - qint64 size() const; + virtual void close() Q_DECL_OVERRIDE; + virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE; + virtual bool isSequential () const Q_DECL_OVERRIDE; + qint64 size() const Q_DECL_OVERRIDE; - virtual qint64 readData(char *data, qint64 maxlen); + virtual qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE; Q_DECLARE_PRIVATE(QNetworkReplyFileImpl) }; diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp index 836b3c3fa4..968342c7bd 100644 --- a/src/network/access/qnetworkreplyhttpimpl.cpp +++ b/src/network/access/qnetworkreplyhttpimpl.cpp @@ -754,6 +754,9 @@ void QNetworkReplyHttpImplPrivate::postRequest() QNetworkRequest::Automatic).toInt()) == QNetworkRequest::Manual) httpRequest.setWithCredentials(false); + if (request.attribute(QNetworkRequest::EmitAllUploadProgressSignalsAttribute).toBool() == true) + emitAllUploadProgressSignals = true; + // Create the HTTP thread delegate QHttpThreadDelegate *delegate = new QHttpThreadDelegate; @@ -1863,14 +1866,16 @@ void QNetworkReplyHttpImplPrivate::emitReplyUploadProgress(qint64 bytesSent, qin if (isFinished) return; - //choke signal emissions, except the first and last signals which are unconditional - if (uploadProgressSignalChoke.isValid()) { - if (bytesSent != bytesTotal && uploadProgressSignalChoke.elapsed() < progressSignalInterval) { - return; + if (!emitAllUploadProgressSignals) { + //choke signal emissions, except the first and last signals which are unconditional + if (uploadProgressSignalChoke.isValid()) { + if (bytesSent != bytesTotal && uploadProgressSignalChoke.elapsed() < progressSignalInterval) { + return; + } + uploadProgressSignalChoke.restart(); + } else { + uploadProgressSignalChoke.start(); } - uploadProgressSignalChoke.restart(); - } else { - uploadProgressSignalChoke.start(); } emit q->uploadProgress(bytesSent, bytesTotal); diff --git a/src/network/access/qnetworkreplyhttpimpl_p.h b/src/network/access/qnetworkreplyhttpimpl_p.h index 77d9c5a368..73349f4e7a 100644 --- a/src/network/access/qnetworkreplyhttpimpl_p.h +++ b/src/network/access/qnetworkreplyhttpimpl_p.h @@ -78,14 +78,14 @@ public: QNetworkReplyHttpImpl(QNetworkAccessManager* const, const QNetworkRequest&, QNetworkAccessManager::Operation&, QIODevice* outgoingData); virtual ~QNetworkReplyHttpImpl(); - void close(); - void abort(); - qint64 bytesAvailable() const; - bool isSequential () const; - qint64 size() const; - qint64 readData(char*, qint64); - void setReadBufferSize(qint64 size); - bool canReadLine () const; + void close() Q_DECL_OVERRIDE; + void abort() Q_DECL_OVERRIDE; + qint64 bytesAvailable() const Q_DECL_OVERRIDE; + bool isSequential () const Q_DECL_OVERRIDE; + qint64 size() const Q_DECL_OVERRIDE; + qint64 readData(char*, qint64) Q_DECL_OVERRIDE; + void setReadBufferSize(qint64 size) Q_DECL_OVERRIDE; + bool canReadLine () const Q_DECL_OVERRIDE; Q_DECLARE_PRIVATE(QNetworkReplyHttpImpl) Q_PRIVATE_SLOT(d_func(), void _q_startOperation()) @@ -129,10 +129,10 @@ public: #ifndef QT_NO_SSL protected: - void ignoreSslErrors(); - void ignoreSslErrorsImplementation(const QList<QSslError> &errors); - void setSslConfigurationImplementation(const QSslConfiguration &configuration); - void sslConfigurationImplementation(QSslConfiguration &configuration) const; + void ignoreSslErrors() Q_DECL_OVERRIDE; + void ignoreSslErrorsImplementation(const QList<QSslError> &errors) Q_DECL_OVERRIDE; + void setSslConfigurationImplementation(const QSslConfiguration &configuration) Q_DECL_OVERRIDE; + void sslConfigurationImplementation(QSslConfiguration &configuration) const Q_DECL_OVERRIDE; #endif signals: diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index 5af3bb37be..3c7a911974 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -59,6 +59,8 @@ inline QNetworkReplyImplPrivate::QNetworkReplyImplPrivate() , downloadBufferMaximumSize(0) , downloadBuffer(0) { + if (request.attribute(QNetworkRequest::EmitAllUploadProgressSignalsAttribute).toBool() == true) + emitAllUploadProgressSignals = true; } void QNetworkReplyImplPrivate::_q_startOperation() @@ -542,14 +544,16 @@ void QNetworkReplyImplPrivate::emitUploadProgress(qint64 bytesSent, qint64 bytes Q_Q(QNetworkReplyImpl); bytesUploaded = bytesSent; - //choke signal emissions, except the first and last signals which are unconditional - if (uploadProgressSignalChoke.isValid()) { - if (bytesSent != bytesTotal && uploadProgressSignalChoke.elapsed() < progressSignalInterval) { - return; + if (!emitAllUploadProgressSignals) { + //choke signal emissions, except the first and last signals which are unconditional + if (uploadProgressSignalChoke.isValid()) { + if (bytesSent != bytesTotal && uploadProgressSignalChoke.elapsed() < progressSignalInterval) { + return; + } + uploadProgressSignalChoke.restart(); + } else { + uploadProgressSignalChoke.start(); } - uploadProgressSignalChoke.restart(); - } else { - uploadProgressSignalChoke.start(); } pauseNotificationHandling(); diff --git a/src/network/access/qnetworkreplyimpl_p.h b/src/network/access/qnetworkreplyimpl_p.h index 9bd7c88c84..aa1d04f3f8 100644 --- a/src/network/access/qnetworkreplyimpl_p.h +++ b/src/network/access/qnetworkreplyimpl_p.h @@ -69,16 +69,16 @@ class QNetworkReplyImpl: public QNetworkReply public: QNetworkReplyImpl(QObject *parent = 0); ~QNetworkReplyImpl(); - virtual void abort(); + virtual void abort() Q_DECL_OVERRIDE; // reimplemented from QNetworkReply / QIODevice - virtual void close(); - virtual qint64 bytesAvailable() const; - virtual void setReadBufferSize(qint64 size); - virtual bool canReadLine () const; + virtual void close() Q_DECL_OVERRIDE; + virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE; + virtual void setReadBufferSize(qint64 size) Q_DECL_OVERRIDE; + virtual bool canReadLine () const Q_DECL_OVERRIDE; - virtual qint64 readData(char *data, qint64 maxlen); - virtual bool event(QEvent *); + virtual qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE; + virtual bool event(QEvent *) Q_DECL_OVERRIDE; Q_DECLARE_PRIVATE(QNetworkReplyImpl) Q_PRIVATE_SLOT(d_func(), void _q_startOperation()) @@ -94,10 +94,10 @@ public: #ifndef QT_NO_SSL protected: - void sslConfigurationImplementation(QSslConfiguration &configuration) const; - void setSslConfigurationImplementation(const QSslConfiguration &configuration); - virtual void ignoreSslErrors(); - virtual void ignoreSslErrorsImplementation(const QList<QSslError> &errors); + void sslConfigurationImplementation(QSslConfiguration &configuration) const Q_DECL_OVERRIDE; + void setSslConfigurationImplementation(const QSslConfiguration &configuration) Q_DECL_OVERRIDE; + virtual void ignoreSslErrors() Q_DECL_OVERRIDE; + virtual void ignoreSslErrorsImplementation(const QList<QSslError> &errors) Q_DECL_OVERRIDE; #endif }; @@ -214,9 +214,9 @@ public: QNetworkAccessManager::Operation op); ~QDisabledNetworkReply(); - void abort() { } + void abort() Q_DECL_OVERRIDE { } protected: - qint64 readData(char *, qint64) { return -1; } + qint64 readData(char *, qint64) Q_DECL_OVERRIDE { return -1; } }; #endif diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index c51470e25a..2c0486d615 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -249,6 +249,13 @@ QT_BEGIN_NAMESPACE Indicates whether SPDY was used for receiving this reply. + \value EmitAllUploadProgressSignalsAttribute + Requests only, type: QMetaType::Bool (default: false) + Indicates whether all upload signals should be emitted. + By default, the uploadProgress signal is emitted only + in 100 millisecond intervals. + (This value was introduced in 5.5.) + \value User Special type. Additional information can be passed in QVariants with types ranging from User to UserMax. The default diff --git a/src/network/access/qnetworkrequest.h b/src/network/access/qnetworkrequest.h index 0239ae7f4b..3221438db4 100644 --- a/src/network/access/qnetworkrequest.h +++ b/src/network/access/qnetworkrequest.h @@ -80,6 +80,7 @@ public: BackgroundRequestAttribute, SpdyAllowedAttribute, SpdyWasUsedAttribute, + EmitAllUploadProgressSignalsAttribute, User = 1000, UserMax = 32767 |