/* * Copyright (c) 2024, Shannon Booth * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Web::HTML { // https://html.spec.whatwg.org/multipage/webstorage.html#storageeventinit struct StorageEventInit : public DOM::EventInit { Optional key; Optional old_value; Optional new_value; String url; GC::Ptr storage_area; }; // https://html.spec.whatwg.org/multipage/webstorage.html#storageevent class StorageEvent : public DOM::Event { WEB_PLATFORM_OBJECT(StorageEvent, DOM::Event); GC_DECLARE_ALLOCATOR(StorageEvent); public: [[nodiscard]] static GC::Ref create(JS::Realm&, FlyString const& event_name, StorageEventInit const& event_init = {}); static GC::Ref construct_impl(JS::Realm&, FlyString const& event_name, StorageEventInit const& event_init); virtual ~StorageEvent() override; Optional const& key() const { return m_key; } Optional const& old_value() const { return m_old_value; } Optional const& new_value() const { return m_new_value; } String const& url() const { return m_url; } GC::Ptr storage_area() const { return m_storage_area; } void init_storage_event(String const& type, bool bubbles = false, bool cancelable = false, Optional const& key = {}, Optional const& old_value = {}, Optional const& new_value = {}, String const& url = {}, GC::Ptr storage_area = {}); protected: virtual void visit_edges(Visitor& visitor) override; virtual void initialize(JS::Realm&) override; private: StorageEvent(JS::Realm&, FlyString const& event_name, StorageEventInit const& event_init); Optional m_key; Optional m_old_value; Optional m_new_value; String m_url; GC::Ptr m_storage_area; }; }