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;