diff --git a/Userland/Libraries/LibWeb/HTML/Navigator.cpp b/Userland/Libraries/LibWeb/HTML/Navigator.cpp index df9ec06aeed..9c0f2d15630 100644 --- a/Userland/Libraries/LibWeb/HTML/Navigator.cpp +++ b/Userland/Libraries/LibWeb/HTML/Navigator.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -64,6 +65,7 @@ void Navigator::visit_edges(Cell::Visitor& visitor) visitor.visit(m_plugin_array); visitor.visit(m_clipboard); visitor.visit(m_user_activation); + visitor.visit(m_service_worker_container); } JS::NonnullGCPtr Navigator::mime_types() @@ -113,4 +115,11 @@ Optional Navigator::do_not_track() const return {}; } +JS::NonnullGCPtr Navigator::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/Navigator.h b/Userland/Libraries/LibWeb/HTML/Navigator.h index 7d85faea3cb..de5703ba2cb 100644 --- a/Userland/Libraries/LibWeb/HTML/Navigator.h +++ b/Userland/Libraries/LibWeb/HTML/Navigator.h @@ -54,6 +54,8 @@ public: Optional do_not_track() const; + JS::NonnullGCPtr service_worker(); + static WebIDL::Long max_touch_points(); virtual ~Navigator() override; @@ -77,6 +79,9 @@ private: // https://html.spec.whatwg.org/multipage/interaction.html#dom-navigator-useractivation JS::GCPtr m_user_activation; + + // https://w3c.github.io/ServiceWorker/#navigator-serviceworker + JS::GCPtr m_service_worker_container; }; } diff --git a/Userland/Libraries/LibWeb/HTML/Navigator.idl b/Userland/Libraries/LibWeb/HTML/Navigator.idl index a551d3c13c9..92655d8189a 100644 --- a/Userland/Libraries/LibWeb/HTML/Navigator.idl +++ b/Userland/Libraries/LibWeb/HTML/Navigator.idl @@ -6,6 +6,7 @@ #import #import #import +#import #import #import @@ -25,6 +26,9 @@ interface Navigator { // https://www.w3.org/TR/tracking-dnt/#dom-navigator-donottrack readonly attribute DOMString? doNotTrack; + + // https://w3c.github.io/ServiceWorker/#navigator-serviceworker + [SecureContext, SameObject] readonly attribute ServiceWorkerContainer serviceWorker; }; // NOTE: As NavigatorContentUtils, NavigatorCookies, NavigatorPlugins, and NavigatorAutomationInformation