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:
parent
d6cf9f5329
commit
4d87072201
42 changed files with 149 additions and 142 deletions
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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 event’s 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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue