
This isn't perfect (especially the global object situation in activate_event_handler), but I believe it's in a much more complete state now :^) This fixes the issue of crashing in prepare_for_ordinary_call with the `i < m_size` crash, as it now uses the IDL callback functions which requires the Environment Settings Object. The environment settings object for the callback is fetched at the time the callback is created, for example, WrapperGenerator gets the incumbent settings object for the callback at the time of wrapping. This allows us to remove passing in ScriptExecutionContext into EventTarget's constructor. With this, we can now drop ScriptExecutionContext.
40 lines
1.2 KiB
C++
40 lines
1.2 KiB
C++
/*
|
|
* Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/String.h>
|
|
#include <AK/Variant.h>
|
|
#include <LibJS/Heap/Handle.h>
|
|
#include <LibJS/Runtime/FunctionObject.h>
|
|
#include <LibWeb/Bindings/CallbackType.h>
|
|
#include <LibWeb/DOM/EventListener.h>
|
|
|
|
namespace Web::HTML {
|
|
|
|
struct EventHandler {
|
|
EventHandler(String s)
|
|
: value(move(s))
|
|
{
|
|
}
|
|
|
|
EventHandler(Bindings::CallbackType c)
|
|
: value(move(c))
|
|
{
|
|
}
|
|
|
|
// Either uncompiled source code or a callback.
|
|
// https://html.spec.whatwg.org/multipage/webappapis.html#event-handler-value
|
|
// NOTE: This does not contain Empty as part of the optimization of not allocating all event handler attributes up front.
|
|
// FIXME: The string should actually be an "internal raw uncompiled handler" struct. This struct is just the uncompiled source code plus a source location for reporting parse errors.
|
|
// https://html.spec.whatwg.org/multipage/webappapis.html#internal-raw-uncompiled-handler
|
|
Variant<String, Bindings::CallbackType> value;
|
|
|
|
// https://html.spec.whatwg.org/multipage/webappapis.html#event-handler-listener
|
|
RefPtr<DOM::EventListener> listener;
|
|
};
|
|
|
|
}
|