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;