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; |