/* * Copyright (c) 2024, Tim Ledbetter * Copyright (c) 2024, Jamie Mansfield * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #define ENUMERATE_SERVICE_WORKER_CONTAINER_EVENT_HANDLERS(E) \ E(oncontrollerchange, HTML::EventNames::controllerchange) \ E(onmessage, HTML::EventNames::message) \ E(onmessageerror, HTML::EventNames::messageerror) namespace Web::HTML { struct RegistrationOptions { Optional scope; Bindings::WorkerType type = Bindings::WorkerType::Classic; Bindings::ServiceWorkerUpdateViaCache update_via_cache = Bindings::ServiceWorkerUpdateViaCache::Imports; }; class ServiceWorkerContainer : public DOM::EventTarget { WEB_PLATFORM_OBJECT(ServiceWorkerContainer, DOM::EventTarget); GC_DECLARE_ALLOCATOR(ServiceWorkerContainer); public: [[nodiscard]] static GC::Ref create(JS::Realm& realm); virtual ~ServiceWorkerContainer() override; GC::Ref register_(String script_url, RegistrationOptions const& options); #undef __ENUMERATE #define __ENUMERATE(attribute_name, event_name) \ void set_##attribute_name(WebIDL::CallbackType*); \ WebIDL::CallbackType* attribute_name(); ENUMERATE_SERVICE_WORKER_CONTAINER_EVENT_HANDLERS(__ENUMERATE) #undef __ENUMERATE private: explicit ServiceWorkerContainer(JS::Realm&); virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; void start_register(Optional scope_url, URL::URL script_url, GC::Ref, EnvironmentSettingsObject&, URL::URL referrer, Bindings::WorkerType, Bindings::ServiceWorkerUpdateViaCache); GC::Ref m_service_worker_client; }; }