/* * Copyright (c) 2025, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace WebView { class SettingsObserver { public: SettingsObserver(); virtual ~SettingsObserver(); virtual void new_tab_page_url_changed() { } virtual void search_engine_changed() { } }; class Settings { public: static Settings create(Badge); String serialize_json() const; void restore_defaults(); URL::URL const& new_tab_page_url() const { return m_new_tab_page_url; } void set_new_tab_page_url(URL::URL); Optional const& search_engine() const { return m_search_engine; } void set_search_engine(Optional search_engine_name); static void add_observer(Badge, SettingsObserver&); static void remove_observer(Badge, SettingsObserver&); private: explicit Settings(ByteString settings_path); void persist_settings(); ByteString m_settings_path; URL::URL m_new_tab_page_url; Optional m_search_engine; Vector m_observers; }; }