summaryrefslogtreecommitdiff
path: root/Source/WebCore
diff options
context:
space:
mode:
authorKonstantin Tokarev <annulen@yandex.ru>2016-11-08 15:51:03 +0300
committerKonstantin Tokarev <annulen@yandex.ru>2017-02-02 12:31:13 +0000
commit8f2cfe80a5fb6632b4bbb9181db28f0505058128 (patch)
tree51ed8e62f4c49597f1b695dcc01137cce0b8a812 /Source/WebCore
parent5ae3854f795ac5c1a0f104bd8b66ed6f988181cd (diff)
downloadqtwebkit-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.cpp10
-rw-r--r--Source/WebCore/platform/network/qt/ResourceHandleQt.cpp21
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()
{
}