Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(749)

Unified Diff: third_party/WebKit/Source/modules/fetch/Body.cpp

Issue 1899873006: Make Response::body return v8-extra based stream behind flag (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@notify-locked-released
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/fetch/Body.cpp
diff --git a/third_party/WebKit/Source/modules/fetch/Body.cpp b/third_party/WebKit/Source/modules/fetch/Body.cpp
index 670ea27b1e45ca179c84449e2b08beb0cad2f913..eadb58918aa3af3a61704ea7edd98e57d9b4183b 100644
--- a/third_party/WebKit/Source/modules/fetch/Body.cpp
+++ b/third_party/WebKit/Source/modules/fetch/Body.cpp
@@ -4,7 +4,6 @@
#include "modules/fetch/Body.h"
-#include "bindings/core/v8/ExceptionState.h"
#include "bindings/core/v8/ScriptPromiseResolver.h"
#include "bindings/core/v8/ScriptState.h"
#include "bindings/core/v8/V8ArrayBuffer.h"
@@ -14,9 +13,6 @@
#include "core/dom/ExceptionCode.h"
#include "core/fileapi/Blob.h"
#include "core/frame/UseCounter.h"
-#include "core/streams/ReadableStreamController.h"
-#include "core/streams/ReadableStreamOperations.h"
-#include "core/streams/UnderlyingSourceBase.h"
#include "modules/fetch/BodyStreamBuffer.h"
#include "modules/fetch/FetchDataLoader.h"
#include "public/platform/WebDataConsumerHandle.h"
@@ -104,59 +100,6 @@ public:
}
};
-class UnderlyingSourceFromDataConsumerHandle final : public UnderlyingSourceBase, public WebDataConsumerHandle::Client {
- EAGERLY_FINALIZE();
- DECLARE_EAGER_FINALIZATION_OPERATOR_NEW();
-public:
- UnderlyingSourceFromDataConsumerHandle(ScriptState* scriptState, PassOwnPtr<WebDataConsumerHandle> handle)
- : UnderlyingSourceBase(scriptState)
- , m_scriptState(scriptState)
- , m_reader(handle->obtainReader(this))
- {
- }
-
- ScriptPromise pull(ScriptState* scriptState) override
- {
- didGetReadable();
- return ScriptPromise::castUndefined(scriptState);
- }
-
- ScriptPromise cancel(ScriptState* scriptState, ScriptValue reason) override
- {
- m_reader = nullptr;
- return ScriptPromise::castUndefined(scriptState);
- }
-
- void didGetReadable() override
- {
- while (controller()->desiredSize() > 0) {
- size_t available = 0;
- const void* buffer = nullptr;
- WebDataConsumerHandle::Result result = m_reader->beginRead(&buffer, WebDataConsumerHandle::FlagNone, &available);
- if (result == WebDataConsumerHandle::Ok) {
- RefPtr<ArrayBuffer> arrayBuffer = ArrayBuffer::create(available, 1);
- memcpy(arrayBuffer->data(), buffer, available);
- m_reader->endRead(available);
- controller()->enqueue(DOMUint8Array::create(arrayBuffer.release(), 0, available));
- } else if (result == WebDataConsumerHandle::ShouldWait) {
- break;
- } else if (result == WebDataConsumerHandle::Done) {
- m_reader = nullptr;
- controller()->close();
- break;
- } else {
- m_reader = nullptr;
- controller()->error(V8ThrowException::createTypeError(m_scriptState->isolate(), "Network error"));
- break;
- }
- }
- }
-
-private:
- RefPtr<ScriptState> m_scriptState;
- OwnPtr<WebDataConsumerHandle::Reader> m_reader;
-};
-
} // namespace
ScriptPromise Body::arrayBuffer(ScriptState* scriptState)
@@ -177,7 +120,7 @@ ScriptPromise Body::arrayBuffer(ScriptState* scriptState)
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
promise = resolver->promise();
if (bodyBuffer()) {
- bodyBuffer()->startLoading(scriptState->getExecutionContext(), FetchDataLoader::createLoaderAsArrayBuffer(), new BodyArrayBufferConsumer(resolver));
+ bodyBuffer()->startLoading(FetchDataLoader::createLoaderAsArrayBuffer(), new BodyArrayBufferConsumer(resolver));
} else {
resolver->resolve(DOMArrayBuffer::create(0u, 1));
}
@@ -197,7 +140,7 @@ ScriptPromise Body::blob(ScriptState* scriptState)
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
promise = resolver->promise();
if (bodyBuffer()) {
- bodyBuffer()->startLoading(scriptState->getExecutionContext(), FetchDataLoader::createLoaderAsBlobHandle(mimeType()), new BodyBlobConsumer(resolver));
+ bodyBuffer()->startLoading(FetchDataLoader::createLoaderAsBlobHandle(mimeType()), new BodyBlobConsumer(resolver));
} else {
OwnPtr<BlobData> blobData = BlobData::create();
blobData->setContentType(mimeType());
@@ -220,7 +163,7 @@ ScriptPromise Body::json(ScriptState* scriptState)
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
promise = resolver->promise();
if (bodyBuffer()) {
- bodyBuffer()->startLoading(scriptState->getExecutionContext(), FetchDataLoader::createLoaderAsString(), new BodyJsonConsumer(resolver));
+ bodyBuffer()->startLoading(FetchDataLoader::createLoaderAsString(), new BodyJsonConsumer(resolver));
} else {
resolver->reject(V8ThrowException::createSyntaxError(scriptState->isolate(), "Unexpected end of input"));
}
@@ -240,32 +183,21 @@ ScriptPromise Body::text(ScriptState* scriptState)
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
promise = resolver->promise();
if (bodyBuffer()) {
- bodyBuffer()->startLoading(scriptState->getExecutionContext(), FetchDataLoader::createLoaderAsString(), new BodyTextConsumer(resolver));
+ bodyBuffer()->startLoading(FetchDataLoader::createLoaderAsString(), new BodyTextConsumer(resolver));
} else {
resolver->resolve(String());
}
return promise;
}
-ReadableByteStream* Body::body()
-{
- return bodyBuffer() ? bodyBuffer()->stream() : nullptr;
-}
-
-ReadableByteStream* Body::bodyWithUseCounter()
+ScriptValue Body::bodyWithUseCounter(ScriptState* scriptState)
{
UseCounter::count(getExecutionContext(), UseCounter::FetchBodyStream);
- return body();
-}
-
-ScriptValue Body::v8ExtraStreamBody(ScriptState* scriptState)
-{
- if (bodyUsed() || isBodyLocked() || !bodyBuffer())
- return ScriptValue(scriptState, v8::Undefined(scriptState->isolate()));
- OwnPtr<FetchDataConsumerHandle> handle = bodyBuffer()->releaseHandle(scriptState->getExecutionContext());
- return ReadableStreamOperations::createReadableStream(scriptState,
- new UnderlyingSourceFromDataConsumerHandle(scriptState, handle.release()),
- ScriptValue(scriptState, v8::Undefined(scriptState->isolate())));
+ if (!bodyBuffer())
+ return ScriptValue::createNull(scriptState);
+ ScriptValue stream = bodyBuffer()->stream();
+ ASSERT(stream.getScriptState() == scriptState);
+ return stream;
}
bool Body::bodyUsed()

Powered by Google App Engine
This is Rietveld 408576698