/* * Copyright (c) 2025, Luke Wilde * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Web::IndexedDB { class IDBDatabaseObserver final : public GC::Cell { GC_CELL(IDBDatabaseObserver, GC::Cell); GC_DECLARE_ALLOCATOR(IDBDatabaseObserver); public: static constexpr bool OVERRIDES_FINALIZE = true; virtual ~IDBDatabaseObserver(); [[nodiscard]] GC::Ptr> connection_state_changed_observer() const { return m_connection_state_changed_observer; } void set_connection_state_changed_observer(GC::Ptr> callback) { m_connection_state_changed_observer = callback; } GC::Ref database() const { return m_database; } void unobserve(); private: explicit IDBDatabaseObserver(IDBDatabase&); virtual void visit_edges(Cell::Visitor&) override; virtual void finalize() override; bool m_observing { false }; GC::Ref m_database; GC::Ptr> m_connection_state_changed_observer; }; }