Diff
Modified: trunk/Source/WebCore/ChangeLog (248669 => 248670)
--- trunk/Source/WebCore/ChangeLog 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/ChangeLog 2019-08-14 13:42:37 UTC (rev 248670)
@@ -1,3 +1,55 @@
+2019-08-14 Youenn Fablet <you...@apple.com>
+
+ ThreadableBlobRegistry::blobSize should take a SessionID as parameter
+ https://bugs.webkit.org/show_bug.cgi?id=200671
+
+ Reviewed by Alex Christensen.
+
+ Update FormData to compute its byte size based on a SessionID.
+ We keep a WK1 byte length computation for FormDataElement.
+ Update FormData call sites accordingly.
+ Update CacheStorageConnection to implement a SessionID getter.
+ No change of behavior.
+
+ * Modules/cache/CacheStorageConnection.cpp:
+ (WebCore::CacheStorageConnection::computeRealBodySize):
+ (WebCore::computeRealBodySize): Deleted.
+ * Modules/cache/CacheStorageConnection.h:
+ * Modules/cache/WorkerCacheStorageConnection.cpp:
+ (WebCore::WorkerCacheStorageConnection::sessionID const):
+ * Modules/cache/WorkerCacheStorageConnection.h:
+ * fileapi/Blob.cpp:
+ (WebCore::Blob::size const):
+ * fileapi/ThreadableBlobRegistry.cpp:
+ (WebCore::ThreadableBlobRegistry::blobSize):
+ * fileapi/ThreadableBlobRegistry.h:
+ * loader/cache/KeepaliveRequestTracker.cpp:
+ (WebCore::KeepaliveRequestTracker::tryRegisterRequest):
+ (WebCore::KeepaliveRequestTracker::registerRequest):
+ (WebCore::KeepaliveRequestTracker::unregisterRequest):
+ * page/CacheStorageProvider.h:
+ (WebCore::CacheStorageProvider::createCacheStorageConnection):
+ * platform/network/BlobRegistry.h:
+ * platform/network/FormData.cpp:
+ (WebCore::computeLengthInBytes):
+ (WebCore::FormDataElement::lengthInBytes const):
+ (WebCore::FormData::lengthInBytes const):
+ * platform/network/FormData.h:
+ * platform/network/cf/FormDataStreamCFNet.cpp:
+ (WebCore::createHTTPBodyCFReadStream):
+ * platform/network/curl/CurlFormDataStream.cpp:
+ (WebCore::m_sessionID):
+ (WebCore::CurlFormDataStream::computeContentLength):
+ (WebCore::CurlFormDataStream::CurlFormDataStream): Deleted.
+ * platform/network/curl/CurlFormDataStream.h:
+ * platform/network/curl/CurlRequest.cpp:
+ (WebCore::CurlRequest::CurlRequest):
+ * platform/network/curl/CurlRequest.h:
+ (WebCore::CurlRequest::create):
+
+ * xml/XMLHttpRequest.cpp:
+ (WebCore::XMLHttpRequest::createRequest):
+
2019-08-14 Antti Koivisto <an...@apple.com>
Remove TouchActionData
Modified: trunk/Source/WebCore/Modules/cache/CacheStorageConnection.cpp (248669 => 248670)
--- trunk/Source/WebCore/Modules/cache/CacheStorageConnection.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/Modules/cache/CacheStorageConnection.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -33,11 +33,11 @@
namespace WebCore {
using namespace WebCore::DOMCacheEngine;
-static inline uint64_t computeRealBodySize(const DOMCacheEngine::ResponseBody& body)
+uint64_t CacheStorageConnection::computeRealBodySize(const DOMCacheEngine::ResponseBody& body)
{
uint64_t result = 0;
WTF::switchOn(body, [&] (const Ref<WebCore::FormData>& formData) {
- result = formData->lengthInBytes();
+ result = formData->lengthInBytes(sessionID());
}, [&] (const Ref<WebCore::SharedBuffer>& buffer) {
result = buffer->size();
}, [] (const std::nullptr_t&) {
Modified: trunk/Source/WebCore/Modules/cache/CacheStorageConnection.h (248669 => 248670)
--- trunk/Source/WebCore/Modules/cache/CacheStorageConnection.h 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/Modules/cache/CacheStorageConnection.h 2019-08-14 13:42:37 UTC (rev 248670)
@@ -57,6 +57,11 @@
virtual void engineRepresentation(CompletionHandler<void(const String&)>&& callback) { callback(String { }); }
virtual void updateQuotaBasedOnSpaceUsage(const ClientOrigin&) { }
+ virtual PAL::SessionID sessionID() const = 0;
+
+private:
+ uint64_t computeRealBodySize(const DOMCacheEngine::ResponseBody&);
+
protected:
HashMap<uint64_t, uint64_t> m_opaqueResponseToSizeWithPaddingMap;
};
Modified: trunk/Source/WebCore/Modules/cache/WorkerCacheStorageConnection.cpp (248669 => 248670)
--- trunk/Source/WebCore/Modules/cache/WorkerCacheStorageConnection.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/Modules/cache/WorkerCacheStorageConnection.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -134,6 +134,11 @@
callOnMainThread([mainThreadConnection = WTFMove(m_mainThreadConnection)]() mutable { });
}
+PAL::SessionID WorkerCacheStorageConnection::sessionID() const
+{
+ return m_scope.sessionID();
+}
+
void WorkerCacheStorageConnection::open(const ClientOrigin& origin, const String& cacheName, CacheIdentifierCallback&& callback)
{
uint64_t requestIdentifier = ++m_lastRequestIdentifier;
Modified: trunk/Source/WebCore/Modules/cache/WorkerCacheStorageConnection.h (248669 => 248670)
--- trunk/Source/WebCore/Modules/cache/WorkerCacheStorageConnection.h 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/Modules/cache/WorkerCacheStorageConnection.h 2019-08-14 13:42:37 UTC (rev 248670)
@@ -55,6 +55,8 @@
void reference(uint64_t cacheIdentifier) final;
void dereference(uint64_t cacheIdentifier) final;
+ PAL::SessionID sessionID() const final;
+
void doOpen(uint64_t requestIdentifier, const ClientOrigin&, const String& cacheName);
void doRemove(uint64_t requestIdentifier, uint64_t cacheIdentifier);
void doRetrieveCaches(uint64_t requestIdentifier, const ClientOrigin&, uint64_t updateCounter);
Modified: trunk/Source/WebCore/fileapi/Blob.cpp (248669 => 248670)
--- trunk/Source/WebCore/fileapi/Blob.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/fileapi/Blob.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -169,7 +169,7 @@
if (!m_size) {
// FIXME: _javascript_ cannot represent sizes as large as unsigned long long, we need to
// come up with an exception to throw if file size is not representable.
- unsigned long long actualSize = ThreadableBlobRegistry::blobSize(m_internalURL);
+ unsigned long long actualSize = ThreadableBlobRegistry::blobSize(m_sessionID, m_internalURL);
m_size = WTF::isInBounds<long long>(actualSize) ? actualSize : 0;
}
Modified: trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.cpp (248669 => 248670)
--- trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -128,15 +128,15 @@
});
}
-unsigned long long ThreadableBlobRegistry::blobSize(const URL& url)
+unsigned long long ThreadableBlobRegistry::blobSize(PAL::SessionID sessionID, const URL& url)
{
if (isMainThread())
- return blobRegistry().blobSize(url);
+ return blobRegistry().blobSize(sessionID, url);
unsigned long long resultSize;
BinarySemaphore semaphore;
- callOnMainThread([url = "" &semaphore, &resultSize] {
- resultSize = blobRegistry().blobSize(url);
+ callOnMainThread([sessionID, url = "" &semaphore, &resultSize] {
+ resultSize = blobRegistry().blobSize(sessionID, url);
semaphore.signal();
});
semaphore.wait();
Modified: trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.h (248669 => 248670)
--- trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.h 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.h 2019-08-14 13:42:37 UTC (rev 248670)
@@ -47,7 +47,7 @@
static void registerBlobURLForSlice(PAL::SessionID, const URL& newURL, const URL& srcURL, long long start, long long end);
static void unregisterBlobURL(PAL::SessionID, const URL&);
- static unsigned long long blobSize(const URL&);
+ static unsigned long long blobSize(PAL::SessionID, const URL&);
// Returns the origin for the given blob URL. This is because we are not able to embed the unique security origin or the origin of file URL
// in the blob URL.
Modified: trunk/Source/WebCore/loader/cache/KeepaliveRequestTracker.cpp (248669 => 248670)
--- trunk/Source/WebCore/loader/cache/KeepaliveRequestTracker.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/loader/cache/KeepaliveRequestTracker.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -44,7 +44,7 @@
if (!body)
return true;
- uint64_t bodySize = body->lengthInBytes();
+ uint64_t bodySize = body->lengthInBytes(resource.sessionID());
if (m_inflightKeepaliveBytes + bodySize > maxInflightKeepaliveBytes)
return false;
@@ -60,7 +60,7 @@
return;
ASSERT(!m_inflightKeepaliveRequests.contains(&resource));
m_inflightKeepaliveRequests.append(&resource);
- m_inflightKeepaliveBytes += body->lengthInBytes();
+ m_inflightKeepaliveBytes += body->lengthInBytes(resource.sessionID());
ASSERT(m_inflightKeepaliveBytes <= maxInflightKeepaliveBytes);
resource.addClient(*this);
@@ -87,7 +87,7 @@
resource.removeClient(*this);
bool wasRemoved = m_inflightKeepaliveRequests.removeFirst(&resource);
ASSERT_UNUSED(wasRemoved, wasRemoved);
- m_inflightKeepaliveBytes -= resource.resourceRequest().httpBody()->lengthInBytes();
+ m_inflightKeepaliveBytes -= resource.resourceRequest().httpBody()->lengthInBytes(resource.sessionID());
ASSERT(m_inflightKeepaliveBytes <= maxInflightKeepaliveBytes);
}
Modified: trunk/Source/WebCore/page/CacheStorageProvider.h (248669 => 248670)
--- trunk/Source/WebCore/page/CacheStorageProvider.h 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/page/CacheStorageProvider.h 2019-08-14 13:42:37 UTC (rev 248670)
@@ -35,9 +35,14 @@
public:
class DummyCacheStorageConnection final : public WebCore::CacheStorageConnection {
public:
- static Ref<DummyCacheStorageConnection> create() { return adoptRef(*new DummyCacheStorageConnection); }
+ static Ref<DummyCacheStorageConnection> create(PAL::SessionID sessionID) { return adoptRef(*new DummyCacheStorageConnection(sessionID)); }
private:
+ explicit DummyCacheStorageConnection(PAL::SessionID sessionID)
+ : m_sessionID(sessionID)
+ {
+ }
+
void open(const ClientOrigin&, const String&, DOMCacheEngine::CacheIdentifierCallback&&) final { }
void remove(uint64_t, DOMCacheEngine::CacheIdentifierCallback&&) final { }
void retrieveCaches(const ClientOrigin&, uint64_t, DOMCacheEngine::CacheInfosCallback&&) final { }
@@ -46,10 +51,13 @@
void batchPutOperation(uint64_t, Vector<DOMCacheEngine::Record>&&, DOMCacheEngine::RecordIdentifiersCallback&&) final { }
void reference(uint64_t) final { }
void dereference(uint64_t) final { }
+ PAL::SessionID sessionID() const final { return m_sessionID; }
+
+ PAL::SessionID m_sessionID;
};
static Ref<CacheStorageProvider> create() { return adoptRef(*new CacheStorageProvider); }
- virtual Ref<CacheStorageConnection> createCacheStorageConnection(PAL::SessionID) { return DummyCacheStorageConnection::create(); }
+ virtual Ref<CacheStorageConnection> createCacheStorageConnection(PAL::SessionID sessionID) { return DummyCacheStorageConnection::create(sessionID); }
virtual ~CacheStorageProvider() { };
protected:
Modified: trunk/Source/WebCore/platform/network/BlobRegistry.h (248669 => 248670)
--- trunk/Source/WebCore/platform/network/BlobRegistry.h 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/platform/network/BlobRegistry.h 2019-08-14 13:42:37 UTC (rev 248670)
@@ -64,7 +64,7 @@
virtual void unregisterBlobURL(PAL::SessionID, const URL&) = 0;
- virtual unsigned long long blobSize(const URL&) = 0;
+ virtual unsigned long long blobSize(PAL::SessionID, const URL&) = 0;
virtual void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&) = 0;
Modified: trunk/Source/WebCore/platform/network/FormData.cpp (248669 => 248670)
--- trunk/Source/WebCore/platform/network/FormData.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/platform/network/FormData.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -124,9 +124,9 @@
return formData;
}
-uint64_t FormDataElement::lengthInBytes() const
+static inline uint64_t computeLengthInBytes(const FormDataElement& element, const Function<uint64_t(const URL&)>& blobSize)
{
- return switchOn(data,
+ return switchOn(element.data,
[] (const Vector<char>& bytes) {
return static_cast<uint64_t>(bytes.size());
}, [] (const FormDataElement::EncodedFileData& fileData) {
@@ -136,12 +136,26 @@
if (FileSystem::getFileSize(fileData.filename, fileSize))
return static_cast<uint64_t>(fileSize);
return static_cast<uint64_t>(0);
- }, [] (const FormDataElement::EncodedBlobData& blobData) {
- return ThreadableBlobRegistry::blobSize(blobData.url);
+ }, [&blobSize] (const FormDataElement::EncodedBlobData& blobData) {
+ return blobSize(blobData.url);
}
);
}
+uint64_t FormDataElement::lengthInBytes(BlobRegistryImpl* blobRegistry) const
+{
+ return computeLengthInBytes(*this, [&](auto& url) {
+ return blobRegistry ? blobRegistry->blobSize(url) : 0;
+ });
+}
+
+uint64_t FormDataElement::lengthInBytes(PAL::SessionID sessionID) const
+{
+ return computeLengthInBytes(*this, [&](auto& url) {
+ return blobRegistry().blobSize(sessionID, url);
+ });
+}
+
FormDataElement FormDataElement::isolatedCopy() const
{
return switchOn(data,
@@ -380,12 +394,12 @@
FileSystem::deleteFile(file);
}
-uint64_t FormData::lengthInBytes() const
+uint64_t FormData::lengthInBytes(PAL::SessionID sessionID) const
{
if (!m_lengthInBytes) {
uint64_t length = 0;
for (auto& element : m_elements)
- length += element.lengthInBytes();
+ length += element.lengthInBytes(sessionID);
m_lengthInBytes = length;
}
return *m_lengthInBytes;
Modified: trunk/Source/WebCore/platform/network/FormData.h (248669 => 248670)
--- trunk/Source/WebCore/platform/network/FormData.h 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/platform/network/FormData.h 2019-08-14 13:42:37 UTC (rev 248670)
@@ -20,6 +20,7 @@
#pragma once
#include "BlobData.h"
+#include <pal/SessionID.h>
#include <wtf/Forward.h>
#include <wtf/RefCounted.h>
#include <wtf/URL.h>
@@ -50,7 +51,8 @@
explicit FormDataElement(const URL& blobURL)
: data(EncodedBlobData { blobURL }) { }
- uint64_t lengthInBytes() const;
+ uint64_t lengthInBytes(BlobRegistryImpl*) const;
+ uint64_t lengthInBytes(PAL::SessionID) const;
FormDataElement isolatedCopy() const;
@@ -249,7 +251,7 @@
return FormURLEncoded;
}
- uint64_t lengthInBytes() const;
+ uint64_t lengthInBytes(PAL::SessionID) const;
WEBCORE_EXPORT URL asBlobURL() const;
Modified: trunk/Source/WebCore/platform/network/cf/FormDataStreamCFNet.cpp (248669 => 248670)
--- trunk/Source/WebCore/platform/network/cf/FormDataStreamCFNet.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/platform/network/cf/FormDataStreamCFNet.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -378,7 +378,7 @@
// Precompute the content length so CFNetwork doesn't use chunked mode.
unsigned long long length = 0;
for (auto& element : dataForUpload.data().elements())
- length += element.lengthInBytes();
+ length += element.lengthInBytes(blobRegistry().blobRegistryImpl());
FormCreationContext* formContext = new FormCreationContext { WTFMove(dataForUpload), length };
CFReadStreamCallBacksV1 callBacks = { 1, formCreate, formFinalize, nullptr, formOpen, nullptr, formRead, nullptr, formCanRead, formClose, formCopyProperty, nullptr, nullptr, formSchedule, formUnschedule };
Modified: trunk/Source/WebCore/platform/network/curl/CurlDownload.cpp (248669 => 248670)
--- trunk/Source/WebCore/platform/network/curl/CurlDownload.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/platform/network/curl/CurlDownload.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -76,7 +76,8 @@
Ref<CurlRequest> CurlDownload::createCurlRequest(ResourceRequest& request)
{
- auto curlRequest = CurlRequest::create(request, *this);
+ // FIXME: Use a correct sessionID.
+ auto curlRequest = CurlRequest::create(request, *this, PAL::SessionID::emptySessionID());
return curlRequest;
}
Modified: trunk/Source/WebCore/platform/network/curl/CurlFormDataStream.cpp (248669 => 248670)
--- trunk/Source/WebCore/platform/network/curl/CurlFormDataStream.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/platform/network/curl/CurlFormDataStream.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -41,7 +41,8 @@
namespace WebCore {
-CurlFormDataStream::CurlFormDataStream(const FormData* formData)
+CurlFormDataStream::CurlFormDataStream(const FormData* formData, PAL::SessionID sessionID)
+ : m_sessionID(sessionID)
{
ASSERT(isMainThread());
@@ -103,7 +104,7 @@
m_isContentLengthUpdated = true;
for (const auto& element : m_formData->elements())
- m_totalSize += element.lengthInBytes();
+ m_totalSize += element.lengthInBytes(m_sessionID);
}
Optional<size_t> CurlFormDataStream::read(char* buffer, size_t size)
Modified: trunk/Source/WebCore/platform/network/curl/CurlFormDataStream.h (248669 => 248670)
--- trunk/Source/WebCore/platform/network/curl/CurlFormDataStream.h 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/platform/network/curl/CurlFormDataStream.h 2019-08-14 13:42:37 UTC (rev 248670)
@@ -34,7 +34,7 @@
class CurlFormDataStream {
public:
- CurlFormDataStream(const FormData*);
+ CurlFormDataStream(const FormData*, PAL::SessionID);
WEBCORE_EXPORT ~CurlFormDataStream();
void clean();
@@ -54,6 +54,7 @@
Optional<size_t> readFromFile(const FormDataElement::EncodedFileData&, char*, size_t);
Optional<size_t> readFromData(const Vector<char>&, char*, size_t);
+ PAL::SessionID m_sessionID;
RefPtr<FormData> m_formData;
std::unique_ptr<Vector<char>> m_postData;
Modified: trunk/Source/WebCore/platform/network/curl/CurlRequest.cpp (248669 => 248670)
--- trunk/Source/WebCore/platform/network/curl/CurlRequest.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/platform/network/curl/CurlRequest.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -41,13 +41,13 @@
namespace WebCore {
-CurlRequest::CurlRequest(const ResourceRequest&request, CurlRequestClient* client, ShouldSuspend shouldSuspend, EnableMultipart enableMultipart, CaptureNetworkLoadMetrics captureExtraMetrics, MessageQueue<Function<void()>>* messageQueue)
+CurlRequest::CurlRequest(const ResourceRequest&request, CurlRequestClient* client, PAL::SessionID sessionID, ShouldSuspend shouldSuspend, EnableMultipart enableMultipart, CaptureNetworkLoadMetrics captureExtraMetrics, MessageQueue<Function<void()>>* messageQueue)
: m_client(client)
, m_messageQueue(messageQueue)
, m_request(request.isolatedCopy())
, m_shouldSuspend(shouldSuspend == ShouldSuspend::Yes)
, m_enableMultipart(enableMultipart == EnableMultipart::Yes)
- , m_formDataStream(m_request.httpBody())
+ , m_formDataStream(m_request.httpBody(), sessionID)
, m_captureExtraMetrics(captureExtraMetrics == CaptureNetworkLoadMetrics::Extended)
{
ASSERT(isMainThread());
Modified: trunk/Source/WebCore/platform/network/curl/CurlRequest.h (248669 => 248670)
--- trunk/Source/WebCore/platform/network/curl/CurlRequest.h 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/platform/network/curl/CurlRequest.h 2019-08-14 13:42:37 UTC (rev 248670)
@@ -32,6 +32,7 @@
#include "CurlResponse.h"
#include "ProtectionSpace.h"
#include "ResourceRequest.h"
+#include <pal/SessionID.h>
#include <wtf/FileSystem.h>
#include <wtf/MessageQueue.h>
#include <wtf/MonotonicTime.h>
@@ -63,9 +64,9 @@
Extended
};
- static Ref<CurlRequest> create(const ResourceRequest& request, CurlRequestClient& client, ShouldSuspend shouldSuspend = ShouldSuspend::No, EnableMultipart enableMultipart = EnableMultipart::No, CaptureNetworkLoadMetrics captureMetrics = CaptureNetworkLoadMetrics::Basic, MessageQueue<Function<void()>>* messageQueue = nullptr)
+ static Ref<CurlRequest> create(const ResourceRequest& request, CurlRequestClient& client, PAL::SessionID sessionID, ShouldSuspend shouldSuspend = ShouldSuspend::No, EnableMultipart enableMultipart = EnableMultipart::No, CaptureNetworkLoadMetrics captureMetrics = CaptureNetworkLoadMetrics::Basic, MessageQueue<Function<void()>>* messageQueue = nullptr)
{
- return adoptRef(*new CurlRequest(request, &client, shouldSuspend, enableMultipart, captureMetrics, messageQueue));
+ return adoptRef(*new CurlRequest(request, &client, sessionID, shouldSuspend, enableMultipart, captureMetrics, messageQueue));
}
virtual ~CurlRequest() = default;
@@ -105,7 +106,7 @@
FinishTransfer
};
- CurlRequest(const ResourceRequest&, CurlRequestClient*, ShouldSuspend, EnableMultipart, CaptureNetworkLoadMetrics, MessageQueue<Function<void()>>*);
+ CurlRequest(const ResourceRequest&, CurlRequestClient*, PAL::SessionID, ShouldSuspend, EnableMultipart, CaptureNetworkLoadMetrics, MessageQueue<Function<void()>>*);
void retain() override { ref(); }
void release() override { deref(); }
Modified: trunk/Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp (248669 => 248670)
--- trunk/Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -154,7 +154,8 @@
}
CurlRequest::ShouldSuspend shouldSuspend = d->m_defersLoading ? CurlRequest::ShouldSuspend::Yes : CurlRequest::ShouldSuspend::No;
- auto curlRequest = CurlRequest::create(request, *delegate(), shouldSuspend, CurlRequest::EnableMultipart::Yes, CurlRequest::CaptureNetworkLoadMetrics::Basic, d->m_messageQueue);
+ // FIXME: Use a correct sessionID.
+ auto curlRequest = CurlRequest::create(request, *delegate(), PAL::SessionID::emptySessionID(), shouldSuspend, CurlRequest::EnableMultipart::Yes, CurlRequest::CaptureNetworkLoadMetrics::Basic, d->m_messageQueue);
return curlRequest;
}
Modified: trunk/Source/WebCore/xml/XMLHttpRequest.cpp (248669 => 248670)
--- trunk/Source/WebCore/xml/XMLHttpRequest.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -621,7 +621,7 @@
if (m_async) {
m_progressEventThrottle.dispatchProgressEvent(eventNames().loadstartEvent);
if (!m_uploadComplete && m_uploadListenerFlag)
- m_upload->dispatchProgressEvent(eventNames().loadstartEvent, 0, request.httpBody()->lengthInBytes());
+ m_upload->dispatchProgressEvent(eventNames().loadstartEvent, 0, request.httpBody()->lengthInBytes(scriptExecutionContext()->sessionID()));
if (readyState() != OPENED || !m_sendFlag || m_loader)
return { };
Modified: trunk/Source/WebKit/ChangeLog (248669 => 248670)
--- trunk/Source/WebKit/ChangeLog 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebKit/ChangeLog 2019-08-14 13:42:37 UTC (rev 248670)
@@ -1,5 +1,29 @@
2019-08-14 Youenn Fablet <you...@apple.com>
+ ThreadableBlobRegistry::blobSize should take a SessionID as parameter
+ https://bugs.webkit.org/show_bug.cgi?id=200671
+
+ Reviewed by Alex Christensen.
+
+ Update WebCacheStorageConnection to implement sessionID getter.
+ Update NetworkConnectionToWebProcess to get a sessionID as parameter to blobSize computation.
+
+ * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
+ (WebKit::NetworkDataTaskCurl::createCurlRequest):
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ (WebKit::NetworkConnectionToWebProcess::blobSize):
+ (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
+ * NetworkProcess/NetworkConnectionToWebProcess.h:
+ * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
+ * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
+ (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry):
+ * WebProcess/Cache/WebCacheStorageConnection.h:
+ * WebProcess/FileAPI/BlobRegistryProxy.cpp:
+ (WebKit::BlobRegistryProxy::blobSize):
+ * WebProcess/FileAPI/BlobRegistryProxy.h:
+
+2019-08-14 Youenn Fablet <you...@apple.com>
+
Remove SessionID default constructor
https://bugs.webkit.org/show_bug.cgi?id=200669
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (248669 => 248670)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -627,13 +627,10 @@
session->blobRegistry().unregisterBlobURL(url);
}
-void NetworkConnectionToWebProcess::blobSize(const URL& url, CompletionHandler<void(uint64_t)>&& completionHandler)
+void NetworkConnectionToWebProcess::blobSize(PAL::SessionID sessionID, const URL& url, CompletionHandler<void(uint64_t)>&& completionHandler)
{
- auto* blobRegistry = networkProcess().blobRegistry(*this);
- if (!blobRegistry)
- return;
-
- completionHandler(blobRegistry->blobSize(url));
+ auto* session = networkProcess().networkSession(sessionID);
+ completionHandler(session ? session->blobRegistry().blobSize(url) : 0);
}
void NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles(PAL::SessionID sessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&&)>&& completionHandler)
@@ -640,7 +637,7 @@
{
auto* session = networkProcess().networkSession(sessionID);
if (!session)
- return;
+ return completionHandler({ });
Vector<RefPtr<BlobDataFileReference>> fileReferences;
for (auto& url : blobURLs)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (248669 => 248670)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2019-08-14 13:42:37 UTC (rev 248670)
@@ -186,7 +186,7 @@
void registerBlobURLFromURL(PAL::SessionID, const URL&, const URL& srcURL);
void registerBlobURLOptionallyFileBacked(PAL::SessionID, const URL&, const URL& srcURL, const String& fileBackedPath, const String& contentType);
void registerBlobURLForSlice(PAL::SessionID, const URL&, const URL& srcURL, int64_t start, int64_t end);
- void blobSize(const URL&, CompletionHandler<void(uint64_t)>&&);
+ void blobSize(PAL::SessionID, const URL&, CompletionHandler<void(uint64_t)>&&);
void unregisterBlobURL(PAL::SessionID, const URL&);
void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&&)>&&);
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (248669 => 248670)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2019-08-14 13:42:37 UTC (rev 248670)
@@ -47,7 +47,7 @@
RegisterBlobURLOptionallyFileBacked(PAL::SessionID sessionID, URL url, URL srcURL, String fileBackedPath, String contentType)
RegisterBlobURLForSlice(PAL::SessionID sessionID, URL url, URL srcURL, int64_t start, int64_t end)
UnregisterBlobURL(PAL::SessionID sessionID, URL url)
- BlobSize(URL url) -> (uint64_t resultSize) Synchronous
+ BlobSize(PAL::SessionID sessionID, URL url) -> (uint64_t resultSize) Synchronous
WriteBlobsToTemporaryFiles(PAL::SessionID sessionID, Vector<String> blobURLs) -> (Vector<String> fileNames) Async
SetCaptureExtraNetworkLoadMetricsEnabled(bool enabled)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcessPlatformStrategies.cpp (248669 => 248670)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcessPlatformStrategies.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcessPlatformStrategies.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -58,7 +58,7 @@
void registerBlobURLOptionallyFileBacked(PAL::SessionID, const URL&, const URL& srcURL, RefPtr<BlobDataFileReference>&&, const String& contentType) final { ASSERT_NOT_REACHED(); }
void registerBlobURLForSlice(PAL::SessionID, const URL&, const URL& srcURL, long long start, long long end) final { ASSERT_NOT_REACHED(); }
void unregisterBlobURL(PAL::SessionID, const URL&) final { ASSERT_NOT_REACHED(); }
- unsigned long long blobSize(const URL&) final { ASSERT_NOT_REACHED(); return 0; }
+ unsigned long long blobSize(PAL::SessionID, const URL&) final { ASSERT_NOT_REACHED(); return 0; }
void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&) final { ASSERT_NOT_REACHED(); }
};
static NeverDestroyed<EmptyBlobRegistry> blobRegistry;
Modified: trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp (248669 => 248670)
--- trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -128,7 +128,7 @@
// Creates a CurlRequest in suspended state.
// Then, NetworkDataTaskCurl::resume() will be called and communication resumes.
const auto captureMetrics = shouldCaptureExtraNetworkLoadMetrics() ? CurlRequest::CaptureNetworkLoadMetrics::Extended : CurlRequest::CaptureNetworkLoadMetrics::Basic;
- return CurlRequest::create(request, *this, CurlRequest::ShouldSuspend::Yes, CurlRequest::EnableMultipart::No, captureMetrics);
+ return CurlRequest::create(request, *this, m_session->sessionID(), CurlRequest::ShouldSuspend::Yes, CurlRequest::EnableMultipart::No, captureMetrics);
}
void NetworkDataTaskCurl::curlDidSendData(CurlRequest&, unsigned long long totalBytesSent, unsigned long long totalBytesExpectedToSend)
Modified: trunk/Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.h (248669 => 248670)
--- trunk/Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.h 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.h 2019-08-14 13:42:37 UTC (rev 248670)
@@ -67,6 +67,8 @@
void engineRepresentation(CompletionHandler<void(const String&)>&&) final;
void updateQuotaBasedOnSpaceUsage(const WebCore::ClientOrigin&) final;
+ PAL::SessionID sessionID() const final { return m_sessionID; }
+
WebCacheStorageProvider& m_provider;
PAL::SessionID m_sessionID;
};
Modified: trunk/Source/WebKit/WebProcess/FileAPI/BlobRegistryProxy.cpp (248669 => 248670)
--- trunk/Source/WebKit/WebProcess/FileAPI/BlobRegistryProxy.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebKit/WebProcess/FileAPI/BlobRegistryProxy.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -73,10 +73,10 @@
WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RegisterBlobURLForSlice(sessionID, url, srcURL, start, end), 0);
}
-unsigned long long BlobRegistryProxy::blobSize(const URL& url)
+unsigned long long BlobRegistryProxy::blobSize(PAL::SessionID sessionID, const URL& url)
{
uint64_t resultSize;
- if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::BlobSize(url), Messages::NetworkConnectionToWebProcess::BlobSize::Reply(resultSize), 0))
+ if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::BlobSize(sessionID, url), Messages::NetworkConnectionToWebProcess::BlobSize::Reply(resultSize), 0))
return 0;
return resultSize;
}
Modified: trunk/Source/WebKit/WebProcess/FileAPI/BlobRegistryProxy.h (248669 => 248670)
--- trunk/Source/WebKit/WebProcess/FileAPI/BlobRegistryProxy.h 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebKit/WebProcess/FileAPI/BlobRegistryProxy.h 2019-08-14 13:42:37 UTC (rev 248670)
@@ -37,7 +37,7 @@
void registerBlobURLOptionallyFileBacked(PAL::SessionID, const URL&, const URL& srcURL, RefPtr<WebCore::BlobDataFileReference>&&, const String& contentType) final;
void unregisterBlobURL(PAL::SessionID, const URL&) final;
void registerBlobURLForSlice(PAL::SessionID, const URL&, const URL& srcURL, long long start, long long end) final;
- unsigned long long blobSize(const URL&) final;
+ unsigned long long blobSize(PAL::SessionID, const URL&) final;
void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&) final;
};
Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (248669 => 248670)
--- trunk/Source/WebKitLegacy/mac/ChangeLog 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog 2019-08-14 13:42:37 UTC (rev 248670)
@@ -1,3 +1,12 @@
+2019-08-14 Youenn Fablet <you...@apple.com>
+
+ ThreadableBlobRegistry::blobSize should take a SessionID as parameter
+ https://bugs.webkit.org/show_bug.cgi?id=200671
+
+ Reviewed by ALex Christensen.
+
+ * WebCoreSupport/WebPlatformStrategies.mm:
+
2019-08-13 Youenn Fablet <you...@apple.com>
Blob registries should be keyed by session IDs
Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.mm (248669 => 248670)
--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.mm 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.mm 2019-08-14 13:42:37 UTC (rev 248670)
@@ -70,7 +70,7 @@
void registerBlobURLOptionallyFileBacked(PAL::SessionID, const URL& url, const URL& srcURL, RefPtr<BlobDataFileReference>&& reference, const String& contentType) final { m_blobRegistry.registerBlobURLOptionallyFileBacked(url, srcURL, WTFMove(reference), contentType); }
void registerBlobURLForSlice(PAL::SessionID, const URL& url, const URL& srcURL, long long start, long long end) final { m_blobRegistry.registerBlobURLForSlice(url, srcURL, start, end); }
void unregisterBlobURL(PAL::SessionID, const URL& url) final { m_blobRegistry.unregisterBlobURL(url); }
- unsigned long long blobSize(const URL& url) final { return m_blobRegistry.blobSize(url); }
+ unsigned long long blobSize(PAL::SessionID, const URL& url) final { return m_blobRegistry.blobSize(url); }
void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&& completionHandler) final { m_blobRegistry.writeBlobsToTemporaryFiles(blobURLs, WTFMove(completionHandler)); }
BlobRegistryImpl* blobRegistryImpl() final { return &m_blobRegistry; }
Modified: trunk/Source/WebKitLegacy/win/ChangeLog (248669 => 248670)
--- trunk/Source/WebKitLegacy/win/ChangeLog 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebKitLegacy/win/ChangeLog 2019-08-14 13:42:37 UTC (rev 248670)
@@ -1,3 +1,12 @@
+2019-08-14 Youenn Fablet <you...@apple.com>
+
+ ThreadableBlobRegistry::blobSize should take a SessionID as parameter
+ https://bugs.webkit.org/show_bug.cgi?id=200671
+
+ Reviewed by Alex Christensen.
+
+ * WebCoreSupport/WebPlatformStrategies.cpp:
+
2019-08-13 Youenn Fablet <you...@apple.com>
Blob registries should be keyed by session IDs
Modified: trunk/Source/WebKitLegacy/win/WebCoreSupport/WebPlatformStrategies.cpp (248669 => 248670)
--- trunk/Source/WebKitLegacy/win/WebCoreSupport/WebPlatformStrategies.cpp 2019-08-14 11:54:05 UTC (rev 248669)
+++ trunk/Source/WebKitLegacy/win/WebCoreSupport/WebPlatformStrategies.cpp 2019-08-14 13:42:37 UTC (rev 248670)
@@ -68,7 +68,7 @@
void registerBlobURLOptionallyFileBacked(PAL::SessionID, const URL& url, const URL& srcURL, RefPtr<BlobDataFileReference>&& reference, const String& contentType) final { m_blobRegistry.registerBlobURLOptionallyFileBacked(url, srcURL, WTFMove(reference), contentType); }
void registerBlobURLForSlice(PAL::SessionID, const URL& url, const URL& srcURL, long long start, long long end) final { m_blobRegistry.registerBlobURLForSlice(url, srcURL, start, end); }
void unregisterBlobURL(PAL::SessionID, const URL& url) final { m_blobRegistry.unregisterBlobURL(url); }
- unsigned long long blobSize(const URL& url) final { return m_blobRegistry.blobSize(url); }
+ unsigned long long blobSize(PAL::SessionID, const URL& url) final { return m_blobRegistry.blobSize(url); }
void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&& completionHandler) final { m_blobRegistry.writeBlobsToTemporaryFiles(blobURLs, WTFMove(completionHandler)); }
BlobRegistryImpl* blobRegistryImpl() final { return &m_blobRegistry; }