diff --git a/Tests/LibWeb/Text/expected/all-window-properties.txt b/Tests/LibWeb/Text/expected/all-window-properties.txt index 842fbd2dc0d..75bc8da272d 100644 --- a/Tests/LibWeb/Text/expected/all-window-properties.txt +++ b/Tests/LibWeb/Text/expected/all-window-properties.txt @@ -199,6 +199,7 @@ IDBDatabase IDBFactory IDBOpenDBRequest IDBRequest +IDBVersionChangeEvent IdleDeadline Image ImageBitmap diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 7e3d2c48fe8..026233f799a 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -507,6 +507,7 @@ set(SOURCES IndexedDB/IDBOpenDBRequest.cpp IndexedDB/IDBDatabase.cpp IndexedDB/IDBRequest.cpp + IndexedDB/IDBVersionChangeEvent.cpp Internals/Inspector.cpp Internals/InternalAnimationTimeline.cpp Internals/Internals.cpp diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 0e25e224d16..28da88a3d5f 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -571,6 +571,7 @@ class IDBFactory; class IDBDatabase; class IDBOpenDBRequest; class IDBRequest; +class IDBVersionChangeEvent; } namespace Web::Internals { diff --git a/Userland/Libraries/LibWeb/IndexedDB/IDBVersionChangeEvent.cpp b/Userland/Libraries/LibWeb/IndexedDB/IDBVersionChangeEvent.cpp new file mode 100644 index 00000000000..315d8ccdf48 --- /dev/null +++ b/Userland/Libraries/LibWeb/IndexedDB/IDBVersionChangeEvent.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2024, stelar7 + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include + +namespace Web::IndexedDB { + +JS_DEFINE_ALLOCATOR(IDBVersionChangeEvent); + +JS::NonnullGCPtr IDBVersionChangeEvent::create(JS::Realm& realm, FlyString const& event_name, IDBVersionChangeEventInit const& event_init) +{ + return realm.heap().allocate(realm, realm, event_name, event_init); +} + +IDBVersionChangeEvent::IDBVersionChangeEvent(JS::Realm& realm, FlyString const& event_name, IDBVersionChangeEventInit const& event_init) + : DOM::Event(realm, event_name, event_init) + , m_old_version(event_init.old_version) + , m_new_version(event_init.new_version) +{ +} + +IDBVersionChangeEvent::~IDBVersionChangeEvent() = default; + +void IDBVersionChangeEvent::initialize(JS::Realm& realm) +{ + Base::initialize(realm); + WEB_SET_PROTOTYPE_FOR_INTERFACE(IDBVersionChangeEvent); +} + +} diff --git a/Userland/Libraries/LibWeb/IndexedDB/IDBVersionChangeEvent.h b/Userland/Libraries/LibWeb/IndexedDB/IDBVersionChangeEvent.h new file mode 100644 index 00000000000..cb8e0858111 --- /dev/null +++ b/Userland/Libraries/LibWeb/IndexedDB/IDBVersionChangeEvent.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2024, stelar7 + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include + +namespace Web::IndexedDB { + +struct IDBVersionChangeEventInit : public DOM::EventInit { + u64 old_version { 0 }; + Optional new_version; +}; + +// https://w3c.github.io/IndexedDB/#events +class IDBVersionChangeEvent : public DOM::Event { + WEB_PLATFORM_OBJECT(IDBVersionChangeEvent, DOM::Event); + JS_DECLARE_ALLOCATOR(IDBVersionChangeEvent); + +public: + virtual ~IDBVersionChangeEvent() override; + + static JS::NonnullGCPtr create(JS::Realm&, FlyString const&, IDBVersionChangeEventInit const&); + + u64 old_version() const { return m_old_version; } + Optional new_version() const { return m_new_version; } + +protected: + explicit IDBVersionChangeEvent(JS::Realm&, FlyString const& event_name, IDBVersionChangeEventInit const& event_init); + + virtual void initialize(JS::Realm&) override; + +private: + u64 m_old_version { 0 }; + Optional m_new_version; +}; + +} diff --git a/Userland/Libraries/LibWeb/IndexedDB/IDBVersionChangeEvent.idl b/Userland/Libraries/LibWeb/IndexedDB/IDBVersionChangeEvent.idl new file mode 100644 index 00000000000..4a633d5c305 --- /dev/null +++ b/Userland/Libraries/LibWeb/IndexedDB/IDBVersionChangeEvent.idl @@ -0,0 +1,13 @@ +#import + +[Exposed=(Window,Worker)] +interface IDBVersionChangeEvent : Event { + constructor(DOMString type, optional IDBVersionChangeEventInit eventInitDict = {}); + readonly attribute unsigned long long oldVersion; + readonly attribute unsigned long long? newVersion; +}; + +dictionary IDBVersionChangeEventInit : EventInit { + unsigned long long oldVersion = 0; + unsigned long long? newVersion; +}; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index 5627dab9ccc..01a7539c5ac 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -247,6 +247,7 @@ libweb_js_bindings(IndexedDB/IDBDatabase) libweb_js_bindings(IndexedDB/IDBFactory) libweb_js_bindings(IndexedDB/IDBOpenDBRequest) libweb_js_bindings(IndexedDB/IDBRequest) +libweb_js_bindings(IndexedDB/IDBVersionChangeEvent) libweb_js_bindings(Internals/Inspector) libweb_js_bindings(Internals/InternalAnimationTimeline) libweb_js_bindings(Internals/Internals)