/* * Copyright (c) 2023, Kenneth Myhra * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include namespace Web::Streams { JS_DEFINE_ALLOCATOR(TransformStreamDefaultController); TransformStreamDefaultController::TransformStreamDefaultController(JS::Realm& realm) : Bindings::PlatformObject(realm) { } TransformStreamDefaultController::~TransformStreamDefaultController() = default; void TransformStreamDefaultController::initialize(JS::Realm& realm) { Base::initialize(realm); set_prototype(&Bindings::ensure_web_prototype(realm, "TransformStreamDefaultController"_fly_string)); } void TransformStreamDefaultController::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_stream); visitor.visit(m_flush_algorithm); visitor.visit(m_transform_algorithm); } // https://streams.spec.whatwg.org/#ts-default-controller-desired-size Optional TransformStreamDefaultController::desired_size() { VERIFY(stream()->readable()->controller().has_value() && stream()->readable()->controller()->has>()); // 1. Let readableController be this.[[stream]].[[readable]].[[controller]]. auto readable_controller = stream()->readable()->controller()->get>(); // 2. Return ! ReadableStreamDefaultControllerGetDesiredSize(readableController). return readable_stream_default_controller_get_desired_size(*readable_controller); } // https://streams.spec.whatwg.org/#ts-default-controller-enqueue WebIDL::ExceptionOr TransformStreamDefaultController::enqueue(Optional chunk) { // 1. Perform ? TransformStreamDefaultControllerEnqueue(this, chunk). TRY(transform_stream_default_controller_enqueue(*this, chunk.has_value() ? chunk.value() : JS::js_undefined())); return {}; } // https://streams.spec.whatwg.org/#ts-default-controller-error WebIDL::ExceptionOr TransformStreamDefaultController::error(Optional reason) { // 1. Perform ? TransformStreamDefaultControllerError(this, e). TRY(transform_stream_default_controller_error(*this, reason.has_value() ? reason.value() : JS::js_undefined())); return {}; } // https://streams.spec.whatwg.org/#ts-default-controller-terminate WebIDL::ExceptionOr TransformStreamDefaultController::terminate() { // 1. Perform ? TransformStreamDefaultControllerTerminate(this). TRY(transform_stream_default_controller_terminate(*this)); return {}; } }