diff --git a/Libraries/LibWeb/IndexedDB/IDBRequest.cpp b/Libraries/LibWeb/IndexedDB/IDBRequest.cpp index bc3edb0f485..c0a25288abd 100644 --- a/Libraries/LibWeb/IndexedDB/IDBRequest.cpp +++ b/Libraries/LibWeb/IndexedDB/IDBRequest.cpp @@ -65,4 +65,15 @@ WebIDL::CallbackType* IDBRequest::onerror() return m_done ? Bindings::IDBRequestReadyState::Done : Bindings::IDBRequestReadyState::Pending; } +// https://w3c.github.io/IndexedDB/#dom-idbrequest-error +[[nodiscard]] WebIDL::ExceptionOr> IDBRequest::error() 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 error, or null if no error occurred. + return m_error; +} + } diff --git a/Libraries/LibWeb/IndexedDB/IDBRequest.h b/Libraries/LibWeb/IndexedDB/IDBRequest.h index 6232818e111..652c6ea6bee 100644 --- a/Libraries/LibWeb/IndexedDB/IDBRequest.h +++ b/Libraries/LibWeb/IndexedDB/IDBRequest.h @@ -23,12 +23,12 @@ public: virtual ~IDBRequest() override; [[nodiscard]] JS::Value result() const { return m_result; } - [[nodiscard]] GC::Ptr error() const { return m_error; } [[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; void set_done(bool done) { m_done = done; } void set_result(JS::Value result) { m_result = result; }