/* * Copyright (c) 2025, Luke Wilde * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::IndexedDB { class IDBRequestObserver final : public GC::Cell { GC_CELL(IDBRequestObserver, GC::Cell); GC_DECLARE_ALLOCATOR(IDBRequestObserver); public: virtual ~IDBRequestObserver(); [[nodiscard]] GC::Ptr> request_processed_changed_observer() const { return m_request_processed_changed_observer; } void set_request_processed_changed_observer(GC::Ptr> callback) { m_request_processed_changed_observer = callback; } GC::Ref request() const { return m_request; } void unobserve(); private: explicit IDBRequestObserver(IDBRequest&); virtual void visit_edges(Cell::Visitor&) override; virtual void finalize() override; bool m_observing { false }; GC::Ref m_request; GC::Ptr> m_request_processed_changed_observer; }; }