/* * Copyright (c) 2023, Matthew Olsson * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include #include #include namespace Web::Streams { WebIDL::ExceptionOr> WritableStreamDefaultWriter::construct_impl(JS::Realm& realm, JS::NonnullGCPtr stream) { auto writer = MUST_OR_THROW_OOM(realm.heap().allocate(realm, realm)); // 1. Perform ? SetUpWritableStreamDefaultWriter(this, stream). TRY(set_up_writable_stream_default_writer(*writer, stream)); return writer; } // https://streams.spec.whatwg.org/#default-writer-closed JS::GCPtr WritableStreamDefaultWriter::closed() { // 1. Return this.[[closedPromise]]. return m_closed_promise->promise(); } // https://streams.spec.whatwg.org/#default-writer-desired-size WebIDL::ExceptionOr> WritableStreamDefaultWriter::desired_size() const { // 1. If this.[[stream]] is undefined, throw a TypeError exception. if (!m_stream) return WebIDL::SimpleException { WebIDL::SimpleExceptionType::TypeError, "Cannot get desired size of writer that has no locked stream"sv }; // 2. Return ! WritableStreamDefaultWriterGetDesiredSize(this). return writable_stream_default_writer_get_desired_size(*this); } // https://streams.spec.whatwg.org/#default-writer-ready JS::GCPtr WritableStreamDefaultWriter::ready() { // 1. Return this.[[readyPromise]]. return m_ready_promise->promise(); } WritableStreamDefaultWriter::WritableStreamDefaultWriter(JS::Realm& realm) : Bindings::PlatformObject(realm) { } JS::ThrowCompletionOr WritableStreamDefaultWriter::initialize(JS::Realm& realm) { MUST_OR_THROW_OOM(Base::initialize(realm)); set_prototype(&Bindings::ensure_web_prototype(realm, "WritableStreamDefaultWriter")); return {}; } void WritableStreamDefaultWriter::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_closed_promise); visitor.visit(m_ready_promise); visitor.visit(m_stream); } }