/* * Copyright (c) 2024, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Web::HTML { class WEB_API NavigationObserver final : public Bindings::PlatformObject { WEB_PLATFORM_OBJECT(NavigationObserver, Bindings::PlatformObject); GC_DECLARE_ALLOCATOR(NavigationObserver); public: [[nodiscard]] GC::Ptr> navigation_complete() const { return m_navigation_complete; } void set_navigation_complete(Function); [[nodiscard]] GC::Ptr> ongoing_navigation_changed() const { return m_ongoing_navigation_changed; } void set_ongoing_navigation_changed(Function); private: NavigationObserver(JS::Realm&, Navigable&); virtual void visit_edges(Cell::Visitor&) override; virtual void finalize() override; IntrusiveListNode m_list_node; GC::Ref m_navigable; GC::Ptr> m_navigation_complete; GC::Ptr> m_ongoing_navigation_changed; public: using NavigationObserversList = IntrusiveList<&NavigationObserver::m_list_node>; }; }