mirror of
https://github.com/RGBCube/serenity
synced 2025-06-01 05:48:12 +00:00
LibWeb: Remove duplicated event handler attribute code in WebSocket
This functionality is now inherited from EventTarget, so we can simply remove the whole thing in WebSocket. :^)
This commit is contained in:
parent
51b33b5678
commit
57f3535c4a
2 changed files with 1 additions and 44 deletions
|
@ -226,49 +226,9 @@ JS::Object* WebSocket::create_wrapper(JS::GlobalObject& global_object)
|
||||||
} \
|
} \
|
||||||
HTML::EventHandler WebSocket::attribute_name() \
|
HTML::EventHandler WebSocket::attribute_name() \
|
||||||
{ \
|
{ \
|
||||||
return get_event_handler_attribute(event_name); \
|
return event_handler_attribute(event_name); \
|
||||||
}
|
}
|
||||||
ENUMERATE_WEBSOCKET_EVENT_HANDLERS(__ENUMERATE)
|
ENUMERATE_WEBSOCKET_EVENT_HANDLERS(__ENUMERATE)
|
||||||
#undef __ENUMERATE
|
#undef __ENUMERATE
|
||||||
|
|
||||||
// FIXME: This is copied from GlobalEventHandlers.cpp. Find a way to deduplicate it.
|
|
||||||
void WebSocket::set_event_handler_attribute(const FlyString& name, HTML::EventHandler value)
|
|
||||||
{
|
|
||||||
RefPtr<DOM::EventListener> listener;
|
|
||||||
if (!value.callback.is_null()) {
|
|
||||||
listener = adopt_ref(*new DOM::EventListener(move(value.callback)));
|
|
||||||
} else {
|
|
||||||
StringBuilder builder;
|
|
||||||
builder.appendff("function {}(event) {{\n{}\n}}", name, value.string);
|
|
||||||
auto parser = JS::Parser(JS::Lexer(builder.string_view()));
|
|
||||||
auto program = parser.parse_function_node<JS::FunctionExpression>();
|
|
||||||
if (parser.has_errors()) {
|
|
||||||
dbgln("Failed to parse script in event handler attribute '{}'", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
auto* function = JS::OrdinaryFunctionObject::create(script_execution_context()->interpreter().global_object(), name, program->body(), program->parameters(), program->function_length(), nullptr, JS::FunctionKind::Regular, false, false);
|
|
||||||
VERIFY(function);
|
|
||||||
listener = adopt_ref(*new DOM::EventListener(JS::make_handle(static_cast<JS::FunctionObject*>(function))));
|
|
||||||
}
|
|
||||||
if (listener) {
|
|
||||||
for (auto& registered_listener : listeners()) {
|
|
||||||
if (registered_listener.event_name == name && registered_listener.listener->is_attribute()) {
|
|
||||||
remove_event_listener(name, registered_listener.listener);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
add_event_listener(name, listener.release_nonnull());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
HTML::EventHandler WebSocket::get_event_handler_attribute(const FlyString& name)
|
|
||||||
{
|
|
||||||
for (auto& listener : listeners()) {
|
|
||||||
if (listener.event_name == name && listener.listener->is_attribute())
|
|
||||||
return HTML::EventHandler { JS::make_handle(&listener.listener->function()) };
|
|
||||||
}
|
|
||||||
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,9 +78,6 @@ public:
|
||||||
ENUMERATE_WEBSOCKET_EVENT_HANDLERS(__ENUMERATE)
|
ENUMERATE_WEBSOCKET_EVENT_HANDLERS(__ENUMERATE)
|
||||||
#undef __ENUMERATE
|
#undef __ENUMERATE
|
||||||
|
|
||||||
void set_event_handler_attribute(const FlyString& name, HTML::EventHandler);
|
|
||||||
HTML::EventHandler get_event_handler_attribute(const FlyString& name);
|
|
||||||
|
|
||||||
ReadyState ready_state() const;
|
ReadyState ready_state() const;
|
||||||
String extensions() const;
|
String extensions() const;
|
||||||
String protocol() const;
|
String protocol() const;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue