| Index: Source/modules/fetch/FetchBlobDataConsumerHandle.cpp
|
| diff --git a/Source/modules/fetch/FetchBlobDataConsumerHandle.cpp b/Source/modules/fetch/FetchBlobDataConsumerHandle.cpp
|
| index 9005fb551944f0fc283f8c371eaa5be99f5a03fb..150c4370097b744f4c9ff636ff8505d5e7f81f00 100644
|
| --- a/Source/modules/fetch/FetchBlobDataConsumerHandle.cpp
|
| +++ b/Source/modules/fetch/FetchBlobDataConsumerHandle.cpp
|
| @@ -351,7 +351,7 @@ public:
|
| return Done;
|
| m_readerContext->ensureStartLoader();
|
| Result r = m_reader->read(data, size, flags, readSize);
|
| - if (r != ShouldWait && !(r == Ok && *readSize == 0)) {
|
| + if (!(size == 0 && (r == Ok || r == ShouldWait))) {
|
| // We read non-empty data, so we cannot use the blob data
|
| // handle which represents the whole data.
|
| m_readerContext->clearBlobDataHandleForDrain();
|
| @@ -364,13 +364,8 @@ public:
|
| if (m_readerContext->drained())
|
| return Done;
|
| m_readerContext->ensureStartLoader();
|
| - Result r = m_reader->beginRead(buffer, flags, available);
|
| - if (r != ShouldWait && !(r == Ok && *available == 0)) {
|
| - // We read non-empty data, so we cannot use the blob data
|
| - // handle which represents the whole data.
|
| - m_readerContext->clearBlobDataHandleForDrain();
|
| - }
|
| - return r;
|
| + m_readerContext->clearBlobDataHandleForDrain();
|
| + return m_reader->beginRead(buffer, flags, available);
|
| }
|
|
|
| Result endRead(size_t readSize) override
|
| @@ -390,6 +385,16 @@ public:
|
| return blobDataHandle.release();
|
| }
|
|
|
| + PassRefPtr<FormData> drainAsFormData() override
|
| + {
|
| + RefPtr<BlobDataHandle> handle = drainAsBlobDataHandle(AllowBlobWithInvalidSize);
|
| + if (!handle)
|
| + return nullptr;
|
| + RefPtr<FormData> formData = FormData::create();
|
| + formData->appendBlob(handle->uuid(), handle);
|
| + return formData.release();
|
| + }
|
| +
|
| private:
|
| RefPtr<ReaderContext> m_readerContext;
|
| OwnPtr<WebDataConsumerHandle::Reader> m_reader;
|
|
|