diff --git a/Libraries/LibWeb/IndexedDB/IDBRequest.cpp b/Libraries/LibWeb/IndexedDB/IDBRequest.cpp index c0a25288abd..5297512be0a 100644 --- a/Libraries/LibWeb/IndexedDB/IDBRequest.cpp +++ b/Libraries/LibWeb/IndexedDB/IDBRequest.cpp @@ -76,4 +76,15 @@ WebIDL::CallbackType* IDBRequest::onerror() return m_error; } +// https://w3c.github.io/IndexedDB/#dom-idbrequest-result +[[nodiscard]] WebIDL::ExceptionOr IDBRequest::result() const +{ + // 1. If this's done flag is false, then throw an "InvalidStateError" DOMException. + if (!m_done) + return WebIDL::InvalidStateError::create(realm(), "The request is not done"_string); + + // 2. Otherwise, return this's result, or undefined if the request resulted in an error. + return m_result; +} + } diff --git a/Libraries/LibWeb/IndexedDB/IDBRequest.h b/Libraries/LibWeb/IndexedDB/IDBRequest.h index 652c6ea6bee..6c3bbc25d3d 100644 --- a/Libraries/LibWeb/IndexedDB/IDBRequest.h +++ b/Libraries/LibWeb/IndexedDB/IDBRequest.h @@ -22,13 +22,13 @@ class IDBRequest : public DOM::EventTarget { public: virtual ~IDBRequest() override; - [[nodiscard]] JS::Value result() const { return m_result; } [[nodiscard]] bool done() const { return m_done; } [[nodiscard]] bool processed() const { return m_processed; } [[nodiscard]] IDBRequestSource source() const { return m_source; } [[nodiscard]] Bindings::IDBRequestReadyState ready_state() const; [[nodiscard]] WebIDL::ExceptionOr> error() const; + [[nodiscard]] WebIDL::ExceptionOr result() const; void set_done(bool done) { m_done = done; } void set_result(JS::Value result) { m_result = result; }