/src/serenity/Userland/Libraries/LibWeb/Streams/TransformStreamDefaultController.cpp
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2023-2024, Kenneth Myhra <kennethmyhra@serenityos.org> |
3 | | * |
4 | | * SPDX-License-Identifier: BSD-2-Clause |
5 | | */ |
6 | | |
7 | | #include <LibWeb/Bindings/Intrinsics.h> |
8 | | #include <LibWeb/Bindings/TransformStreamDefaultControllerPrototype.h> |
9 | | #include <LibWeb/Streams/TransformStream.h> |
10 | | #include <LibWeb/Streams/TransformStreamDefaultController.h> |
11 | | |
12 | | namespace Web::Streams { |
13 | | |
14 | | JS_DEFINE_ALLOCATOR(TransformStreamDefaultController); |
15 | | |
16 | | TransformStreamDefaultController::TransformStreamDefaultController(JS::Realm& realm) |
17 | 0 | : Bindings::PlatformObject(realm) |
18 | 0 | { |
19 | 0 | } |
20 | | |
21 | 0 | TransformStreamDefaultController::~TransformStreamDefaultController() = default; |
22 | | |
23 | | void TransformStreamDefaultController::initialize(JS::Realm& realm) |
24 | 0 | { |
25 | 0 | Base::initialize(realm); |
26 | 0 | WEB_SET_PROTOTYPE_FOR_INTERFACE(TransformStreamDefaultController); |
27 | 0 | } |
28 | | |
29 | | void TransformStreamDefaultController::visit_edges(Cell::Visitor& visitor) |
30 | 0 | { |
31 | 0 | Base::visit_edges(visitor); |
32 | 0 | visitor.visit(m_stream); |
33 | 0 | visitor.visit(m_cancel_algorithm); |
34 | 0 | visitor.visit(m_finish_promise); |
35 | 0 | visitor.visit(m_flush_algorithm); |
36 | 0 | visitor.visit(m_transform_algorithm); |
37 | 0 | } |
38 | | |
39 | | // https://streams.spec.whatwg.org/#ts-default-controller-desired-size |
40 | | Optional<double> TransformStreamDefaultController::desired_size() |
41 | 0 | { |
42 | 0 | VERIFY(stream()->readable()->controller().has_value() && stream()->readable()->controller()->has<JS::NonnullGCPtr<ReadableStreamDefaultController>>()); |
43 | | |
44 | | // 1. Let readableController be this.[[stream]].[[readable]].[[controller]]. |
45 | 0 | auto readable_controller = stream()->readable()->controller()->get<JS::NonnullGCPtr<ReadableStreamDefaultController>>(); |
46 | | |
47 | | // 2. Return ! ReadableStreamDefaultControllerGetDesiredSize(readableController). |
48 | 0 | return readable_stream_default_controller_get_desired_size(*readable_controller); |
49 | 0 | } |
50 | | |
51 | | // https://streams.spec.whatwg.org/#ts-default-controller-enqueue |
52 | | WebIDL::ExceptionOr<void> TransformStreamDefaultController::enqueue(Optional<JS::Value> chunk) |
53 | 0 | { |
54 | | // 1. Perform ? TransformStreamDefaultControllerEnqueue(this, chunk). |
55 | 0 | TRY(transform_stream_default_controller_enqueue(*this, chunk.has_value() ? chunk.value() : JS::js_undefined())); |
56 | |
|
57 | 0 | return {}; |
58 | 0 | } |
59 | | |
60 | | // https://streams.spec.whatwg.org/#ts-default-controller-error |
61 | | void TransformStreamDefaultController::error(Optional<JS::Value> reason) |
62 | 0 | { |
63 | | // 1. Perform ? TransformStreamDefaultControllerError(this, e). |
64 | 0 | transform_stream_default_controller_error(*this, reason.has_value() ? reason.value() : JS::js_undefined()); |
65 | 0 | } |
66 | | |
67 | | // https://streams.spec.whatwg.org/#ts-default-controller-terminate |
68 | | void TransformStreamDefaultController::terminate() |
69 | 0 | { |
70 | | // 1. Perform ? TransformStreamDefaultControllerTerminate(this). |
71 | 0 | transform_stream_default_controller_terminate(*this); |
72 | 0 | } |
73 | | |
74 | | } |