diff options
author | Konstantin Tokarev <annulen@yandex.ru> | 2016-11-08 15:51:03 +0300 |
---|---|---|
committer | Konstantin Tokarev <annulen@yandex.ru> | 2017-02-02 12:31:13 +0000 |
commit | 8f2cfe80a5fb6632b4bbb9181db28f0505058128 (patch) | |
tree | 51ed8e62f4c49597f1b695dcc01137cce0b8a812 /Source/WebCore | |
parent | 5ae3854f795ac5c1a0f104bd8b66ed6f988181cd (diff) | |
download | qtwebkit-8f2cfe80a5fb6632b4bbb9181db28f0505058128.tar.gz |
Imported WebKit commit 26dda242e41e9b4d348fc3573d86f58b9e8b51b9
Change-Id: I00833927c575184923449ab99c85c46fec94dc19
Reviewed-by: Konstantin Tokarev <annulen@yandex.ru>
Diffstat (limited to 'Source/WebCore')
-rw-r--r-- | Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp | 10 | ||||
-rw-r--r-- | Source/WebCore/platform/network/qt/ResourceHandleQt.cpp | 21 |
2 files changed, 25 insertions, 6 deletions
diff --git a/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp b/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp index 306f99e0e..69c72309f 100644 --- a/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp +++ b/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp @@ -30,6 +30,7 @@ #include "ResourceHandleInternal.h" #include "ResourceRequest.h" #include "ResourceResponse.h" +#include "SharedBuffer.h" #include <QDateTime> #include <QFile> #include <QFileInfo> @@ -672,21 +673,22 @@ void QNetworkReplyHandler::forwardData() return; qint64 bytesAvailable = m_replyWrapper->reply()->bytesAvailable(); - char* buffer = new char[8128]; // smaller than 8192 to fit within 8k including overhead. + Vector<char> buffer(8128); // smaller than 8192 to fit within 8k including overhead. while (bytesAvailable > 0 && !m_queue.deferSignals()) { - qint64 readSize = m_replyWrapper->reply()->read(buffer, 8128); + qint64 readSize = m_replyWrapper->reply()->read(buffer.data(), buffer.size()); if (readSize <= 0) break; + buffer.shrink(readSize); bytesAvailable -= readSize; + // FIXME: https://bugs.webkit.org/show_bug.cgi?id=19793 // -1 means we do not provide any data about transfer size to inspector so it would use // Content-Length headers or content size to show transfer size. - client->didReceiveData(m_resourceHandle, buffer, readSize, -1); + client->didReceiveBuffer(m_resourceHandle, SharedBuffer::adoptVector(buffer), -1); // Check if the request has been aborted or this reply-handler was otherwise released. if (wasAborted() || !m_replyWrapper) break; } - delete[] buffer; if (bytesAvailable > 0 && m_replyWrapper) m_queue.requeue(&QNetworkReplyHandler::forwardData); } diff --git a/Source/WebCore/platform/network/qt/ResourceHandleQt.cpp b/Source/WebCore/platform/network/qt/ResourceHandleQt.cpp index 674265a69..64c5e47e8 100644 --- a/Source/WebCore/platform/network/qt/ResourceHandleQt.cpp +++ b/Source/WebCore/platform/network/qt/ResourceHandleQt.cpp @@ -49,7 +49,7 @@ namespace WebCore { -class WebCoreSynchronousLoader : public ResourceHandleClient { +class WebCoreSynchronousLoader final : public ResourceHandleClient { public: WebCoreSynchronousLoader(ResourceError& error, ResourceResponse& response, Vector<char>& data) : m_error(error) @@ -59,7 +59,8 @@ public: void willSendRequest(ResourceHandle*, ResourceRequest&, const ResourceResponse&) override; void didReceiveResponse(ResourceHandle*, const ResourceResponse& response) override { m_response = response; } - void didReceiveData(ResourceHandle*, const char* data, unsigned length, int) override { m_data.append(data, length); } + void didReceiveData(ResourceHandle*, const char*, unsigned, int) override; + void didReceiveBuffer(ResourceHandle*, PassRefPtr<SharedBuffer>, int /*encodedDataLength*/) override; void didFinishLoading(ResourceHandle*, double /*finishTime*/) override {} void didFail(ResourceHandle*, const ResourceError& error) override { m_error = error; } private: @@ -79,6 +80,22 @@ void WebCoreSynchronousLoader::willSendRequest(ResourceHandle* handle, ResourceR } } +void WebCoreSynchronousLoader::didReceiveData(ResourceHandle*, const char*, unsigned, int) +{ + ASSERT_NOT_REACHED(); +} + +void WebCoreSynchronousLoader::didReceiveBuffer(ResourceHandle*, PassRefPtr<SharedBuffer> buffer, int) +{ + // This pattern is suggested by SharedBuffer.h. + const char* segment; + unsigned position = 0; + while (unsigned length = buffer->getSomeData(segment, position)) { + m_data.append(segment, length); + position += length; + } +} + ResourceHandleInternal::~ResourceHandleInternal() { } |