diff --git a/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.cpp b/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.cpp index 97b0333d873..ec3ce8230fb 100644 --- a/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.cpp +++ b/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.cpp @@ -70,6 +70,18 @@ void WorkerGlobalScope::set_internal_port(JS::NonnullGCPtr port) m_internal_port->set_worker_event_target(*this); } +// https://html.spec.whatwg.org/multipage/workers.html#close-a-worker +void WorkerGlobalScope::close() +{ + // 1. Discard any tasks that have been added to workerGlobal's relevant agent's event loop's task queues. + relevant_settings_object(*this).responsible_event_loop().task_queue().remove_tasks_matching([](HTML::Task const&) { + return true; + }); + + // 2. Set workerGlobal's closing flag to true. (This prevents any further tasks from being queued.) + m_closing = true; +} + // https://html.spec.whatwg.org/multipage/workers.html#importing-scripts-and-libraries WebIDL::ExceptionOr WorkerGlobalScope::import_scripts(Vector const& urls, PerformTheFetchHook perform_fetch) { diff --git a/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.h b/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.h index 813989af8d8..93333b2212e 100644 --- a/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.h +++ b/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.h @@ -97,6 +97,10 @@ public: PolicyContainer policy_container() const { return m_policy_container; } + bool is_closing() const { return m_closing; } + + void close(); + protected: explicit WorkerGlobalScope(JS::Realm&, JS::NonnullGCPtr); @@ -144,6 +148,9 @@ private: // https://html.spec.whatwg.org/multipage/workers.html#concept-workerglobalscope-cross-origin-isolated-capability bool m_cross_origin_isolated_capability { false }; + // https://html.spec.whatwg.org/multipage/workers.html#dom-workerglobalscope-closing + bool m_closing { false }; + // https://drafts.csswg.org/css-font-loading/#font-source JS::GCPtr m_fonts; };