| 
									
										
										
										
											2023-03-30 19:27:45 -07:00
										 |  |  |  | /*
 | 
					
						
							|  |  |  |  |  * Copyright (c) 2023, Matthew Olsson <mattco@serenityos.org> | 
					
						
							|  |  |  |  |  * | 
					
						
							|  |  |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							|  |  |  |  |  */ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #pragma once
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #include <AK/Function.h>
 | 
					
						
							|  |  |  |  | #include <AK/SinglyLinkedList.h>
 | 
					
						
							|  |  |  |  | #include <LibJS/Forward.h>
 | 
					
						
							|  |  |  |  | #include <LibWeb/Bindings/PlatformObject.h>
 | 
					
						
							|  |  |  |  | #include <LibWeb/Forward.h>
 | 
					
						
							|  |  |  |  | #include <LibWeb/WebIDL/Promise.h>
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace Web::Streams { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // https://streams.spec.whatwg.org/#writablestreamdefaultwriter
 | 
					
						
							|  |  |  |  | class WritableStreamDefaultWriter final : public Bindings::PlatformObject { | 
					
						
							|  |  |  |  |     WEB_PLATFORM_OBJECT(WritableStreamDefaultWriter, Bindings::PlatformObject); | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |  |     GC_DECLARE_ALLOCATOR(WritableStreamDefaultWriter); | 
					
						
							| 
									
										
										
										
											2023-03-30 19:27:45 -07:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |  |     static WebIDL::ExceptionOr<GC::Ref<WritableStreamDefaultWriter>> construct_impl(JS::Realm&, GC::Ref<WritableStream>); | 
					
						
							| 
									
										
										
										
											2023-03-30 19:27:45 -07:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |     virtual ~WritableStreamDefaultWriter() override = default; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |  |     GC::Ptr<WebIDL::Promise> closed(); | 
					
						
							| 
									
										
										
										
											2023-03-30 19:27:45 -07:00
										 |  |  |  |     WebIDL::ExceptionOr<Optional<double>> desired_size() const; | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |  |     GC::Ptr<WebIDL::Promise> ready(); | 
					
						
							| 
									
										
										
										
											2024-11-17 04:39:34 +13:00
										 |  |  |  |     GC::Ref<WebIDL::Promise> abort(JS::Value reason); | 
					
						
							|  |  |  |  |     GC::Ref<WebIDL::Promise> close(); | 
					
						
							| 
									
										
										
										
											2024-04-29 18:15:07 -04:00
										 |  |  |  |     void release_lock(); | 
					
						
							| 
									
										
										
										
											2024-11-17 04:39:34 +13:00
										 |  |  |  |     GC::Ref<WebIDL::Promise> write(JS::Value chunk); | 
					
						
							| 
									
										
										
										
											2023-03-30 19:27:45 -07:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |  |     GC::Ptr<WebIDL::Promise> closed_promise() { return m_closed_promise; } | 
					
						
							|  |  |  |  |     void set_closed_promise(GC::Ptr<WebIDL::Promise> value) { m_closed_promise = value; } | 
					
						
							| 
									
										
										
										
											2023-03-30 19:27:45 -07:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |  |     GC::Ptr<WebIDL::Promise> ready_promise() { return m_ready_promise; } | 
					
						
							|  |  |  |  |     void set_ready_promise(GC::Ptr<WebIDL::Promise> value) { m_ready_promise = value; } | 
					
						
							| 
									
										
										
										
											2023-03-30 19:27:45 -07:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |  |     GC::Ptr<WritableStream const> stream() const { return m_stream; } | 
					
						
							|  |  |  |  |     GC::Ptr<WritableStream> stream() { return m_stream; } | 
					
						
							|  |  |  |  |     void set_stream(GC::Ptr<WritableStream> value) { m_stream = value; } | 
					
						
							| 
									
										
										
										
											2023-03-30 19:27:45 -07:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | private: | 
					
						
							|  |  |  |  |     explicit WritableStreamDefaultWriter(JS::Realm&); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-07 08:41:28 +02:00
										 |  |  |  |     virtual void initialize(JS::Realm&) override; | 
					
						
							| 
									
										
										
										
											2023-03-30 19:27:45 -07:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |     virtual void visit_edges(Cell::Visitor&) override; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // https://streams.spec.whatwg.org/#writablestreamdefaultwriter-closedpromise
 | 
					
						
							|  |  |  |  |     // A promise returned by the writer’s closed getter
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |  |     GC::Ptr<WebIDL::Promise> m_closed_promise; | 
					
						
							| 
									
										
										
										
											2023-03-30 19:27:45 -07:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |     // https://streams.spec.whatwg.org/#writablestreamdefaultwriter-readypromise
 | 
					
						
							|  |  |  |  |     // A promise returned by the writer’s ready getter
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |  |     GC::Ptr<WebIDL::Promise> m_ready_promise; | 
					
						
							| 
									
										
										
										
											2023-03-30 19:27:45 -07:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |     // https://streams.spec.whatwg.org/#writablestreamdefaultwriter-stream
 | 
					
						
							|  |  |  |  |     // A WritableStream instance that owns this reader
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |  |     GC::Ptr<WritableStream> m_stream; | 
					
						
							| 
									
										
										
										
											2023-03-30 19:27:45 -07:00
										 |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | } |