summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/streams/readable_stream_byob_reader.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/streams/readable_stream_byob_reader.h')
-rw-r--r--chromium/third_party/blink/renderer/core/streams/readable_stream_byob_reader.h52
1 files changed, 49 insertions, 3 deletions
diff --git a/chromium/third_party/blink/renderer/core/streams/readable_stream_byob_reader.h b/chromium/third_party/blink/renderer/core/streams/readable_stream_byob_reader.h
index 198e915cca1..fb7ac5bc9b2 100644
--- a/chromium/third_party/blink/renderer/core/streams/readable_stream_byob_reader.h
+++ b/chromium/third_party/blink/renderer/core/streams/readable_stream_byob_reader.h
@@ -1,4 +1,4 @@
-// Copyright 2020 The Chromium AUthors. All rights reserved.
+// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.
@@ -9,13 +9,16 @@
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/streams/readable_stream_generic_reader.h"
#include "third_party/blink/renderer/core/typed_arrays/array_buffer_view_helpers.h"
+#include "third_party/blink/renderer/core/typed_arrays/dom_typed_array.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
+#include "third_party/blink/renderer/platform/wtf/casting.h"
namespace blink {
class ExceptionState;
class ScriptPromise;
class ScriptState;
+class StreamPromiseResolver;
class ReadableStream;
class DOMArrayBufferView;
@@ -34,6 +37,9 @@ class CORE_EXPORT ReadableStreamBYOBReader
ExceptionState&);
~ReadableStreamBYOBReader() override;
+ bool IsDefaultReader() const override { return false; }
+ bool IsBYOBReader() const override { return true; }
+
// https://streams.spec.whatwg.org/#byob-reader-read
ScriptPromise read(ScriptState*,
NotShared<DOMArrayBufferView> view,
@@ -42,11 +48,51 @@ class CORE_EXPORT ReadableStreamBYOBReader
// https://streams.spec.whatwg.org/#byob-reader-release-lock
void releaseLock(ScriptState*, ExceptionState&);
+ // https://streams.spec.whatwg.org/#set-up-readable-stream-byob-reader
+ static void SetUpBYOBReader(ScriptState*,
+ ReadableStreamBYOBReader* reader,
+ ReadableStream* stream,
+ ExceptionState&);
+
+ void Trace(Visitor*) const override;
+
private:
+ friend class ReadableByteStreamController;
friend class ReadableStream;
- static void ThrowUnimplemented(ExceptionState&);
- static ScriptPromise RejectUnimplemented(ScriptState*);
+
+ class ReadIntoRequest : public GarbageCollected<ReadIntoRequest> {
+ public:
+ explicit ReadIntoRequest(StreamPromiseResolver* resolver);
+
+ void ChunkSteps(ScriptState*, DOMArrayBufferView* chunk) const;
+ void CloseSteps(ScriptState*, DOMArrayBufferView* chunk) const;
+ void ErrorSteps(ScriptState*, v8::Local<v8::Value> e) const;
+
+ void Trace(Visitor*) const;
+
+ private:
+ friend class ReadableStream;
+
+ Member<StreamPromiseResolver> resolver_;
+ };
+
+ // https://streams.spec.whatwg.org/#readable-stream-byob-reader-read
+ static void Read(ScriptState*,
+ ReadableStreamBYOBReader*,
+ NotShared<DOMArrayBufferView> view,
+ ReadIntoRequest*,
+ ExceptionState&);
+
+ HeapDeque<Member<ReadIntoRequest>> read_into_requests_;
};
+
+template <>
+struct DowncastTraits<ReadableStreamBYOBReader> {
+ static bool AllowFrom(const ReadableStreamGenericReader& reader) {
+ return reader.IsBYOBReader();
+ }
+};
+
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_STREAMS_READABLE_STREAM_BYOB_READER_H_