LibWeb: Add IDBVersionChangeEvent

This commit is contained in:
stelar7 2024-11-04 19:17:54 +01:00 committed by Andrew Kaster
commit 54b5822e0b
Notes: github-actions[bot] 2024-11-08 18:11:21 +00:00
7 changed files with 96 additions and 0 deletions

View file

@ -199,6 +199,7 @@ IDBDatabase
IDBFactory
IDBOpenDBRequest
IDBRequest
IDBVersionChangeEvent
IdleDeadline
Image
ImageBitmap

View file

@ -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

View file

@ -571,6 +571,7 @@ class IDBFactory;
class IDBDatabase;
class IDBOpenDBRequest;
class IDBRequest;
class IDBVersionChangeEvent;
}
namespace Web::Internals {

View file

@ -0,0 +1,36 @@
/*
* Copyright (c) 2024, stelar7 <dudedbz@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibJS/Runtime/Realm.h>
#include <LibWeb/Bindings/IDBVersionChangeEventPrototype.h>
#include <LibWeb/Bindings/Intrinsics.h>
#include <LibWeb/IndexedDB/IDBVersionChangeEvent.h>
namespace Web::IndexedDB {
JS_DEFINE_ALLOCATOR(IDBVersionChangeEvent);
JS::NonnullGCPtr<IDBVersionChangeEvent> IDBVersionChangeEvent::create(JS::Realm& realm, FlyString const& event_name, IDBVersionChangeEventInit const& event_init)
{
return realm.heap().allocate<IDBVersionChangeEvent>(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);
}
}

View file

@ -0,0 +1,43 @@
/*
* Copyright (c) 2024, stelar7 <dudedbz@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibJS/Heap/GCPtr.h>
#include <LibWeb/DOM/Event.h>
#include <LibWeb/Forward.h>
namespace Web::IndexedDB {
struct IDBVersionChangeEventInit : public DOM::EventInit {
u64 old_version { 0 };
Optional<u64> 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<IDBVersionChangeEvent> create(JS::Realm&, FlyString const&, IDBVersionChangeEventInit const&);
u64 old_version() const { return m_old_version; }
Optional<u64> 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<u64> m_new_version;
};
}

View file

@ -0,0 +1,13 @@
#import <DOM/Event.idl>
[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;
};

View file

@ -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)