/* * Copyright (c) 2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include namespace Web::DOM { class Window final : public RefCounted , public EventTarget { public: static NonnullRefPtr create_with_document(Document&); ~Window(); using RefCounted::ref; using RefCounted::unref; virtual void ref_event_target() override { RefCounted::ref(); } virtual void unref_event_target() override { RefCounted::unref(); } virtual bool dispatch_event(NonnullRefPtr) override; virtual JS::Object* create_wrapper(JS::GlobalObject&) override; const Document& document() const { return m_document; } Document& document() { return m_document; } void alert(const String&); bool confirm(const String&); String prompt(const String&, const String&); i32 request_animation_frame(JS::Function&); void cancel_animation_frame(i32); i32 set_timeout(JS::Function&, i32); i32 set_interval(JS::Function&, i32); void clear_timeout(i32); void clear_interval(i32); int inner_width() const; int inner_height() const; void did_set_location_href(Badge, const URL& new_href); void did_call_location_reload(Badge); Bindings::WindowObject* wrapper() { return m_wrapper; } const Bindings::WindowObject* wrapper() const { return m_wrapper; } void set_wrapper(Badge, Bindings::WindowObject&); i32 allocate_timer_id(Badge); void deallocate_timer_id(Badge, i32); void timer_did_fire(Badge, Timer&); HighResolutionTime::Performance& performance() { return *m_performance; } CSS::Screen& screen() { return *m_screen; } const Event* current_event() const { return m_current_event; } void set_current_event(Event* event) { m_current_event = event; } private: explicit Window(Document&); Document& m_document; WeakPtr m_wrapper; IDAllocator m_timer_id_allocator; HashMap> m_timers; NonnullOwnPtr m_performance; NonnullRefPtr m_screen; RefPtr m_current_event; }; }