/* * Copyright (c) 2023, Matthew Olsson * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace Web::Streams { struct ReadableStreamReadResult { JS::Value value; bool done; }; class ReadRequest : public RefCounted { public: virtual ~ReadRequest() = default; virtual void on_chunk(JS::Value chunk) = 0; virtual void on_close() = 0; virtual void on_error(JS::Value error) = 0; }; // https://streams.spec.whatwg.org/#readablestreamdefaultreader class ReadableStreamDefaultReader final : public Bindings::PlatformObject , public ReadableStreamGenericReaderMixin { WEB_PLATFORM_OBJECT(ReadableStreamDefaultReader, Bindings::PlatformObject); public: static WebIDL::ExceptionOr> construct_impl(JS::Realm&, JS::NonnullGCPtr); virtual ~ReadableStreamDefaultReader() override = default; WebIDL::ExceptionOr> read(); WebIDL::ExceptionOr release_lock(); SinglyLinkedList>& read_requests() { return m_read_requests; } private: explicit ReadableStreamDefaultReader(JS::Realm&); virtual JS::ThrowCompletionOr initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; SinglyLinkedList> m_read_requests; }; }