Modified: trunk/Source/WebCore/platform/network/curl/CurlCacheEntry.cpp (222396 => 222397)
--- trunk/Source/WebCore/platform/network/curl/CurlCacheEntry.cpp 2017-09-22 18:53:32 UTC (rev 222396)
+++ trunk/Source/WebCore/platform/network/curl/CurlCacheEntry.cpp 2017-09-22 19:01:25 UTC (rev 222397)
@@ -39,6 +39,7 @@
#include "ResourceHandleInternal.h"
#include "ResourceRequest.h"
#include "ResourceResponse.h"
+#include "SharedBuffer.h"
#include <wtf/CurrentTime.h>
#include <wtf/DateMath.h>
#include <wtf/HexNumber.h>
@@ -117,7 +118,7 @@
return false;
if (buffer.size())
- job->getInternal()->client()->didReceiveData(job, buffer.data(), buffer.size(), 0);
+ job->getInternal()->client()->didReceiveBuffer(job, SharedBuffer::create(buffer.data(), buffer.size()), buffer.size());
return true;
}
Modified: trunk/Source/WebCore/platform/network/curl/MultipartHandle.cpp (222396 => 222397)
--- trunk/Source/WebCore/platform/network/curl/MultipartHandle.cpp 2017-09-22 18:53:32 UTC (rev 222396)
+++ trunk/Source/WebCore/platform/network/curl/MultipartHandle.cpp 2017-09-22 19:01:25 UTC (rev 222397)
@@ -33,6 +33,7 @@
#include "ResourceHandleClient.h"
#include "ResourceHandleInternal.h"
#include "ResourceResponse.h"
+#include "SharedBuffer.h"
#include <wtf/StringExtras.h>
namespace WebCore {
@@ -329,7 +330,7 @@
if (d->client()) {
const char* data = ""
- d->client()->didReceiveData(m_resourceHandle, data, length, length);
+ d->client()->didReceiveBuffer(m_resourceHandle, SharedBuffer::create(data, length), length);
}
}
Modified: trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp (222396 => 222397)
--- trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp 2017-09-22 18:53:32 UTC (rev 222396)
+++ trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp 2017-09-22 19:01:25 UTC (rev 222397)
@@ -39,8 +39,8 @@
#include "MultipartHandle.h"
#include "ResourceHandle.h"
#include "ResourceHandleInternal.h"
+#include "SharedBuffer.h"
#include "TextEncoding.h"
-#include "ThreadSafeDataBuffer.h"
#include "URL.h"
#include <wtf/MainThread.h>
#include <wtf/text/Base64.h>
@@ -386,7 +386,7 @@
}
}
-void ResourceHandleCurlDelegate::didReceiveContentData(ThreadSafeDataBuffer buffer)
+void ResourceHandleCurlDelegate::didReceiveContentData(Ref<SharedBuffer>&& buffer)
{
ASSERT(isMainThread());
@@ -393,14 +393,11 @@
if (!response().responseFired())
handleLocalReceiveResponse();
- const char* ptr = reinterpret_cast<const char*>(buffer.data()->begin());
- size_t size = buffer.size();
-
if (m_multipartHandle)
- m_multipartHandle->contentReceived(ptr, size);
+ m_multipartHandle->contentReceived(buffer->data(), buffer->size());
else if (m_handle->client()) {
- CurlCacheManager::getInstance().didReceiveData(*m_handle, ptr, size);
- m_handle->client()->didReceiveData(m_handle, ptr, size, 0);
+ CurlCacheManager::getInstance().didReceiveData(*m_handle, buffer->data(), buffer->size());
+ m_handle->client()->didReceiveBuffer(m_handle, WTFMove(buffer), buffer->size());
}
}
@@ -495,6 +492,7 @@
String mediaType = url.substring(5, index - 5);
String data = "" + 1);
+ auto originalSize = data.length();
bool base64 = mediaType.endsWith(";base64", false);
if (base64)
@@ -522,7 +520,7 @@
if (m_handle->client()) {
Vector<char> out;
if (base64Decode(data, out, Base64IgnoreSpacesAndNewLines) && out.size() > 0)
- m_handle->client()->didReceiveData(m_handle, out.data(), out.size(), 0);
+ m_handle->client()->didReceiveBuffer(m_handle, SharedBuffer::create(out.data(), out.size()), originalSize);
}
} else {
TextEncoding encoding(charset);
@@ -533,7 +531,7 @@
if (m_handle->client()) {
CString encodedData = encoding.encode(data, URLEncodedEntitiesForUnencodables);
if (encodedData.length())
- m_handle->client()->didReceiveData(m_handle, encodedData.data(), encodedData.length(), 0);
+ m_handle->client()->didReceiveBuffer(m_handle, SharedBuffer::create(encodedData.data(), encodedData.length()), originalSize);
}
}
@@ -748,7 +746,7 @@
}
// called with data after all headers have been processed via headerCallback
-size_t ResourceHandleCurlDelegate::didReceiveData(ThreadSafeDataBuffer data)
+size_t ResourceHandleCurlDelegate::didReceiveData(Ref<SharedBuffer>&& buffer)
{
if (!m_handle)
return 0;
@@ -756,28 +754,29 @@
if (m_defersLoading)
return 0;
+ size_t receiveBytes = buffer->size();
+
// this shouldn't be necessary but apparently is. CURL writes the data
// of html page even if it is a redirect that was handled internally
// can be observed e.g. on gmail.com
if (auto httpCode = m_curlHandle.getResponseCode()) {
if (*httpCode >= 300 && *httpCode < 400)
- return data.size();
+ return receiveBytes;
}
- if (!data.size())
- return 0;
-
- if (isMainThread())
- didReceiveContentData(data);
- else {
- callOnMainThread([protectedThis = makeRef(*this), data] {
- if (!protectedThis->m_handle)
- return;
- protectedThis->didReceiveContentData(data);
- });
+ if (receiveBytes) {
+ if (isMainThread())
+ didReceiveContentData(WTFMove(buffer));
+ else {
+ callOnMainThread([protectedThis = makeRef(*this), buf = WTFMove(buffer)]() mutable {
+ if (!protectedThis->m_handle)
+ return;
+ protectedThis->didReceiveContentData(WTFMove(buf));
+ });
+ }
}
- return data.size();
+ return receiveBytes;
}
/* This is called to obtain HTTP POST or PUT data.
@@ -832,7 +831,7 @@
size_t ResourceHandleCurlDelegate::didReceiveDataCallback(char* ptr, size_t blockSize, size_t numberOfBlocks, void* data)
{
- return static_cast<ResourceHandleCurlDelegate*>(const_cast<void*>(data))->didReceiveData(ThreadSafeDataBuffer::copyData(static_cast<const char*>(ptr), blockSize * numberOfBlocks));
+ return static_cast<ResourceHandleCurlDelegate*>(const_cast<void*>(data))->didReceiveData(SharedBuffer::create(ptr, blockSize * numberOfBlocks));
}
size_t ResourceHandleCurlDelegate::willSendDataCallback(char* ptr, size_t blockSize, size_t numberOfBlocks, void* data)
Modified: trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.h (222396 => 222397)
--- trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.h 2017-09-22 18:53:32 UTC (rev 222396)
+++ trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.h 2017-09-22 19:01:25 UTC (rev 222397)
@@ -44,7 +44,7 @@
class ProtectionSpace;
class ResourceError;
class ResourceHandle;
-class ThreadSafeDataBuffer;
+class SharedBuffer;
class ResourceHandleCurlDelegate final : public ThreadSafeRefCounted<ResourceHandleCurlDelegate>, public CurlJobClient {
public:
@@ -76,7 +76,7 @@
void setupAuthentication();
void didReceiveAllHeaders(long httpCode, long long contentLength, uint16_t connectPort, long availableHttpAuth);
- void didReceiveContentData(ThreadSafeDataBuffer);
+ void didReceiveContentData(Ref<SharedBuffer>&&);
void handleLocalReceiveResponse();
void prepareSendData(char*, size_t blockSize, size_t numberOfBlocks);
@@ -95,7 +95,7 @@
CURLcode willSetupSslCtx(void*);
size_t didReceiveHeader(String&&);
- size_t didReceiveData(ThreadSafeDataBuffer);
+ size_t didReceiveData(Ref<SharedBuffer>&&);
size_t willSendData(char*, size_t blockSize, size_t numberOfBlocks);
static CURLcode willSetupSslCtxCallback(CURL*, void*, void*);