ReadableStream.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibWeb/HTML/Window.h>
  7. #include <LibWeb/Streams/AbstractOperations.h>
  8. #include <LibWeb/Streams/ReadableStream.h>
  9. namespace Web::Streams {
  10. // https://streams.spec.whatwg.org/#rs-constructor
  11. WebIDL::ExceptionOr<JS::NonnullGCPtr<ReadableStream>> ReadableStream::create_with_global_object(HTML::Window& window)
  12. {
  13. auto* readable_stream = window.heap().allocate<ReadableStream>(window.realm(), window);
  14. return JS::NonnullGCPtr { *readable_stream };
  15. }
  16. ReadableStream::ReadableStream(HTML::Window& window)
  17. : PlatformObject(window.realm())
  18. {
  19. set_prototype(&window.cached_web_prototype("ReadableStream"));
  20. }
  21. ReadableStream::~ReadableStream() = default;
  22. void ReadableStream::visit_edges(Cell::Visitor& visitor)
  23. {
  24. Base::visit_edges(visitor);
  25. visitor.visit(m_controller);
  26. visitor.visit(m_reader);
  27. visitor.visit(m_stored_error);
  28. }
  29. // https://streams.spec.whatwg.org/#readablestream-locked
  30. bool ReadableStream::is_readable() const
  31. {
  32. // A ReadableStream stream is readable if stream.[[state]] is "readable".
  33. return m_state == State::Readable;
  34. }
  35. // https://streams.spec.whatwg.org/#readablestream-closed
  36. bool ReadableStream::is_closed() const
  37. {
  38. // A ReadableStream stream is closed if stream.[[state]] is "closed".
  39. return m_state == State::Closed;
  40. }
  41. // https://streams.spec.whatwg.org/#readablestream-errored
  42. bool ReadableStream::is_errored() const
  43. {
  44. // A ReadableStream stream is errored if stream.[[state]] is "errored".
  45. return m_state == State::Errored;
  46. }
  47. // https://streams.spec.whatwg.org/#readablestream-locked
  48. bool ReadableStream::is_locked() const
  49. {
  50. // A ReadableStream stream is locked if ! IsReadableStreamLocked(stream) returns true.
  51. return is_readable_stream_locked(*this);
  52. }
  53. // https://streams.spec.whatwg.org/#is-readable-stream-disturbed
  54. bool ReadableStream::is_disturbed() const
  55. {
  56. // A ReadableStream stream is disturbed if stream.[[disturbed]] is true.
  57. return m_disturbed;
  58. }
  59. }