ladybird/Libraries/LibWeb/HTML/ShadowRealmGlobalScope.h
Shannon Booth 05b4676917 LibWeb: Ensure global objects are an event target
All global objects current need to be event targets so that they
can have events dispatched to them. This allows for removing of
verify_cast for these global objects.
2024-12-03 00:18:11 +01:00

53 lines
1.5 KiB
C++

/*
* Copyright (c) 2024, Shannon Booth <shannon@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibWeb/Bindings/Intrinsics.h>
#include <LibWeb/Bindings/ShadowRealmGlobalScopeGlobalMixin.h>
#include <LibWeb/DOM/EventTarget.h>
#include <LibWeb/HTML/UniversalGlobalScope.h>
namespace Web::HTML {
// https://whatpr.org/html/9893/webappapis.html#shadowrealmglobalscope
class ShadowRealmGlobalScope
: public DOM::EventTarget
, public UniversalGlobalScopeMixin
, public Bindings::ShadowRealmGlobalScopeGlobalMixin {
WEB_PLATFORM_OBJECT(ShadowRealmGlobalScope, DOM::EventTarget);
GC_DECLARE_ALLOCATOR(ShadowRealmGlobalScope);
public:
virtual ~ShadowRealmGlobalScope() override;
static GC::Ref<ShadowRealmGlobalScope> create(JS::Realm&);
virtual DOM::EventTarget& this_impl() override { return *this; }
virtual DOM::EventTarget const& this_impl() const override { return *this; }
// https://whatpr.org/html/9893/webappapis.html#dom-shadowrealmglobalscope-self
GC::Ref<ShadowRealmGlobalScope> self()
{
// The self getter steps are to return this.
return *this;
}
using UniversalGlobalScopeMixin::atob;
using UniversalGlobalScopeMixin::btoa;
using UniversalGlobalScopeMixin::queue_microtask;
using UniversalGlobalScopeMixin::structured_clone;
void initialize_web_interfaces();
protected:
explicit ShadowRealmGlobalScope(JS::Realm&);
virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override;
};
}