Make QNetworkReplyHandler deliver content asynchronously

when its load type is set to SynchronousLoad.

Issue #11338: https://github.com/ariya/phantomjs/issues/11338
Upstream bug: https://bugs.webkit.org/show_bug.cgi?id=62808
1.x
Vitaliy Slobodin 2013-05-20 22:13:57 +04:00 committed by Ariya Hidayat
parent fa238856f9
commit 639e8c85b2
3 changed files with 10 additions and 9 deletions

View File

@ -382,8 +382,6 @@ void NetworkAccessManager::handleFinished(QNetworkReply *reply, const QVariant &
m_started.remove(reply);
emit resourceReceived(data);
reply->deleteLater();
}
void NetworkAccessManager::handleSslErrors(const QList<QSslError> &errors)

View File

@ -178,10 +178,13 @@ void QNetworkReplyHandlerCallQueue::unlock()
flush();
}
void QNetworkReplyHandlerCallQueue::setDeferSignals(bool defer)
void QNetworkReplyHandlerCallQueue::setDeferSignals(bool defer, bool sync)
{
m_deferSignals = defer;
flush();
if (sync)
flush();
else
QMetaObject::invokeMethod(this, "flush", Qt::QueuedConnection);
}
void QNetworkReplyHandlerCallQueue::flush()
@ -238,7 +241,6 @@ QNetworkReply* QNetworkReplyWrapper::release()
m_reply = 0;
m_sniffer = 0;
reply->setParent(0);
return reply;
}

View File

@ -40,11 +40,12 @@ class ResourceRequest;
class ResourceResponse;
class QNetworkReplyHandler;
class QNetworkReplyHandlerCallQueue {
class QNetworkReplyHandlerCallQueue : public QObject {
Q_OBJECT
public:
QNetworkReplyHandlerCallQueue(QNetworkReplyHandler*, bool deferSignals);
bool deferSignals() const { return m_deferSignals; }
void setDeferSignals(bool);
void setDeferSignals(bool, bool sync = false);
typedef void (QNetworkReplyHandler::*EnqueuedCall)();
void push(EnqueuedCall method);
@ -59,7 +60,7 @@ private:
bool m_flushing;
QList<EnqueuedCall> m_enqueuedCalls;
void flush();
Q_INVOKABLE void flush();
};
class QNetworkReplyWrapper : public QObject {
@ -120,7 +121,7 @@ public:
};
QNetworkReplyHandler(ResourceHandle*, LoadType, bool deferred = false);
void setLoadingDeferred(bool deferred) { m_queue.setDeferSignals(deferred); }
void setLoadingDeferred(bool deferred) { m_queue.setDeferSignals(deferred, m_loadType == SynchronousLoad); }
QNetworkReply* reply() const { return m_replyWrapper ? m_replyWrapper->reply() : 0; }