1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 20:17:44 +00:00

LibWeb: Port {HTML,UIEvents,XHR}::EventNames to new String

This commit is contained in:
Kenneth Myhra 2023-04-06 07:25:18 +02:00 committed by Linus Groh
parent d6cf9f5329
commit 4d87072201
42 changed files with 149 additions and 142 deletions

View file

@ -62,7 +62,7 @@ void AbortSignal::signal_abort(JS::Value reason)
m_abort_algorithms.clear();
// 5. Fire an event named abort at signal.
dispatch_event(Event::create(realm(), HTML::EventNames::abort).release_value_but_fixme_should_propagate_errors());
dispatch_event(Event::create(realm(), HTML::EventNames::abort.to_deprecated_fly_string()).release_value_but_fixme_should_propagate_errors());
}
void AbortSignal::set_onabort(WebIDL::CallbackType* event_handler)

View file

@ -1010,7 +1010,7 @@ void Document::set_hovered_node(Node* node)
// FIXME: Check if we need to dispatch these events in a specific order.
for (auto target = old_hovered_node; target && target.ptr() != common_ancestor; target = target->parent()) {
// FIXME: Populate the event with mouse coordinates, etc.
target->dispatch_event(UIEvents::MouseEvent::create(realm(), UIEvents::EventNames::mouseleave).release_value_but_fixme_should_propagate_errors());
target->dispatch_event(UIEvents::MouseEvent::create(realm(), UIEvents::EventNames::mouseleave.to_deprecated_fly_string()).release_value_but_fixme_should_propagate_errors());
}
}
@ -1019,7 +1019,7 @@ void Document::set_hovered_node(Node* node)
// FIXME: Check if we need to dispatch these events in a specific order.
for (auto target = m_hovered_node; target && target.ptr() != common_ancestor; target = target->parent()) {
// FIXME: Populate the event with mouse coordinates, etc.
target->dispatch_event(UIEvents::MouseEvent::create(realm(), UIEvents::EventNames::mouseenter).release_value_but_fixme_should_propagate_errors());
target->dispatch_event(UIEvents::MouseEvent::create(realm(), UIEvents::EventNames::mouseenter.to_deprecated_fly_string()).release_value_but_fixme_should_propagate_errors());
}
}
}
@ -1589,7 +1589,7 @@ void Document::update_readiness(HTML::DocumentReadyState readiness_value)
}
// 4. Fire an event named readystatechange at document.
dispatch_event(Event::create(realm(), HTML::EventNames::readystatechange).release_value_but_fixme_should_propagate_errors());
dispatch_event(Event::create(realm(), HTML::EventNames::readystatechange.to_deprecated_fly_string()).release_value_but_fixme_should_propagate_errors());
}
Page* Document::page()
@ -1604,7 +1604,7 @@ Page const* Document::page() const
EventTarget* Document::get_parent(Event const& event)
{
if (event.type() == HTML::EventNames::load)
if (event.type() == HTML::EventNames::load.to_deprecated_fly_string())
return nullptr;
return m_window;
@ -1637,7 +1637,7 @@ void Document::completely_finish_loading()
// 5. Otherwise, if container is non-null, then queue an element task on the DOM manipulation task source given container to fire an event named load at container.
else if (container) {
container->queue_an_element_task(HTML::Task::Source::DOMManipulation, [container] {
container->dispatch_event(DOM::Event::create(container->realm(), HTML::EventNames::load).release_value_but_fixme_should_propagate_errors());
container->dispatch_event(DOM::Event::create(container->realm(), HTML::EventNames::load.to_deprecated_fly_string()).release_value_but_fixme_should_propagate_errors());
});
}
}
@ -1767,7 +1767,7 @@ void Document::update_the_visibility_state(HTML::VisibilityState visibility_stat
// FIXME: 3. Run any page visibility change steps which may be defined in other specifications, with visibility state and document.
// 4. Fire an event named visibilitychange at document, with its bubbles attribute initialized to true.
auto event = DOM::Event::create(realm(), HTML::EventNames::visibilitychange).release_value_but_fixme_should_propagate_errors();
auto event = DOM::Event::create(realm(), HTML::EventNames::visibilitychange.to_deprecated_fly_string()).release_value_but_fixme_should_propagate_errors();
event->set_bubbles(true);
dispatch_event(event);
}
@ -1788,7 +1788,7 @@ void Document::run_the_resize_steps()
return;
m_last_viewport_size = viewport_size;
window().dispatch_event(DOM::Event::create(realm(), UIEvents::EventNames::resize).release_value_but_fixme_should_propagate_errors());
window().dispatch_event(DOM::Event::create(realm(), UIEvents::EventNames::resize.to_deprecated_fly_string()).release_value_but_fixme_should_propagate_errors());
schedule_layout_update();
}
@ -1800,14 +1800,14 @@ void Document::run_the_scroll_steps()
for (auto& target : m_pending_scroll_event_targets) {
// 1. If target is a Document, fire an event named scroll that bubbles at target and fire an event named scroll at the VisualViewport that is associated with target.
if (is<Document>(*target)) {
auto event = DOM::Event::create(realm(), HTML::EventNames::scroll).release_value_but_fixme_should_propagate_errors();
auto event = DOM::Event::create(realm(), HTML::EventNames::scroll.to_deprecated_fly_string()).release_value_but_fixme_should_propagate_errors();
event->set_bubbles(true);
target->dispatch_event(event);
// FIXME: Fire at the associated VisualViewport
}
// 2. Otherwise, fire an event named scroll at target.
else {
auto event = DOM::Event::create(realm(), HTML::EventNames::scroll).release_value_but_fixme_should_propagate_errors();
auto event = DOM::Event::create(realm(), HTML::EventNames::scroll.to_deprecated_fly_string()).release_value_but_fixme_should_propagate_errors();
target->dispatch_event(event);
}
}
@ -1847,7 +1847,7 @@ void Document::evaluate_media_queries_and_report_changes()
CSS::MediaQueryListEventInit init;
init.media = String::from_deprecated_string(media_query_list->media()).release_value_but_fixme_should_propagate_errors();
init.matches = now_matches;
auto event = CSS::MediaQueryListEvent::create(realm(), HTML::EventNames::change, init).release_value_but_fixme_should_propagate_errors();
auto event = CSS::MediaQueryListEvent::create(realm(), HTML::EventNames::change.to_deprecated_fly_string(), init).release_value_but_fixme_should_propagate_errors();
event->set_is_trusted(true);
media_query_list->dispatch_event(*event);
}
@ -2327,7 +2327,7 @@ void Document::unload(bool recursive_flag, Optional<DocumentUnloadTimingInfo> un
m_page_showing = false;
// 2. Fire a page transition event named pagehide at document's relevant global object with document's salvageable state.
global_object().fire_a_page_transition_event(HTML::EventNames::pagehide, m_salvageable);
global_object().fire_a_page_transition_event(HTML::EventNames::pagehide.to_deprecated_fly_string(), m_salvageable);
// 3. Update the visibility state of newDocument to "hidden".
update_the_visibility_state(HTML::VisibilityState::Hidden);
@ -2347,7 +2347,7 @@ void Document::unload(bool recursive_flag, Optional<DocumentUnloadTimingInfo> un
// then fire an event named unload at document's relevant global object, with legacy target override flag set.
// FIXME: The legacy target override flag is currently set by a virtual override of dispatch_event()
// We should reorganize this so that the flag appears explicitly here instead.
auto event = DOM::Event::create(realm(), HTML::EventNames::unload).release_value_but_fixme_should_propagate_errors();
auto event = DOM::Event::create(realm(), HTML::EventNames::unload.to_deprecated_fly_string()).release_value_but_fixme_should_propagate_errors();
global_object().dispatch_event(event);
}

View file

@ -470,7 +470,7 @@ private:
Document(JS::Realm&, AK::URL const&);
// ^HTML::GlobalEventHandlers
virtual EventTarget& global_event_handlers_to_event_target(DeprecatedFlyString const&) final { return *this; }
virtual EventTarget& global_event_handlers_to_event_target(FlyString const&) final { return *this; }
void tear_down_layout_tree();

View file

@ -235,7 +235,7 @@ bool EventDispatcher::dispatch(JS::NonnullGCPtr<EventTarget> target, Event& even
event.append_to_path(*target, target_override, related_target, touch_targets, false);
// 4. Let isActivationEvent be true, if event is a MouseEvent object and events type attribute is "click"; otherwise false.
bool is_activation_event = is<UIEvents::MouseEvent>(event) && event.type() == HTML::EventNames::click;
bool is_activation_event = is<UIEvents::MouseEvent>(event) && FlyString::from_deprecated_fly_string(event.type()).release_value() == HTML::EventNames::click;
// 5. If isActivationEvent is true and target has activation behavior, then set activationTarget to target.
if (is_activation_event && target->activation_behavior)

View file

@ -241,7 +241,7 @@ WebIDL::ExceptionOr<bool> EventTarget::dispatch_event_binding(Event& event)
}
// https://html.spec.whatwg.org/multipage/webappapis.html#window-reflecting-body-element-event-handler-set
bool is_window_reflecting_body_element_event_handler(DeprecatedFlyString const& name)
bool is_window_reflecting_body_element_event_handler(FlyString const& name)
{
return name.is_one_of(
HTML::EventNames::blur,
@ -253,7 +253,7 @@ bool is_window_reflecting_body_element_event_handler(DeprecatedFlyString const&
}
// https://html.spec.whatwg.org/multipage/webappapis.html#windoweventhandlers
static bool is_window_event_handler(DeprecatedFlyString const& name)
static bool is_window_event_handler(FlyString const& name)
{
return name.is_one_of(
HTML::EventNames::afterprint,
@ -288,7 +288,8 @@ static EventTarget* determine_target_of_event_handler(EventTarget& event_target,
// 2. If name is not the name of an attribute member of the WindowEventHandlers interface mixin and the Window-reflecting
// body element event handler set does not contain name, then return eventTarget.
if (!is_window_event_handler(name) && !is_window_reflecting_body_element_event_handler(name))
auto new_string_name = FlyString::from_deprecated_fly_string(name).release_value();
if (!is_window_event_handler(new_string_name) && !is_window_reflecting_body_element_event_handler(new_string_name))
return &event_target;
// 3. If eventTarget's node document is not an active document, then return null.
@ -300,17 +301,19 @@ static EventTarget* determine_target_of_event_handler(EventTarget& event_target,
}
// https://html.spec.whatwg.org/multipage/webappapis.html#event-handler-attributes:event-handler-idl-attributes-2
WebIDL::CallbackType* EventTarget::event_handler_attribute(DeprecatedFlyString const& name)
WebIDL::CallbackType* EventTarget::event_handler_attribute(FlyString const& name)
{
auto deprecated_name = name.to_deprecated_fly_string();
// 1. Let eventTarget be the result of determining the target of an event handler given this object and name.
auto target = determine_target_of_event_handler(*this, name);
auto target = determine_target_of_event_handler(*this, deprecated_name);
// 2. If eventTarget is null, then return null.
if (!target)
return nullptr;
// 3. Return the result of getting the current value of the event handler given eventTarget and name.
return target->get_current_value_of_event_handler(name);
return target->get_current_value_of_event_handler(deprecated_name);
}
// https://html.spec.whatwg.org/multipage/webappapis.html#getting-the-current-value-of-the-event-handler
@ -376,7 +379,7 @@ WebIDL::CallbackType* EventTarget::get_current_value_of_event_handler(Deprecated
StringBuilder builder;
// sourceText
if (name == HTML::EventNames::error && is<HTML::Window>(this)) {
if (name == HTML::EventNames::error.to_deprecated_fly_string() && is<HTML::Window>(this)) {
// -> If name is onerror and eventTarget is a Window object
// The string formed by concatenating "function ", name, "(event, source, lineno, colno, error) {", U+000A LF, body, U+000A LF, and "}".
builder.appendff("function {}(event, source, lineno, colno, error) {{\n{}\n}}", name, body);
@ -473,10 +476,11 @@ WebIDL::CallbackType* EventTarget::get_current_value_of_event_handler(Deprecated
}
// https://html.spec.whatwg.org/multipage/webappapis.html#event-handler-attributes:event-handler-idl-attributes-3
void EventTarget::set_event_handler_attribute(DeprecatedFlyString const& name, WebIDL::CallbackType* value)
void EventTarget::set_event_handler_attribute(FlyString const& name, WebIDL::CallbackType* value)
{
auto deprecated_name = name.to_deprecated_fly_string();
// 1. Let eventTarget be the result of determining the target of an event handler given this object and name.
auto event_target = determine_target_of_event_handler(*this, name);
auto event_target = determine_target_of_event_handler(*this, deprecated_name);
// 2. If eventTarget is null, then return.
if (!event_target)
@ -484,7 +488,7 @@ void EventTarget::set_event_handler_attribute(DeprecatedFlyString const& name, W
// 3. If the given value is null, then deactivate an event handler given eventTarget and name.
if (!value) {
event_target->deactivate_event_handler(name);
event_target->deactivate_event_handler(deprecated_name);
return;
}
@ -493,7 +497,7 @@ void EventTarget::set_event_handler_attribute(DeprecatedFlyString const& name, W
auto& handler_map = event_target->m_event_handler_map;
// 2. Let eventHandler be handlerMap[name].
auto event_handler_iterator = handler_map.find(name);
auto event_handler_iterator = handler_map.find(deprecated_name);
// 3. Set eventHandler's value to the given value.
if (event_handler_iterator == handler_map.end()) {
@ -504,9 +508,9 @@ void EventTarget::set_event_handler_attribute(DeprecatedFlyString const& name, W
// Optimization: We pass in the event handler here instead of having activate_event_handler do another hash map lookup just to get the same object.
// This handles a new event handler while the other path handles an existing event handler. As such, both paths must have their own
// unique call to activate_event_handler.
event_target->activate_event_handler(name, *new_event_handler);
event_target->activate_event_handler(deprecated_name, *new_event_handler);
handler_map.set(name, new_event_handler);
handler_map.set(deprecated_name, new_event_handler);
return;
}
@ -516,7 +520,7 @@ void EventTarget::set_event_handler_attribute(DeprecatedFlyString const& name, W
// 4. Activate an event handler given eventTarget and name.
// NOTE: See the optimization comment above.
event_target->activate_event_handler(name, *event_handler);
event_target->activate_event_handler(deprecated_name, *event_handler);
}
// https://html.spec.whatwg.org/multipage/webappapis.html#activate-an-event-handler
@ -612,7 +616,7 @@ JS::ThrowCompletionOr<void> EventTarget::process_event_handler_for_event(Depreca
// 3. Let special error event handling be true if event is an ErrorEvent object, event's type is error, and event's currentTarget implements the WindowOrWorkerGlobalScope mixin.
// Otherwise, let special error event handling be false.
// FIXME: This doesn't check for WorkerGlobalScape as we don't currently have it.
bool special_error_event_handling = is<HTML::ErrorEvent>(event) && event.type() == HTML::EventNames::error && is<HTML::Window>(event.current_target().ptr());
bool special_error_event_handling = is<HTML::ErrorEvent>(event) && event.type() == HTML::EventNames::error.to_deprecated_fly_string() && is<HTML::Window>(event.current_target().ptr());
// 4. Process the Event object event as follows:
JS::Completion return_value_or_error;
@ -679,13 +683,15 @@ JS::ThrowCompletionOr<void> EventTarget::process_event_handler_for_event(Depreca
}
// https://html.spec.whatwg.org/multipage/webappapis.html#event-handler-attributes:concept-element-attributes-change-ext
void EventTarget::element_event_handler_attribute_changed(DeprecatedFlyString const& local_name, DeprecatedString const& value)
void EventTarget::element_event_handler_attribute_changed(FlyString const& local_name, DeprecatedString const& value)
{
// NOTE: Step 1 of this algorithm was handled in HTMLElement::parse_attribute.
auto deprecated_local_name = local_name.to_deprecated_fly_string();
// 2. Let eventTarget be the result of determining the target of an event handler given element and localName.
// NOTE: element is `this`.
auto* event_target = determine_target_of_event_handler(*this, local_name);
auto* event_target = determine_target_of_event_handler(*this, deprecated_local_name);
// 3. If eventTarget is null, then return.
if (!event_target)
@ -693,7 +699,7 @@ void EventTarget::element_event_handler_attribute_changed(DeprecatedFlyString co
// 4. If value is null, then deactivate an event handler given eventTarget and localName.
if (value.is_null()) {
event_target->deactivate_event_handler(local_name);
event_target->deactivate_event_handler(deprecated_local_name);
return;
}
@ -704,7 +710,7 @@ void EventTarget::element_event_handler_attribute_changed(DeprecatedFlyString co
auto& handler_map = event_target->m_event_handler_map;
// 3. Let eventHandler be handlerMap[localName].
auto event_handler_iterator = handler_map.find(local_name);
auto event_handler_iterator = handler_map.find(deprecated_local_name);
// FIXME: 4. Let location be the script location that triggered the execution of these steps.
@ -717,9 +723,9 @@ void EventTarget::element_event_handler_attribute_changed(DeprecatedFlyString co
auto new_event_handler = heap().allocate_without_realm<HTML::EventHandler>(value);
// 6. Activate an event handler given eventTarget and name.
event_target->activate_event_handler(local_name, *new_event_handler);
event_target->activate_event_handler(deprecated_local_name, *new_event_handler);
handler_map.set(local_name, new_event_handler);
handler_map.set(deprecated_local_name, new_event_handler);
return;
}
@ -727,7 +733,7 @@ void EventTarget::element_event_handler_attribute_changed(DeprecatedFlyString co
// 6. Activate an event handler given eventTarget and name.
event_handler->value = value;
event_target->activate_event_handler(local_name, *event_handler);
event_target->activate_event_handler(deprecated_local_name, *event_handler);
}
bool EventTarget::dispatch_event(Event& event)

View file

@ -51,8 +51,8 @@ public:
virtual void legacy_cancelled_activation_behavior() { }
virtual void legacy_cancelled_activation_behavior_was_not_called() { }
WebIDL::CallbackType* event_handler_attribute(DeprecatedFlyString const& name);
void set_event_handler_attribute(DeprecatedFlyString const& name, WebIDL::CallbackType*);
WebIDL::CallbackType* event_handler_attribute(FlyString const& name);
void set_event_handler_attribute(FlyString const& name, WebIDL::CallbackType*);
bool has_event_listener(DeprecatedFlyString const& type) const;
bool has_event_listeners() const;
@ -60,7 +60,7 @@ public:
protected:
explicit EventTarget(JS::Realm&);
void element_event_handler_attribute_changed(DeprecatedFlyString const& local_name, DeprecatedString const& value);
void element_event_handler_attribute_changed(FlyString const& local_name, DeprecatedString const& value);
virtual void visit_edges(Cell::Visitor&) override;
@ -77,6 +77,6 @@ private:
JS::ThrowCompletionOr<void> process_event_handler_for_event(DeprecatedFlyString const& name, Event& event);
};
bool is_window_reflecting_body_element_event_handler(DeprecatedFlyString const& name);
bool is_window_reflecting_body_element_event_handler(FlyString const& name);
}