BroadcastChannel.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org>
  3. * Copyright (c) 2024, Shannon Booth <shannon@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <LibWeb/DOM/EventTarget.h>
  9. namespace Web::HTML {
  10. class BroadcastChannel final : public DOM::EventTarget {
  11. WEB_PLATFORM_OBJECT(BroadcastChannel, DOM::EventTarget);
  12. GC_DECLARE_ALLOCATOR(BroadcastChannel);
  13. public:
  14. [[nodiscard]] static GC::Ref<BroadcastChannel> construct_impl(JS::Realm&, FlyString const& name);
  15. // https://html.spec.whatwg.org/multipage/web-messaging.html#dom-broadcastchannel-name
  16. FlyString const& name() const
  17. {
  18. // The name getter steps are to return this's channel name.
  19. return m_channel_name;
  20. }
  21. WebIDL::ExceptionOr<void> post_message(JS::Value message);
  22. void close();
  23. void set_onmessage(GC::Ptr<WebIDL::CallbackType>);
  24. GC::Ptr<WebIDL::CallbackType> onmessage();
  25. void set_onmessageerror(GC::Ptr<WebIDL::CallbackType>);
  26. GC::Ptr<WebIDL::CallbackType> onmessageerror();
  27. private:
  28. BroadcastChannel(JS::Realm&, FlyString const& name);
  29. virtual void initialize(JS::Realm&) override;
  30. bool is_eligible_for_messaging() const;
  31. FlyString m_channel_name;
  32. bool m_closed_flag { false };
  33. };
  34. }