DedicatedWorkerGlobalScope.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * Copyright (c) 2024, Andrew Kaster <akaster@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibWeb/Bindings/DedicatedWorkerExposedInterfaces.h>
  7. #include <LibWeb/Bindings/DedicatedWorkerGlobalScopePrototype.h>
  8. #include <LibWeb/Bindings/Intrinsics.h>
  9. #include <LibWeb/HTML/DedicatedWorkerGlobalScope.h>
  10. #include <LibWeb/HTML/EventHandler.h>
  11. #include <LibWeb/HTML/EventNames.h>
  12. #include <LibWeb/HTML/MessageEvent.h>
  13. #include <LibWeb/HTML/MessagePort.h>
  14. namespace Web::HTML {
  15. JS_DEFINE_ALLOCATOR(DedicatedWorkerGlobalScope);
  16. DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope(JS::Realm& realm, JS::NonnullGCPtr<Web::Page> page)
  17. : WorkerGlobalScope(realm, page)
  18. {
  19. m_legacy_platform_object_flags = LegacyPlatformObjectFlags { .has_global_interface_extended_attribute = true };
  20. }
  21. DedicatedWorkerGlobalScope::~DedicatedWorkerGlobalScope() = default;
  22. void DedicatedWorkerGlobalScope::initialize_web_interfaces_impl()
  23. {
  24. auto& realm = this->realm();
  25. add_dedicated_worker_exposed_interfaces(*this);
  26. DedicatedWorkerGlobalScopeGlobalMixin::initialize(realm, *this);
  27. Base::initialize_web_interfaces_impl();
  28. }
  29. // https://html.spec.whatwg.org/multipage/workers.html#dom-dedicatedworkerglobalscope-close
  30. void DedicatedWorkerGlobalScope::close()
  31. {
  32. // The close() method steps are to close a worker given this.
  33. close_a_worker();
  34. }
  35. void DedicatedWorkerGlobalScope::finalize()
  36. {
  37. Base::finalize();
  38. WindowOrWorkerGlobalScopeMixin::finalize();
  39. }
  40. WebIDL::ExceptionOr<void> DedicatedWorkerGlobalScope::post_message(JS::Value message, StructuredSerializeOptions const& options)
  41. {
  42. // The postMessage(message, transfer) and postMessage(message, options) methods on DedicatedWorkerGlobalScope objects act as if,
  43. // when invoked, it immediately invoked the respective postMessage(message, transfer) and postMessage(message, options)
  44. // on the port, with the same arguments, and returned the same return value.
  45. return m_internal_port->post_message(message, options);
  46. }
  47. #undef __ENUMERATE
  48. #define __ENUMERATE(attribute_name, event_name) \
  49. void DedicatedWorkerGlobalScope::set_##attribute_name(WebIDL::CallbackType* value) \
  50. { \
  51. set_event_handler_attribute(event_name, move(value)); \
  52. } \
  53. WebIDL::CallbackType* DedicatedWorkerGlobalScope::attribute_name() \
  54. { \
  55. return event_handler_attribute(event_name); \
  56. }
  57. ENUMERATE_DEDICATED_WORKER_GLOBAL_SCOPE_EVENT_HANDLERS(__ENUMERATE)
  58. #undef __ENUMERATE
  59. }