mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 06:32:44 +00:00 
			
		
		
		
	LibWeb: Add AO create_readable_stream()
This commit is contained in:
		
							parent
							
								
									8e6b386ff7
								
							
						
					
					
						commit
						a52f9970bc
					
				
					 2 changed files with 31 additions and 0 deletions
				
			
		|  | @ -1156,6 +1156,36 @@ bool readable_byte_stream_controller_should_call_pull(ReadableByteStreamControll | |||
|     return false; | ||||
| } | ||||
| 
 | ||||
| // https://streams.spec.whatwg.org/#create-readable-stream
 | ||||
| WebIDL::ExceptionOr<JS::NonnullGCPtr<ReadableStream>> create_readable_stream(JS::Realm& realm, StartAlgorithm&& start_algorithm, PullAlgorithm&& pull_algorithm, CancelAlgorithm&& cancel_algorithm, Optional<double> high_water_mark, Optional<SizeAlgorithm>&& size_algorithm) | ||||
| { | ||||
|     // 1. If highWaterMark was not passed, set it to 1.
 | ||||
|     if (!high_water_mark.has_value()) | ||||
|         high_water_mark = 1.0; | ||||
| 
 | ||||
|     // 2. If sizeAlgorithm was not passed, set it to an algorithm that returns 1.
 | ||||
|     if (!size_algorithm.has_value()) | ||||
|         size_algorithm = [](auto const&) { return JS::normal_completion(JS::Value(1)); }; | ||||
| 
 | ||||
|     // 3. Assert: ! IsNonNegativeNumber(highWaterMark) is true.
 | ||||
|     VERIFY(is_non_negative_number(JS::Value { *high_water_mark })); | ||||
| 
 | ||||
|     // 4. Let stream be a new ReadableStream.
 | ||||
|     auto stream = MUST_OR_THROW_OOM(realm.heap().allocate<ReadableStream>(realm, realm)); | ||||
| 
 | ||||
|     // 5. Perform ! InitializeReadableStream(stream).
 | ||||
|     initialize_readable_stream(*stream); | ||||
| 
 | ||||
|     // 6. Let controller be a new ReadableStreamDefaultController.
 | ||||
|     auto controller = MUST_OR_THROW_OOM(realm.heap().allocate<ReadableStreamDefaultController>(realm, realm)); | ||||
| 
 | ||||
|     // 7. Perform ? SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm).
 | ||||
|     TRY(set_up_readable_stream_default_controller(*stream, *controller, move(start_algorithm), move(pull_algorithm), move(cancel_algorithm), *high_water_mark, move(*size_algorithm))); | ||||
| 
 | ||||
|     // 8. Return stream.
 | ||||
|     return stream; | ||||
| } | ||||
| 
 | ||||
| // https://streams.spec.whatwg.org/#create-writable-stream
 | ||||
| WebIDL::ExceptionOr<JS::NonnullGCPtr<WritableStream>> create_writable_stream(JS::Realm& realm, StartAlgorithm&& start_algorithm, WriteAlgorithm&& write_algorithm, CloseAlgorithm&& close_algorithm, AbortAlgorithm&& abort_algorithm, double high_water_mark, SizeAlgorithm&& size_algorithm) | ||||
| { | ||||
|  |  | |||
|  | @ -90,6 +90,7 @@ WebIDL::ExceptionOr<void> readable_byte_stream_controller_handle_queue_drain(Rea | |||
| void readable_byte_stream_controller_invalidate_byob_request(ReadableByteStreamController&); | ||||
| bool readable_byte_stream_controller_should_call_pull(ReadableByteStreamController const&); | ||||
| 
 | ||||
| WebIDL::ExceptionOr<JS::NonnullGCPtr<ReadableStream>> create_readable_stream(JS::Realm& realm, StartAlgorithm&& start_algorithm, PullAlgorithm&& pull_algorithm, CancelAlgorithm&& cancel_algorithm, Optional<double> high_water_mark = {}, Optional<SizeAlgorithm>&& size_algorithm = {}); | ||||
| WebIDL::ExceptionOr<JS::NonnullGCPtr<WritableStream>> create_writable_stream(JS::Realm& realm, StartAlgorithm&& start_algorithm, WriteAlgorithm&& write_algorithm, CloseAlgorithm&& close_algorithm, AbortAlgorithm&& abort_algorithm, double high_water_mark, SizeAlgorithm&& size_algorithm); | ||||
| void initialize_readable_stream(ReadableStream&); | ||||
| void initialize_writable_stream(WritableStream&); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Kenneth Myhra
						Kenneth Myhra