From 7991077284adfb50353a37a49b7730142ac96034 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Sun, 12 Sep 2021 11:39:09 +0100 Subject: [PATCH] LibWeb: Implement window.event as a [Replaceable] property This is the result of debugging React DOM, which would throw a TypeError when assigning to window.event in strict mode and then not complete rendering - here: https://github.com/facebook/react/blob/cae6350/packages/shared/invokeGuardedCallbackImpl.js#L134 With this change, the following minimal React example now works!
--- Userland/Libraries/LibWeb/Bindings/WindowObject.cpp | 8 +++++++- Userland/Libraries/LibWeb/Bindings/WindowObject.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibWeb/Bindings/WindowObject.cpp b/Userland/Libraries/LibWeb/Bindings/WindowObject.cpp index 1f9b174e1b..989db89812 100644 --- a/Userland/Libraries/LibWeb/Bindings/WindowObject.cpp +++ b/Userland/Libraries/LibWeb/Bindings/WindowObject.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -89,7 +90,7 @@ void WindowObject::initialize_global_object() define_native_function("scrollBy", scroll_by, 2, attr); // Legacy - define_native_accessor("event", event_getter, {}, JS::Attribute::Enumerable); + define_native_accessor("event", event_getter, event_setter, JS::Attribute::Enumerable); define_direct_property("navigator", heap().allocate(*this, *this), JS::Attribute::Enumerable | JS::Attribute::Configurable); define_direct_property("location", heap().allocate(*this, *this), JS::Attribute::Enumerable | JS::Attribute::Configurable); @@ -439,6 +440,11 @@ JS_DEFINE_NATIVE_FUNCTION(WindowObject::event_getter) return wrap(global_object, const_cast(*impl->current_event())); } +JS_DEFINE_NATIVE_FUNCTION(WindowObject::event_setter) +{ + REPLACEABLE_PROPERTY_SETTER(WindowObject, event); +} + JS_DEFINE_NATIVE_FUNCTION(WindowObject::inner_width_getter) { auto* impl = impl_from(vm, global_object); diff --git a/Userland/Libraries/LibWeb/Bindings/WindowObject.h b/Userland/Libraries/LibWeb/Bindings/WindowObject.h index d574546740..7a5f014980 100644 --- a/Userland/Libraries/LibWeb/Bindings/WindowObject.h +++ b/Userland/Libraries/LibWeb/Bindings/WindowObject.h @@ -68,6 +68,7 @@ private: JS_DECLARE_NATIVE_FUNCTION(screen_getter); JS_DECLARE_NATIVE_FUNCTION(event_getter); + JS_DECLARE_NATIVE_FUNCTION(event_setter); JS_DECLARE_NATIVE_FUNCTION(inner_width_getter); JS_DECLARE_NATIVE_FUNCTION(inner_height_getter);