/* * Copyright (c) 2022, Linus Groh * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include namespace Web::Streams { // https://streams.spec.whatwg.org/#rs-constructor WebIDL::ExceptionOr> ReadableStream::create_with_global_object(HTML::Window& window) { auto* readable_stream = window.heap().allocate(window.realm(), window); return JS::NonnullGCPtr { *readable_stream }; } ReadableStream::ReadableStream(HTML::Window& window) : PlatformObject(window.realm()) { set_prototype(&window.cached_web_prototype("ReadableStream")); } ReadableStream::~ReadableStream() = default; void ReadableStream::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_controller); visitor.visit(m_reader); visitor.visit(m_stored_error); } // https://streams.spec.whatwg.org/#readablestream-locked bool ReadableStream::is_readable() const { // A ReadableStream stream is readable if stream.[[state]] is "readable". return m_state == State::Readable; } // https://streams.spec.whatwg.org/#readablestream-closed bool ReadableStream::is_closed() const { // A ReadableStream stream is closed if stream.[[state]] is "closed". return m_state == State::Closed; } // https://streams.spec.whatwg.org/#readablestream-errored bool ReadableStream::is_errored() const { // A ReadableStream stream is errored if stream.[[state]] is "errored". return m_state == State::Errored; } // https://streams.spec.whatwg.org/#readablestream-locked bool ReadableStream::is_locked() const { // A ReadableStream stream is locked if ! IsReadableStreamLocked(stream) returns true. return is_readable_stream_locked(*this); } // https://streams.spec.whatwg.org/#is-readable-stream-disturbed bool ReadableStream::is_disturbed() const { // A ReadableStream stream is disturbed if stream.[[disturbed]] is true. return m_disturbed; } }