diff --git a/Userland/Libraries/LibWeb/IndexedDB/IDBRequest.cpp b/Userland/Libraries/LibWeb/IndexedDB/IDBRequest.cpp index 513fc730813..f451251f70b 100644 --- a/Userland/Libraries/LibWeb/IndexedDB/IDBRequest.cpp +++ b/Userland/Libraries/LibWeb/IndexedDB/IDBRequest.cpp @@ -27,6 +27,13 @@ void IDBRequest::initialize(JS::Realm& realm) WEB_SET_PROTOTYPE_FOR_INTERFACE(IDBRequest); } +void IDBRequest::visit_edges(Visitor& visitor) +{ + Base::visit_edges(visitor); + visitor.visit(m_error); + visitor.visit(m_result); +} + // https://w3c.github.io/IndexedDB/#dom-idbrequest-onsuccess void IDBRequest::set_onsuccess(WebIDL::CallbackType* event_handler) { diff --git a/Userland/Libraries/LibWeb/IndexedDB/IDBRequest.h b/Userland/Libraries/LibWeb/IndexedDB/IDBRequest.h index 4c44991fc56..db52ca93121 100644 --- a/Userland/Libraries/LibWeb/IndexedDB/IDBRequest.h +++ b/Userland/Libraries/LibWeb/IndexedDB/IDBRequest.h @@ -18,6 +18,16 @@ class IDBRequest : public DOM::EventTarget { public: virtual ~IDBRequest() override; + [[nodiscard]] JS::Value result() const { return m_result; } + [[nodiscard]] JS::GCPtr error() const { return m_error; } + [[nodiscard]] bool done() const { return m_done; } + [[nodiscard]] bool processed() const { return m_processed; } + + void set_done(bool done) { m_done = done; } + void set_result(JS::Value result) { m_result = result; } + void set_error(JS::GCPtr error) { m_error = error; } + void set_processed(bool processed) { m_processed = processed; } + void set_onsuccess(WebIDL::CallbackType*); WebIDL::CallbackType* onsuccess(); void set_onerror(WebIDL::CallbackType*); @@ -27,6 +37,18 @@ protected: explicit IDBRequest(JS::Realm&); virtual void initialize(JS::Realm&) override; + virtual void visit_edges(Visitor& visitor) override; + +private: + // A request has a processed flag which is initially false. + bool m_processed { false }; + // A request has a done flag which is initially false. + bool m_done { false }; + // A request has a result and an error + JS::Value m_result; + JS::GCPtr m_error; + // FIXME: A request has a source object. + // FIXME: A request has a transaction which is initially null. }; } diff --git a/Userland/Libraries/LibWeb/IndexedDB/IDBRequest.idl b/Userland/Libraries/LibWeb/IndexedDB/IDBRequest.idl index 808aa8867b7..bdbf2fa1102 100644 --- a/Userland/Libraries/LibWeb/IndexedDB/IDBRequest.idl +++ b/Userland/Libraries/LibWeb/IndexedDB/IDBRequest.idl @@ -3,8 +3,8 @@ // https://w3c.github.io/IndexedDB/#idbrequest [Exposed=(Window,Worker)] interface IDBRequest : EventTarget { - [FIXME] readonly attribute any result; - [FIXME] readonly attribute DOMException? error; + readonly attribute any result; + readonly attribute DOMException? error; [FIXME] readonly attribute (IDBObjectStore or IDBIndex or IDBCursor)? source; [FIXME] readonly attribute IDBTransaction? transaction; [FIXME] readonly attribute IDBRequestReadyState readyState;