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