diff --git a/Libraries/LibWeb/CMakeLists.txt b/Libraries/LibWeb/CMakeLists.txt index 625534295a..601716b3a8 100644 --- a/Libraries/LibWeb/CMakeLists.txt +++ b/Libraries/LibWeb/CMakeLists.txt @@ -463,9 +463,6 @@ set(SOURCES HTML/Scripting/SerializedEnvironmentSettingsObject.cpp HTML/SelectedFile.cpp HTML/SelectItem.cpp - HTML/ServiceWorker.cpp - HTML/ServiceWorkerContainer.cpp - HTML/ServiceWorkerRegistration.cpp HTML/SessionHistoryEntry.cpp HTML/SessionHistoryTraversalQueue.cpp HTML/ShadowRealmGlobalScope.cpp @@ -670,7 +667,10 @@ set(SOURCES SecureContexts/AbstractOperations.cpp ServiceWorker/Job.cpp ServiceWorker/Registration.cpp + ServiceWorker/ServiceWorker.cpp + ServiceWorker/ServiceWorkerContainer.cpp ServiceWorker/ServiceWorkerRecord.cpp + ServiceWorker/ServiceWorkerRegistration.cpp SRI/SRI.cpp StorageAPI/NavigatorStorage.cpp StorageAPI/StorageKey.cpp diff --git a/Libraries/LibWeb/Forward.h b/Libraries/LibWeb/Forward.h index 5ca69c94fb..cf90e784ed 100644 --- a/Libraries/LibWeb/Forward.h +++ b/Libraries/LibWeb/Forward.h @@ -516,8 +516,6 @@ class PluginArray; class PromiseRejectionEvent; class RadioNodeList; class SelectedFile; -class ServiceWorkerContainer; -class ServiceWorkerRegistration; class SessionHistoryEntry; class SharedResourceRequest; class Storage; @@ -716,6 +714,12 @@ namespace Web::Selection { class Selection; } +namespace Web::ServiceWorker { +class ServiceWorker; +class ServiceWorkerContainer; +class ServiceWorkerRegistration; +} + namespace Web::Streams { class ByteLengthQueuingStrategy; class CountQueuingStrategy; diff --git a/Libraries/LibWeb/HTML/Navigator.cpp b/Libraries/LibWeb/HTML/Navigator.cpp index 478b975cb3..eaef3f4513 100644 --- a/Libraries/LibWeb/HTML/Navigator.cpp +++ b/Libraries/LibWeb/HTML/Navigator.cpp @@ -13,10 +13,10 @@ #include #include #include -#include #include #include #include +#include namespace Web::HTML { @@ -117,10 +117,10 @@ Optional Navigator::do_not_track() const return {}; } -GC::Ref Navigator::service_worker() +GC::Ref Navigator::service_worker() { if (!m_service_worker_container) - m_service_worker_container = realm().create(realm()); + m_service_worker_container = realm().create(realm()); return *m_service_worker_container; } diff --git a/Libraries/LibWeb/HTML/Navigator.h b/Libraries/LibWeb/HTML/Navigator.h index 2a72bcb8f7..ffbcd26b64 100644 --- a/Libraries/LibWeb/HTML/Navigator.h +++ b/Libraries/LibWeb/HTML/Navigator.h @@ -57,7 +57,7 @@ public: Optional do_not_track() const; - GC::Ref service_worker(); + GC::Ref service_worker(); GC::Ref media_capabilities(); @@ -86,7 +86,7 @@ private: GC::Ptr m_user_activation; // https://w3c.github.io/ServiceWorker/#navigator-serviceworker - GC::Ptr m_service_worker_container; + GC::Ptr m_service_worker_container; // https://w3c.github.io/media-capabilities/#dom-navigator-mediacapabilities GC::Ptr m_media_capabilities; diff --git a/Libraries/LibWeb/HTML/Navigator.idl b/Libraries/LibWeb/HTML/Navigator.idl index e93f60d8cd..cae3a1e69d 100644 --- a/Libraries/LibWeb/HTML/Navigator.idl +++ b/Libraries/LibWeb/HTML/Navigator.idl @@ -7,9 +7,9 @@ #import #import #import -#import #import #import +#import #import // https://html.spec.whatwg.org/multipage/system-state.html#navigator diff --git a/Libraries/LibWeb/HTML/WorkerNavigator.cpp b/Libraries/LibWeb/HTML/WorkerNavigator.cpp index 67145d68fc..188b61ae07 100644 --- a/Libraries/LibWeb/HTML/WorkerNavigator.cpp +++ b/Libraries/LibWeb/HTML/WorkerNavigator.cpp @@ -47,10 +47,10 @@ GC::Ref WorkerNavigator::media_capabili return *m_media_capabilities; } -GC::Ref WorkerNavigator::service_worker() +GC::Ref WorkerNavigator::service_worker() { if (!m_service_worker_container) - m_service_worker_container = realm().create(realm()); + m_service_worker_container = realm().create(realm()); return *m_service_worker_container; } diff --git a/Libraries/LibWeb/HTML/WorkerNavigator.h b/Libraries/LibWeb/HTML/WorkerNavigator.h index ab76f1347d..94ecdd6f9b 100644 --- a/Libraries/LibWeb/HTML/WorkerNavigator.h +++ b/Libraries/LibWeb/HTML/WorkerNavigator.h @@ -13,8 +13,8 @@ #include #include #include -#include #include +#include #include namespace Web::HTML { @@ -32,7 +32,7 @@ class WorkerNavigator : public Bindings::PlatformObject public: [[nodiscard]] static GC::Ref create(WorkerGlobalScope&); - GC::Ref service_worker(); + GC::Ref service_worker(); virtual ~WorkerNavigator() override; @@ -50,7 +50,7 @@ private: // https://w3c.github.io/media-capabilities/#dom-workernavigator-mediacapabilities GC::Ptr m_media_capabilities; - GC::Ptr m_service_worker_container; + GC::Ptr m_service_worker_container; }; } diff --git a/Libraries/LibWeb/HTML/ServiceWorker.cpp b/Libraries/LibWeb/ServiceWorker/ServiceWorker.cpp similarity index 94% rename from Libraries/LibWeb/HTML/ServiceWorker.cpp rename to Libraries/LibWeb/ServiceWorker/ServiceWorker.cpp index 9af4e8dd2c..6ccf9d8a2b 100644 --- a/Libraries/LibWeb/HTML/ServiceWorker.cpp +++ b/Libraries/LibWeb/ServiceWorker/ServiceWorker.cpp @@ -8,9 +8,9 @@ #include #include #include -#include +#include -namespace Web::HTML { +namespace Web::ServiceWorker { ServiceWorker::ServiceWorker(JS::Realm& realm, String script_url) : DOM::EventTarget(realm) diff --git a/Libraries/LibWeb/HTML/ServiceWorker.h b/Libraries/LibWeb/ServiceWorker/ServiceWorker.h similarity index 97% rename from Libraries/LibWeb/HTML/ServiceWorker.h rename to Libraries/LibWeb/ServiceWorker/ServiceWorker.h index 89cc547ba6..39531f9759 100644 --- a/Libraries/LibWeb/HTML/ServiceWorker.h +++ b/Libraries/LibWeb/ServiceWorker/ServiceWorker.h @@ -13,7 +13,7 @@ E(onstatechange, HTML::EventNames::statechange) \ E(onerror, HTML::EventNames::error) -namespace Web::HTML { +namespace Web::ServiceWorker { class ServiceWorker : public DOM::EventTarget { WEB_PLATFORM_OBJECT(ServiceWorker, DOM::EventTarget); diff --git a/Libraries/LibWeb/HTML/ServiceWorker.idl b/Libraries/LibWeb/ServiceWorker/ServiceWorker.idl similarity index 100% rename from Libraries/LibWeb/HTML/ServiceWorker.idl rename to Libraries/LibWeb/ServiceWorker/ServiceWorker.idl diff --git a/Libraries/LibWeb/HTML/ServiceWorkerContainer.cpp b/Libraries/LibWeb/ServiceWorker/ServiceWorkerContainer.cpp similarity index 93% rename from Libraries/LibWeb/HTML/ServiceWorkerContainer.cpp rename to Libraries/LibWeb/ServiceWorker/ServiceWorkerContainer.cpp index 32fe8b56e6..a31e75cf36 100644 --- a/Libraries/LibWeb/HTML/ServiceWorkerContainer.cpp +++ b/Libraries/LibWeb/ServiceWorker/ServiceWorkerContainer.cpp @@ -10,17 +10,18 @@ #include #include #include -#include #include +#include +#include #include -namespace Web::HTML { +namespace Web::ServiceWorker { GC_DEFINE_ALLOCATOR(ServiceWorkerContainer); ServiceWorkerContainer::ServiceWorkerContainer(JS::Realm& realm) : DOM::EventTarget(realm) - , m_service_worker_client(relevant_settings_object(*this)) + , m_service_worker_client(HTML::relevant_settings_object(*this)) { } @@ -61,7 +62,7 @@ GC::Ref ServiceWorkerContainer::register_(String script_url, Re auto client = m_service_worker_client; // 4. Let scriptURL be the result of parsing scriptURL with this's relevant settings object’s API base URL. - auto base_url = relevant_settings_object(*this).api_base_url(); + auto base_url = HTML::relevant_settings_object(*this).api_base_url(); auto parsed_script_url = DOMURL::parse(script_url, base_url); // 5. Let scopeURL be null. @@ -80,7 +81,7 @@ GC::Ref ServiceWorkerContainer::register_(String script_url, Re } // https://w3c.github.io/ServiceWorker/#start-register-algorithm -void ServiceWorkerContainer::start_register(Optional scope_url, URL::URL script_url, GC::Ref promise, EnvironmentSettingsObject& client, URL::URL referrer, Bindings::WorkerType worker_type, Bindings::ServiceWorkerUpdateViaCache update_via_cache) +void ServiceWorkerContainer::start_register(Optional scope_url, URL::URL script_url, GC::Ref promise, HTML::EnvironmentSettingsObject& client, URL::URL referrer, Bindings::WorkerType worker_type, Bindings::ServiceWorkerUpdateViaCache update_via_cache) { auto& realm = this->realm(); auto& vm = realm.vm(); @@ -155,7 +156,7 @@ void ServiceWorkerContainer::start_register(Optional scope_url, URL::U } // 11. Let job be the result of running Create Job with register, storage key, scopeURL, scriptURL, promise, and client. - auto job = ServiceWorker::Job::create(vm, ServiceWorker::Job::Type::Register, storage_key.value(), scope_url.value(), script_url, promise, client); + auto job = Job::create(vm, Job::Type::Register, storage_key.value(), scope_url.value(), script_url, promise, client); // 12. Set job’s worker type to workerType. job->worker_type = worker_type; @@ -167,7 +168,7 @@ void ServiceWorkerContainer::start_register(Optional scope_url, URL::U job->referrer = move(referrer); // 15. Invoke Schedule Job with job. - ServiceWorker::schedule_job(vm, job); + schedule_job(vm, job); } #undef __ENUMERATE diff --git a/Libraries/LibWeb/HTML/ServiceWorkerContainer.h b/Libraries/LibWeb/ServiceWorker/ServiceWorkerContainer.h similarity index 87% rename from Libraries/LibWeb/HTML/ServiceWorkerContainer.h rename to Libraries/LibWeb/ServiceWorker/ServiceWorkerContainer.h index e640ee2ef8..5878088992 100644 --- a/Libraries/LibWeb/HTML/ServiceWorkerContainer.h +++ b/Libraries/LibWeb/ServiceWorker/ServiceWorkerContainer.h @@ -18,7 +18,7 @@ E(onmessage, HTML::EventNames::message) \ E(onmessageerror, HTML::EventNames::messageerror) -namespace Web::HTML { +namespace Web::ServiceWorker { struct RegistrationOptions { Optional scope; @@ -49,9 +49,9 @@ private: 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); + void start_register(Optional scope_url, URL::URL script_url, GC::Ref, HTML::EnvironmentSettingsObject&, URL::URL referrer, Bindings::WorkerType, Bindings::ServiceWorkerUpdateViaCache); - GC::Ref m_service_worker_client; + GC::Ref m_service_worker_client; }; } diff --git a/Libraries/LibWeb/HTML/ServiceWorkerContainer.idl b/Libraries/LibWeb/ServiceWorker/ServiceWorkerContainer.idl similarity index 96% rename from Libraries/LibWeb/HTML/ServiceWorkerContainer.idl rename to Libraries/LibWeb/ServiceWorker/ServiceWorkerContainer.idl index c8567dc23f..9047dbb5c3 100644 --- a/Libraries/LibWeb/HTML/ServiceWorkerContainer.idl +++ b/Libraries/LibWeb/ServiceWorker/ServiceWorkerContainer.idl @@ -1,7 +1,7 @@ #import #import -#import #import +#import // https://w3c.github.io/ServiceWorker/#serviceworkercontainer-interface [SecureContext, Exposed=(Window,Worker)] diff --git a/Libraries/LibWeb/HTML/ServiceWorkerRegistration.cpp b/Libraries/LibWeb/ServiceWorker/ServiceWorkerRegistration.cpp similarity index 88% rename from Libraries/LibWeb/HTML/ServiceWorkerRegistration.cpp rename to Libraries/LibWeb/ServiceWorker/ServiceWorkerRegistration.cpp index d7e50e81c7..607e05f9ce 100644 --- a/Libraries/LibWeb/HTML/ServiceWorkerRegistration.cpp +++ b/Libraries/LibWeb/ServiceWorker/ServiceWorkerRegistration.cpp @@ -7,9 +7,9 @@ #include #include #include -#include +#include -namespace Web::HTML { +namespace Web::ServiceWorker { GC_DEFINE_ALLOCATOR(ServiceWorkerRegistration); diff --git a/Libraries/LibWeb/HTML/ServiceWorkerRegistration.h b/Libraries/LibWeb/ServiceWorker/ServiceWorkerRegistration.h similarity index 95% rename from Libraries/LibWeb/HTML/ServiceWorkerRegistration.h rename to Libraries/LibWeb/ServiceWorker/ServiceWorkerRegistration.h index 12286782a5..e2b405126f 100644 --- a/Libraries/LibWeb/HTML/ServiceWorkerRegistration.h +++ b/Libraries/LibWeb/ServiceWorker/ServiceWorkerRegistration.h @@ -8,7 +8,7 @@ #include -namespace Web::HTML { +namespace Web::ServiceWorker { class ServiceWorkerRegistration : public DOM::EventTarget { WEB_PLATFORM_OBJECT(ServiceWorkerRegistration, DOM::EventTarget); diff --git a/Libraries/LibWeb/HTML/ServiceWorkerRegistration.idl b/Libraries/LibWeb/ServiceWorker/ServiceWorkerRegistration.idl similarity index 95% rename from Libraries/LibWeb/HTML/ServiceWorkerRegistration.idl rename to Libraries/LibWeb/ServiceWorker/ServiceWorkerRegistration.idl index 9f097e9f3e..9c7785305c 100644 --- a/Libraries/LibWeb/HTML/ServiceWorkerRegistration.idl +++ b/Libraries/LibWeb/ServiceWorker/ServiceWorkerRegistration.idl @@ -1,6 +1,6 @@ #import #import -#import +#import // https://w3c.github.io/ServiceWorker/#serviceworkerregistration-interface [SecureContext, Exposed=(Window,Worker)] diff --git a/Libraries/LibWeb/idl_files.cmake b/Libraries/LibWeb/idl_files.cmake index d50709e983..fbcd14f5b6 100644 --- a/Libraries/LibWeb/idl_files.cmake +++ b/Libraries/LibWeb/idl_files.cmake @@ -221,9 +221,6 @@ libweb_js_bindings(HTML/PluginArray) libweb_js_bindings(HTML/PopStateEvent) libweb_js_bindings(HTML/PromiseRejectionEvent) libweb_js_bindings(HTML/RadioNodeList) -libweb_js_bindings(HTML/ServiceWorker) -libweb_js_bindings(HTML/ServiceWorkerContainer) -libweb_js_bindings(HTML/ServiceWorkerRegistration) libweb_js_bindings(HTML/ShadowRealmGlobalScope GLOBAL) libweb_js_bindings(HTML/Storage) libweb_js_bindings(HTML/SubmitEvent) @@ -278,6 +275,9 @@ libweb_js_bindings(RequestIdleCallback/IdleDeadline) libweb_js_bindings(ResizeObserver/ResizeObserver) libweb_js_bindings(ResizeObserver/ResizeObserverEntry) libweb_js_bindings(ResizeObserver/ResizeObserverSize) +libweb_js_bindings(ServiceWorker/ServiceWorker) +libweb_js_bindings(ServiceWorker/ServiceWorkerContainer) +libweb_js_bindings(ServiceWorker/ServiceWorkerRegistration) libweb_js_bindings(Streams/ByteLengthQueuingStrategy) libweb_js_bindings(Streams/CountQueuingStrategy) libweb_js_bindings(Streams/ReadableByteStreamController) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp index 532a60cea7..784e0233ca 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp @@ -4308,6 +4308,7 @@ using namespace Web::PerformanceTimeline; using namespace Web::RequestIdleCallback; using namespace Web::ResizeObserver; using namespace Web::Selection; +using namespace Web::ServiceWorker; using namespace Web::StorageAPI; using namespace Web::Streams; using namespace Web::SVG; diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/Namespaces.h b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/Namespaces.h index f1f9de0a9f..a9ae100ff9 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/Namespaces.h +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/Namespaces.h @@ -35,6 +35,7 @@ static constexpr Array libweb_interface_namespaces = { "ResizeObserver"sv, "SVG"sv, "Selection"sv, + "ServiceWorker"sv, "UIEvents"sv, "WebAudio"sv, "WebGL"sv,