diff --git a/Userland/Libraries/LibWeb/HTML/WorkerNavigator.cpp b/Userland/Libraries/LibWeb/HTML/WorkerNavigator.cpp
index 291e4e3bd1b..73607051847 100644
--- a/Userland/Libraries/LibWeb/HTML/WorkerNavigator.cpp
+++ b/Userland/Libraries/LibWeb/HTML/WorkerNavigator.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2022, Andreas Kling
+ * Copyright (c) 2024, Jamie Mansfield
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@@ -32,4 +33,17 @@ void WorkerNavigator::initialize(JS::Realm& realm)
WEB_SET_PROTOTYPE_FOR_INTERFACE(WorkerNavigator);
}
+void WorkerNavigator::visit_edges(Cell::Visitor& visitor)
+{
+ Base::visit_edges(visitor);
+ visitor.visit(m_media_capabilities);
+}
+
+JS::NonnullGCPtr WorkerNavigator::media_capabilities()
+{
+ if (!m_media_capabilities)
+ m_media_capabilities = heap().allocate(realm(), realm());
+ return *m_media_capabilities;
+}
+
}
diff --git a/Userland/Libraries/LibWeb/HTML/WorkerNavigator.h b/Userland/Libraries/LibWeb/HTML/WorkerNavigator.h
index 640a12b9df8..5bbb96ca80f 100644
--- a/Userland/Libraries/LibWeb/HTML/WorkerNavigator.h
+++ b/Userland/Libraries/LibWeb/HTML/WorkerNavigator.h
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2022, Andrew Kaster
+ * Copyright (c) 2024, Jamie Mansfield
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@@ -11,6 +12,7 @@
#include
#include
#include
+#include
#include
namespace Web::HTML {
@@ -29,13 +31,19 @@ public:
virtual ~WorkerNavigator() override;
+ JS::NonnullGCPtr media_capabilities();
+
private:
explicit WorkerNavigator(WorkerGlobalScope&);
virtual void initialize(JS::Realm&) override;
+ virtual void visit_edges(Cell::Visitor&) override;
// ^StorageAPI::NavigatorStorage
virtual Bindings::PlatformObject const& this_navigator_storage_object() const override { return *this; }
+
+ // https://w3c.github.io/media-capabilities/#dom-workernavigator-mediacapabilities
+ JS::GCPtr m_media_capabilities;
};
}
diff --git a/Userland/Libraries/LibWeb/HTML/WorkerNavigator.idl b/Userland/Libraries/LibWeb/HTML/WorkerNavigator.idl
index 9cdee99fad3..6356f9e6cef 100644
--- a/Userland/Libraries/LibWeb/HTML/WorkerNavigator.idl
+++ b/Userland/Libraries/LibWeb/HTML/WorkerNavigator.idl
@@ -2,11 +2,15 @@
#import
#import
#import
+#import
#import
// https://html.spec.whatwg.org/multipage/workers.html#workernavigator
[Exposed=Worker]
-interface WorkerNavigator {};
+interface WorkerNavigator {
+ // https://w3c.github.io/media-capabilities/#dom-workernavigator-mediacapabilities
+ [SameObject] readonly attribute MediaCapabilities mediaCapabilities;
+};
WorkerNavigator includes NavigatorID;
WorkerNavigator includes NavigatorLanguage;