| 
									
										
										
										
											2023-07-07 15:49:22 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2023, Kenneth Myhra <kennethmyhra@serenityos.org> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <LibWeb/Bindings/Intrinsics.h>
 | 
					
						
							| 
									
										
										
										
											2024-04-27 12:09:58 +12:00
										 |  |  | #include <LibWeb/Bindings/TransformStreamDefaultControllerPrototype.h>
 | 
					
						
							| 
									
										
										
										
											2023-07-07 15:49:22 +02:00
										 |  |  | #include <LibWeb/Streams/TransformStream.h>
 | 
					
						
							|  |  |  | #include <LibWeb/Streams/TransformStreamDefaultController.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Web::Streams { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-19 19:47:52 +01:00
										 |  |  | JS_DEFINE_ALLOCATOR(TransformStreamDefaultController); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-07 15:49:22 +02:00
										 |  |  | TransformStreamDefaultController::TransformStreamDefaultController(JS::Realm& realm) | 
					
						
							|  |  |  |     : Bindings::PlatformObject(realm) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TransformStreamDefaultController::~TransformStreamDefaultController() = default; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-07 08:41:28 +02:00
										 |  |  | void TransformStreamDefaultController::initialize(JS::Realm& realm) | 
					
						
							| 
									
										
										
										
											2023-07-07 15:49:22 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2023-08-07 08:41:28 +02:00
										 |  |  |     Base::initialize(realm); | 
					
						
							| 
									
										
										
										
											2024-03-16 13:13:08 +01:00
										 |  |  |     WEB_SET_PROTOTYPE_FOR_INTERFACE(TransformStreamDefaultController); | 
					
						
							| 
									
										
										
										
											2023-07-07 15:49:22 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TransformStreamDefaultController::visit_edges(Cell::Visitor& visitor) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Base::visit_edges(visitor); | 
					
						
							|  |  |  |     visitor.visit(m_stream); | 
					
						
							| 
									
										
										
										
											2024-01-26 18:54:24 +13:00
										 |  |  |     visitor.visit(m_flush_algorithm); | 
					
						
							|  |  |  |     visitor.visit(m_transform_algorithm); | 
					
						
							| 
									
										
										
										
											2023-07-07 15:49:22 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // https://streams.spec.whatwg.org/#ts-default-controller-desired-size
 | 
					
						
							|  |  |  | Optional<double> TransformStreamDefaultController::desired_size() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     VERIFY(stream()->readable()->controller().has_value() && stream()->readable()->controller()->has<JS::NonnullGCPtr<ReadableStreamDefaultController>>()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 1. Let readableController be this.[[stream]].[[readable]].[[controller]].
 | 
					
						
							|  |  |  |     auto readable_controller = stream()->readable()->controller()->get<JS::NonnullGCPtr<ReadableStreamDefaultController>>(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 2. Return ! ReadableStreamDefaultControllerGetDesiredSize(readableController).
 | 
					
						
							|  |  |  |     return readable_stream_default_controller_get_desired_size(*readable_controller); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-07 19:35:15 +02:00
										 |  |  | // https://streams.spec.whatwg.org/#ts-default-controller-enqueue
 | 
					
						
							|  |  |  | WebIDL::ExceptionOr<void> TransformStreamDefaultController::enqueue(Optional<JS::Value> chunk) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     // 1. Perform ? TransformStreamDefaultControllerEnqueue(this, chunk).
 | 
					
						
							|  |  |  |     TRY(transform_stream_default_controller_enqueue(*this, chunk.has_value() ? chunk.value() : JS::js_undefined())); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return {}; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-07 16:29:32 +02:00
										 |  |  | // https://streams.spec.whatwg.org/#ts-default-controller-error
 | 
					
						
							|  |  |  | WebIDL::ExceptionOr<void> TransformStreamDefaultController::error(Optional<JS::Value> reason) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     // 1. Perform ? TransformStreamDefaultControllerError(this, e).
 | 
					
						
							|  |  |  |     TRY(transform_stream_default_controller_error(*this, reason.has_value() ? reason.value() : JS::js_undefined())); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return {}; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-07 19:48:11 +02:00
										 |  |  | // https://streams.spec.whatwg.org/#ts-default-controller-terminate
 | 
					
						
							|  |  |  | WebIDL::ExceptionOr<void> TransformStreamDefaultController::terminate() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     // 1. Perform ? TransformStreamDefaultControllerTerminate(this).
 | 
					
						
							|  |  |  |     TRY(transform_stream_default_controller_terminate(*this)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return {}; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-07 15:49:22 +02:00
										 |  |  | } |