diff --git a/Userland/Libraries/LibWeb/HTML/WorkerNavigator.cpp b/Userland/Libraries/LibWeb/HTML/WorkerNavigator.cpp index 73607051847..2c7ef220fb7 100644 --- a/Userland/Libraries/LibWeb/HTML/WorkerNavigator.cpp +++ b/Userland/Libraries/LibWeb/HTML/WorkerNavigator.cpp @@ -37,6 +37,7 @@ void WorkerNavigator::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_media_capabilities); + visitor.visit(m_service_worker_container); } JS::NonnullGCPtr WorkerNavigator::media_capabilities() @@ -46,4 +47,11 @@ JS::NonnullGCPtr WorkerNavigator::media return *m_media_capabilities; } +JS::NonnullGCPtr WorkerNavigator::service_worker() +{ + if (!m_service_worker_container) + m_service_worker_container = heap().allocate(realm(), realm()); + return *m_service_worker_container; +} + } diff --git a/Userland/Libraries/LibWeb/HTML/WorkerNavigator.h b/Userland/Libraries/LibWeb/HTML/WorkerNavigator.h index 5bbb96ca80f..51d7dc5f9d8 100644 --- a/Userland/Libraries/LibWeb/HTML/WorkerNavigator.h +++ b/Userland/Libraries/LibWeb/HTML/WorkerNavigator.h @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -29,6 +30,8 @@ class WorkerNavigator : public Bindings::PlatformObject public: [[nodiscard]] static JS::NonnullGCPtr create(WorkerGlobalScope&); + JS::NonnullGCPtr service_worker(); + virtual ~WorkerNavigator() override; JS::NonnullGCPtr media_capabilities(); @@ -44,6 +47,8 @@ private: // https://w3c.github.io/media-capabilities/#dom-workernavigator-mediacapabilities JS::GCPtr m_media_capabilities; + + JS::GCPtr m_service_worker_container; }; } diff --git a/Userland/Libraries/LibWeb/HTML/WorkerNavigator.idl b/Userland/Libraries/LibWeb/HTML/WorkerNavigator.idl index 6356f9e6cef..86bccd7652d 100644 --- a/Userland/Libraries/LibWeb/HTML/WorkerNavigator.idl +++ b/Userland/Libraries/LibWeb/HTML/WorkerNavigator.idl @@ -10,6 +10,9 @@ interface WorkerNavigator { // https://w3c.github.io/media-capabilities/#dom-workernavigator-mediacapabilities [SameObject] readonly attribute MediaCapabilities mediaCapabilities; + + // https://w3c.github.io/ServiceWorker/#navigator-serviceworker + [SecureContext, SameObject] readonly attribute ServiceWorkerContainer serviceWorker; }; WorkerNavigator includes NavigatorID;