FetchBodyConsumer.h [plain text]
#pragma once
#include "FetchBodySource.h"
#include "JSDOMPromiseDeferred.h"
#include "ReadableStreamSink.h"
#include "SharedBuffer.h"
namespace WebCore {
class Blob;
class FetchBodySource;
class ReadableStream;
class FetchBodyConsumer {
public:
enum class Type { None, ArrayBuffer, Blob, JSON, Text };
FetchBodyConsumer(Type type) : m_type(type) { }
void append(const char* data, unsigned);
void append(const unsigned char* data, unsigned);
bool hasData() const { return !!m_buffer; }
const SharedBuffer* data() const { return m_buffer.get(); }
void setData(Ref<SharedBuffer>&& data) { m_buffer = WTFMove(data); }
RefPtr<SharedBuffer> takeData();
RefPtr<JSC::ArrayBuffer> takeAsArrayBuffer();
Ref<Blob> takeAsBlob();
String takeAsText();
void setContentType(const String& contentType) { m_contentType = contentType; }
void setType(Type type) { m_type = type; }
void clean();
void extract(ReadableStream&, ReadableStreamToSharedBufferSink::Callback&&);
void resolve(Ref<DeferredPromise>&&, ReadableStream*);
void resolveWithData(Ref<DeferredPromise>&&, const unsigned char*, unsigned);
void loadingFailed();
void loadingSucceeded();
void setConsumePromise(Ref<DeferredPromise>&&);
void setSource(Ref<FetchBodySource>&&);
void setAsLoading() { m_isLoading = true; }
private:
Type m_type;
String m_contentType;
RefPtr<SharedBuffer> m_buffer;
RefPtr<DeferredPromise> m_consumePromise;
RefPtr<ReadableStreamToSharedBufferSink> m_sink;
RefPtr<FetchBodySource> m_source;
bool m_isLoading { false };
};
}