From 03da70c7d0258975a9bf5164a8cc75d205047063 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 20 Jun 2020 17:28:13 +0200 Subject: [PATCH] LibWeb: Split JS wrapper constructors into construct/initialize --- .../CanvasRenderingContext2DWrapper.cpp | 8 ++++++-- .../CanvasRenderingContext2DWrapper.h | 3 ++- Libraries/LibWeb/Bindings/DocumentWrapper.cpp | 8 ++++++-- Libraries/LibWeb/Bindings/DocumentWrapper.h | 3 ++- Libraries/LibWeb/Bindings/ElementWrapper.cpp | 8 ++++++-- Libraries/LibWeb/Bindings/ElementWrapper.h | 3 ++- .../LibWeb/Bindings/EventListenerWrapper.cpp | 4 ++-- .../LibWeb/Bindings/EventListenerWrapper.h | 2 +- .../LibWeb/Bindings/EventTargetWrapper.cpp | 8 ++++++-- .../LibWeb/Bindings/EventTargetWrapper.h | 3 ++- Libraries/LibWeb/Bindings/EventWrapper.cpp | 4 ++-- Libraries/LibWeb/Bindings/EventWrapper.h | 2 +- .../Bindings/HTMLCanvasElementWrapper.cpp | 8 ++++++-- .../Bindings/HTMLCanvasElementWrapper.h | 3 ++- .../Bindings/HTMLImageElementWrapper.cpp | 4 ++-- .../LibWeb/Bindings/HTMLImageElementWrapper.h | 2 +- .../LibWeb/Bindings/ImageDataWrapper.cpp | 8 ++++++-- Libraries/LibWeb/Bindings/ImageDataWrapper.h | 3 ++- Libraries/LibWeb/Bindings/LocationObject.cpp | 8 ++++++-- Libraries/LibWeb/Bindings/LocationObject.h | 3 ++- .../LibWeb/Bindings/MouseEventWrapper.cpp | 8 ++++++-- Libraries/LibWeb/Bindings/MouseEventWrapper.h | 3 ++- Libraries/LibWeb/Bindings/NavigatorObject.cpp | 20 +++++++++++-------- Libraries/LibWeb/Bindings/NavigatorObject.h | 3 ++- Libraries/LibWeb/Bindings/NodeWrapper.cpp | 10 +++++++--- Libraries/LibWeb/Bindings/NodeWrapper.h | 3 ++- Libraries/LibWeb/Bindings/WindowObject.cpp | 4 ++-- Libraries/LibWeb/Bindings/Wrappable.h | 6 ++++-- .../Bindings/XMLHttpRequestConstructor.cpp | 2 +- .../LibWeb/Bindings/XMLHttpRequestWrapper.cpp | 6 +++--- .../LibWeb/Bindings/XMLHttpRequestWrapper.h | 2 +- 31 files changed, 107 insertions(+), 55 deletions(-) diff --git a/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.cpp b/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.cpp index c16b0621072..d8f4fa32fff 100644 --- a/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.cpp +++ b/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.cpp @@ -47,9 +47,13 @@ CanvasRenderingContext2DWrapper* wrap(JS::Heap& heap, CanvasRenderingContext2D& return static_cast(wrap_impl(heap, impl)); } -CanvasRenderingContext2DWrapper::CanvasRenderingContext2DWrapper(CanvasRenderingContext2D& impl) - : Wrapper(*interpreter().global_object().object_prototype()) +CanvasRenderingContext2DWrapper::CanvasRenderingContext2DWrapper(JS::GlobalObject& global_object, CanvasRenderingContext2D& impl) + : Wrapper(*global_object.object_prototype()) , m_impl(impl) +{ +} + +void CanvasRenderingContext2DWrapper::initialize(JS::Interpreter&, JS::GlobalObject&) { define_native_function("fillRect", fill_rect, 4); define_native_function("scale", scale, 2); diff --git a/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.h b/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.h index 783ddf86275..7595a63d1c2 100644 --- a/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.h +++ b/Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.h @@ -33,7 +33,8 @@ namespace Bindings { class CanvasRenderingContext2DWrapper final : public Wrapper { public: - explicit CanvasRenderingContext2DWrapper(CanvasRenderingContext2D&); + CanvasRenderingContext2DWrapper(JS::GlobalObject&, CanvasRenderingContext2D&); + virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override; virtual ~CanvasRenderingContext2DWrapper() override; CanvasRenderingContext2D& impl() { return m_impl; } diff --git a/Libraries/LibWeb/Bindings/DocumentWrapper.cpp b/Libraries/LibWeb/Bindings/DocumentWrapper.cpp index 9543d3bbbf5..3ea58469d40 100644 --- a/Libraries/LibWeb/Bindings/DocumentWrapper.cpp +++ b/Libraries/LibWeb/Bindings/DocumentWrapper.cpp @@ -38,8 +38,12 @@ namespace Web { namespace Bindings { -DocumentWrapper::DocumentWrapper(Document& document) - : NodeWrapper(document) +DocumentWrapper::DocumentWrapper(JS::GlobalObject& global_object, Document& document) + : NodeWrapper(global_object, document) +{ +} + +void DocumentWrapper::initialize(JS::Interpreter&, JS::GlobalObject&) { define_native_function("getElementById", get_element_by_id, 1); define_native_function("querySelector", query_selector, 1); diff --git a/Libraries/LibWeb/Bindings/DocumentWrapper.h b/Libraries/LibWeb/Bindings/DocumentWrapper.h index 539c2f9bf8d..3c175f4d827 100644 --- a/Libraries/LibWeb/Bindings/DocumentWrapper.h +++ b/Libraries/LibWeb/Bindings/DocumentWrapper.h @@ -33,7 +33,8 @@ namespace Bindings { class DocumentWrapper : public NodeWrapper { public: - explicit DocumentWrapper(Document&); + DocumentWrapper(JS::GlobalObject&, Document&); + virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override; virtual ~DocumentWrapper() override; Document& node(); diff --git a/Libraries/LibWeb/Bindings/ElementWrapper.cpp b/Libraries/LibWeb/Bindings/ElementWrapper.cpp index 63787e2f526..463cb4fdffb 100644 --- a/Libraries/LibWeb/Bindings/ElementWrapper.cpp +++ b/Libraries/LibWeb/Bindings/ElementWrapper.cpp @@ -38,8 +38,12 @@ namespace Web { namespace Bindings { -ElementWrapper::ElementWrapper(Element& element) - : NodeWrapper(element) +ElementWrapper::ElementWrapper(JS::GlobalObject& global_object, Element& element) + : NodeWrapper(global_object, element) +{ +} + +void ElementWrapper::initialize(JS::Interpreter&, JS::GlobalObject&) { define_native_property("innerHTML", inner_html_getter, inner_html_setter); define_native_property("id", id_getter, id_setter); diff --git a/Libraries/LibWeb/Bindings/ElementWrapper.h b/Libraries/LibWeb/Bindings/ElementWrapper.h index e8bf71ae3b9..b7e53d12474 100644 --- a/Libraries/LibWeb/Bindings/ElementWrapper.h +++ b/Libraries/LibWeb/Bindings/ElementWrapper.h @@ -33,7 +33,8 @@ namespace Bindings { class ElementWrapper : public NodeWrapper { public: - explicit ElementWrapper(Element&); + ElementWrapper(JS::GlobalObject&, Element&); + virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override; virtual ~ElementWrapper() override; Element& node(); diff --git a/Libraries/LibWeb/Bindings/EventListenerWrapper.cpp b/Libraries/LibWeb/Bindings/EventListenerWrapper.cpp index 378837931cb..fa7e82b3ce0 100644 --- a/Libraries/LibWeb/Bindings/EventListenerWrapper.cpp +++ b/Libraries/LibWeb/Bindings/EventListenerWrapper.cpp @@ -33,8 +33,8 @@ namespace Web { namespace Bindings { -EventListenerWrapper::EventListenerWrapper(EventListener& impl) - : Wrapper(*interpreter().global_object().object_prototype()) +EventListenerWrapper::EventListenerWrapper(JS::GlobalObject& global_object, EventListener& impl) + : Wrapper(*global_object.object_prototype()) , m_impl(impl) { } diff --git a/Libraries/LibWeb/Bindings/EventListenerWrapper.h b/Libraries/LibWeb/Bindings/EventListenerWrapper.h index c0492758161..4aeb0cfec18 100644 --- a/Libraries/LibWeb/Bindings/EventListenerWrapper.h +++ b/Libraries/LibWeb/Bindings/EventListenerWrapper.h @@ -33,7 +33,7 @@ namespace Bindings { class EventListenerWrapper final : public Wrapper { public: - explicit EventListenerWrapper(EventListener&); + EventListenerWrapper(JS::GlobalObject&, EventListener&); virtual ~EventListenerWrapper() override; EventListener& impl() { return *m_impl; } diff --git a/Libraries/LibWeb/Bindings/EventTargetWrapper.cpp b/Libraries/LibWeb/Bindings/EventTargetWrapper.cpp index 805b814fa9f..9fe5436a998 100644 --- a/Libraries/LibWeb/Bindings/EventTargetWrapper.cpp +++ b/Libraries/LibWeb/Bindings/EventTargetWrapper.cpp @@ -38,9 +38,13 @@ namespace Web { namespace Bindings { -EventTargetWrapper::EventTargetWrapper(EventTarget& impl) - : Wrapper(*interpreter().global_object().object_prototype()) +EventTargetWrapper::EventTargetWrapper(JS::GlobalObject& global_object, EventTarget& impl) + : Wrapper(*global_object.object_prototype()) , m_impl(impl) +{ +} + +void EventTargetWrapper::initialize(JS::Interpreter&, JS::GlobalObject&) { define_native_function("addEventListener", add_event_listener, 2); } diff --git a/Libraries/LibWeb/Bindings/EventTargetWrapper.h b/Libraries/LibWeb/Bindings/EventTargetWrapper.h index 6bb430efec5..f308682e98e 100644 --- a/Libraries/LibWeb/Bindings/EventTargetWrapper.h +++ b/Libraries/LibWeb/Bindings/EventTargetWrapper.h @@ -33,7 +33,8 @@ namespace Bindings { class EventTargetWrapper : public Wrapper { public: - explicit EventTargetWrapper(EventTarget&); + EventTargetWrapper(JS::GlobalObject&, EventTarget&); + virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override; virtual ~EventTargetWrapper() override; EventTarget& impl() { return *m_impl; } diff --git a/Libraries/LibWeb/Bindings/EventWrapper.cpp b/Libraries/LibWeb/Bindings/EventWrapper.cpp index 538317765d5..129a110eec6 100644 --- a/Libraries/LibWeb/Bindings/EventWrapper.cpp +++ b/Libraries/LibWeb/Bindings/EventWrapper.cpp @@ -40,8 +40,8 @@ EventWrapper* wrap(JS::Heap& heap, Event& event) return static_cast(wrap_impl(heap, event)); } -EventWrapper::EventWrapper(Event& event) - : Wrapper(*interpreter().global_object().object_prototype()) +EventWrapper::EventWrapper(JS::GlobalObject& global_object, Event& event) + : Wrapper(*global_object.object_prototype()) , m_event(event) { } diff --git a/Libraries/LibWeb/Bindings/EventWrapper.h b/Libraries/LibWeb/Bindings/EventWrapper.h index 28f9e7b9b11..baf7ef56ad2 100644 --- a/Libraries/LibWeb/Bindings/EventWrapper.h +++ b/Libraries/LibWeb/Bindings/EventWrapper.h @@ -33,7 +33,7 @@ namespace Bindings { class EventWrapper : public Wrapper { public: - explicit EventWrapper(Event&); + EventWrapper(JS::GlobalObject&, Event&); virtual ~EventWrapper() override; Event& event() { return m_event; } diff --git a/Libraries/LibWeb/Bindings/HTMLCanvasElementWrapper.cpp b/Libraries/LibWeb/Bindings/HTMLCanvasElementWrapper.cpp index b897ea3636b..c9539c94bce 100644 --- a/Libraries/LibWeb/Bindings/HTMLCanvasElementWrapper.cpp +++ b/Libraries/LibWeb/Bindings/HTMLCanvasElementWrapper.cpp @@ -38,8 +38,12 @@ namespace Web { namespace Bindings { -HTMLCanvasElementWrapper::HTMLCanvasElementWrapper(HTMLCanvasElement& element) - : ElementWrapper(element) +HTMLCanvasElementWrapper::HTMLCanvasElementWrapper(JS::GlobalObject& global_object, HTMLCanvasElement& element) + : ElementWrapper(global_object, element) +{ +} + +void HTMLCanvasElementWrapper::initialize(JS::Interpreter&, JS::GlobalObject&) { define_native_function("getContext", get_context, 1); diff --git a/Libraries/LibWeb/Bindings/HTMLCanvasElementWrapper.h b/Libraries/LibWeb/Bindings/HTMLCanvasElementWrapper.h index 41e7b03d2ba..dcea425e86e 100644 --- a/Libraries/LibWeb/Bindings/HTMLCanvasElementWrapper.h +++ b/Libraries/LibWeb/Bindings/HTMLCanvasElementWrapper.h @@ -33,7 +33,8 @@ namespace Bindings { class HTMLCanvasElementWrapper : public ElementWrapper { public: - explicit HTMLCanvasElementWrapper(HTMLCanvasElement&); + HTMLCanvasElementWrapper(JS::GlobalObject&, HTMLCanvasElement&); + virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override; virtual ~HTMLCanvasElementWrapper() override; HTMLCanvasElement& node(); diff --git a/Libraries/LibWeb/Bindings/HTMLImageElementWrapper.cpp b/Libraries/LibWeb/Bindings/HTMLImageElementWrapper.cpp index 67d128c5db2..5265d4f2e79 100644 --- a/Libraries/LibWeb/Bindings/HTMLImageElementWrapper.cpp +++ b/Libraries/LibWeb/Bindings/HTMLImageElementWrapper.cpp @@ -35,8 +35,8 @@ namespace Web { namespace Bindings { -HTMLImageElementWrapper::HTMLImageElementWrapper(HTMLImageElement& element) - : ElementWrapper(element) +HTMLImageElementWrapper::HTMLImageElementWrapper(JS::GlobalObject& global_object, HTMLImageElement& element) + : ElementWrapper(global_object, element) { } diff --git a/Libraries/LibWeb/Bindings/HTMLImageElementWrapper.h b/Libraries/LibWeb/Bindings/HTMLImageElementWrapper.h index bbadc7c2282..e5bda62fcee 100644 --- a/Libraries/LibWeb/Bindings/HTMLImageElementWrapper.h +++ b/Libraries/LibWeb/Bindings/HTMLImageElementWrapper.h @@ -33,7 +33,7 @@ namespace Bindings { class HTMLImageElementWrapper : public ElementWrapper { public: - explicit HTMLImageElementWrapper(HTMLImageElement&); + HTMLImageElementWrapper(JS::GlobalObject&, HTMLImageElement&); virtual ~HTMLImageElementWrapper() override; HTMLImageElement& node(); diff --git a/Libraries/LibWeb/Bindings/ImageDataWrapper.cpp b/Libraries/LibWeb/Bindings/ImageDataWrapper.cpp index 1f7f3ccdfba..a18aac85361 100644 --- a/Libraries/LibWeb/Bindings/ImageDataWrapper.cpp +++ b/Libraries/LibWeb/Bindings/ImageDataWrapper.cpp @@ -40,9 +40,13 @@ ImageDataWrapper* wrap(JS::Heap& heap, ImageData& event) return static_cast(wrap_impl(heap, event)); } -ImageDataWrapper::ImageDataWrapper(ImageData& impl) - : Wrapper(*interpreter().global_object().object_prototype()) +ImageDataWrapper::ImageDataWrapper(JS::GlobalObject& global_object, ImageData& impl) + : Wrapper(*global_object.object_prototype()) , m_impl(impl) +{ +} + +void ImageDataWrapper::initialize(JS::Interpreter&, JS::GlobalObject&) { define_native_property("width", width_getter, nullptr); define_native_property("height", height_getter, nullptr); diff --git a/Libraries/LibWeb/Bindings/ImageDataWrapper.h b/Libraries/LibWeb/Bindings/ImageDataWrapper.h index 7772e6f0a0b..97868071ce4 100644 --- a/Libraries/LibWeb/Bindings/ImageDataWrapper.h +++ b/Libraries/LibWeb/Bindings/ImageDataWrapper.h @@ -33,7 +33,8 @@ namespace Bindings { class ImageDataWrapper : public Wrapper { public: - explicit ImageDataWrapper(ImageData&); + ImageDataWrapper(JS::GlobalObject&, ImageData&); + virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override; virtual ~ImageDataWrapper() override; ImageData& impl() { return m_impl; } diff --git a/Libraries/LibWeb/Bindings/LocationObject.cpp b/Libraries/LibWeb/Bindings/LocationObject.cpp index b921edf8929..b453cf4dd5b 100644 --- a/Libraries/LibWeb/Bindings/LocationObject.cpp +++ b/Libraries/LibWeb/Bindings/LocationObject.cpp @@ -35,8 +35,12 @@ namespace Web { namespace Bindings { -LocationObject::LocationObject() - : Object(interpreter().global_object().object_prototype()) +LocationObject::LocationObject(JS::GlobalObject& global_object) + : Object(global_object.object_prototype()) +{ +} + +void LocationObject::initialize(JS::Interpreter&, JS::GlobalObject&) { u8 attr = JS::Attribute::Writable | JS::Attribute::Enumerable; define_native_property("href", href_getter, href_setter, attr); diff --git a/Libraries/LibWeb/Bindings/LocationObject.h b/Libraries/LibWeb/Bindings/LocationObject.h index 253dbf39c1a..97133efafca 100644 --- a/Libraries/LibWeb/Bindings/LocationObject.h +++ b/Libraries/LibWeb/Bindings/LocationObject.h @@ -34,7 +34,8 @@ namespace Bindings { class LocationObject final : public JS::Object { public: - LocationObject(); + explicit LocationObject(JS::GlobalObject&); + virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override; virtual ~LocationObject() override; private: diff --git a/Libraries/LibWeb/Bindings/MouseEventWrapper.cpp b/Libraries/LibWeb/Bindings/MouseEventWrapper.cpp index 09e419b133b..6f50ac5da37 100644 --- a/Libraries/LibWeb/Bindings/MouseEventWrapper.cpp +++ b/Libraries/LibWeb/Bindings/MouseEventWrapper.cpp @@ -35,8 +35,12 @@ namespace Web { namespace Bindings { -MouseEventWrapper::MouseEventWrapper(MouseEvent& event) - : EventWrapper(event) +MouseEventWrapper::MouseEventWrapper(JS::GlobalObject& global_object, MouseEvent& event) + : EventWrapper(global_object, event) +{ +} + +void MouseEventWrapper::initialize(JS::Interpreter&, JS::GlobalObject&) { define_native_property("offsetX", offset_x_getter, nullptr); define_native_property("offsetY", offset_y_getter, nullptr); diff --git a/Libraries/LibWeb/Bindings/MouseEventWrapper.h b/Libraries/LibWeb/Bindings/MouseEventWrapper.h index ffa778b1fc0..9e7cb96b8e5 100644 --- a/Libraries/LibWeb/Bindings/MouseEventWrapper.h +++ b/Libraries/LibWeb/Bindings/MouseEventWrapper.h @@ -33,7 +33,8 @@ namespace Bindings { class MouseEventWrapper : public EventWrapper { public: - explicit MouseEventWrapper(MouseEvent&); + MouseEventWrapper(JS::GlobalObject&, MouseEvent&); + virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override; virtual ~MouseEventWrapper() override; MouseEvent& event(); diff --git a/Libraries/LibWeb/Bindings/NavigatorObject.cpp b/Libraries/LibWeb/Bindings/NavigatorObject.cpp index 28fbfb23fbe..5dce741196d 100644 --- a/Libraries/LibWeb/Bindings/NavigatorObject.cpp +++ b/Libraries/LibWeb/Bindings/NavigatorObject.cpp @@ -34,19 +34,23 @@ namespace Web { namespace Bindings { -NavigatorObject::NavigatorObject() - : Object(interpreter().global_object().object_prototype()) +NavigatorObject::NavigatorObject(JS::GlobalObject& global_object) + : Object(global_object.object_prototype()) { - auto* languages = JS::Array::create(interpreter().global_object()); +} + +void NavigatorObject::initialize(JS::Interpreter& interpreter, JS::GlobalObject& global_object) +{ + auto* languages = JS::Array::create(global_object); languages->indexed_properties().append(js_string(heap(), "en-US")); - define_property("appCodeName", js_string(heap(), "Mozilla")); - define_property("appName", js_string(heap(), "Netscape")); - define_property("appVersion", js_string(heap(), "4.0")); + define_property("appCodeName", js_string(interpreter.heap(), "Mozilla")); + define_property("appName", js_string(interpreter.heap(), "Netscape")); + define_property("appVersion", js_string(interpreter.heap(), "4.0")); define_property("language", languages->get(0)); define_property("languages", languages); - define_property("platform", js_string(heap(), "SerenityOS")); - define_property("product", js_string(heap(), "Gecko")); + define_property("platform", js_string(interpreter.heap(), "SerenityOS")); + define_property("product", js_string(interpreter.heap(), "Gecko")); define_native_property("userAgent", user_agent_getter, nullptr); } diff --git a/Libraries/LibWeb/Bindings/NavigatorObject.h b/Libraries/LibWeb/Bindings/NavigatorObject.h index b7b69be585d..ddef82f8f77 100644 --- a/Libraries/LibWeb/Bindings/NavigatorObject.h +++ b/Libraries/LibWeb/Bindings/NavigatorObject.h @@ -34,7 +34,8 @@ namespace Bindings { class NavigatorObject final : public JS::Object { public: - NavigatorObject(); + NavigatorObject(JS::GlobalObject&); + virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override; virtual ~NavigatorObject() override; private: diff --git a/Libraries/LibWeb/Bindings/NodeWrapper.cpp b/Libraries/LibWeb/Bindings/NodeWrapper.cpp index 8a60fe395dd..5351807952b 100644 --- a/Libraries/LibWeb/Bindings/NodeWrapper.cpp +++ b/Libraries/LibWeb/Bindings/NodeWrapper.cpp @@ -52,10 +52,14 @@ NodeWrapper* wrap(JS::Heap& heap, Node& node) return static_cast(wrap_impl(heap, node)); } -NodeWrapper::NodeWrapper(Node& node) - : EventTargetWrapper(node) +NodeWrapper::NodeWrapper(JS::GlobalObject& global_object, Node& node) + : EventTargetWrapper(global_object, node) { - put("nodeName", JS::js_string(heap(), node.node_name())); +} + +void NodeWrapper::initialize(JS::Interpreter& interpreter, JS::GlobalObject&) +{ + put("nodeName", JS::js_string(interpreter.heap(), node().node_name())); } NodeWrapper::~NodeWrapper() diff --git a/Libraries/LibWeb/Bindings/NodeWrapper.h b/Libraries/LibWeb/Bindings/NodeWrapper.h index e39f2f1a8c0..0cbb3151925 100644 --- a/Libraries/LibWeb/Bindings/NodeWrapper.h +++ b/Libraries/LibWeb/Bindings/NodeWrapper.h @@ -33,7 +33,8 @@ namespace Bindings { class NodeWrapper : public EventTargetWrapper { public: - explicit NodeWrapper(Node&); + NodeWrapper(JS::GlobalObject&, Node&); + virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override; virtual ~NodeWrapper() override; Node& node(); diff --git a/Libraries/LibWeb/Bindings/WindowObject.cpp b/Libraries/LibWeb/Bindings/WindowObject.cpp index fda954ff139..746a81c8fc1 100644 --- a/Libraries/LibWeb/Bindings/WindowObject.cpp +++ b/Libraries/LibWeb/Bindings/WindowObject.cpp @@ -60,8 +60,8 @@ void WindowObject::initialize() define_native_function("requestAnimationFrame", request_animation_frame, 1); define_native_function("cancelAnimationFrame", cancel_animation_frame, 1); - define_property("navigator", heap().allocate(*this), JS::Attribute::Enumerable | JS::Attribute::Configurable); - define_property("location", heap().allocate(*this), JS::Attribute::Enumerable | JS::Attribute::Configurable); + define_property("navigator", heap().allocate(*this, *this), JS::Attribute::Enumerable | JS::Attribute::Configurable); + define_property("location", heap().allocate(*this, *this), JS::Attribute::Enumerable | JS::Attribute::Configurable); m_xhr_prototype = heap().allocate(*this, *this); m_xhr_constructor = heap().allocate(*this, *this); diff --git a/Libraries/LibWeb/Bindings/Wrappable.h b/Libraries/LibWeb/Bindings/Wrappable.h index 33c49d4224c..696ca7b199f 100644 --- a/Libraries/LibWeb/Bindings/Wrappable.h +++ b/Libraries/LibWeb/Bindings/Wrappable.h @@ -49,8 +49,10 @@ private: template inline Wrapper* wrap_impl(JS::Heap& heap, NativeObject& native_object) { - if (!native_object.wrapper()) - native_object.set_wrapper(*heap.allocate(heap.interpreter().global_object(), native_object)); + if (!native_object.wrapper()) { + auto& global_object = heap.interpreter().global_object(); + native_object.set_wrapper(*heap.allocate(global_object, global_object, native_object)); + } return native_object.wrapper(); } diff --git a/Libraries/LibWeb/Bindings/XMLHttpRequestConstructor.cpp b/Libraries/LibWeb/Bindings/XMLHttpRequestConstructor.cpp index 9a205cc44af..db1ee42a20f 100644 --- a/Libraries/LibWeb/Bindings/XMLHttpRequestConstructor.cpp +++ b/Libraries/LibWeb/Bindings/XMLHttpRequestConstructor.cpp @@ -64,7 +64,7 @@ JS::Value XMLHttpRequestConstructor::call(JS::Interpreter& interpreter) JS::Value XMLHttpRequestConstructor::construct(JS::Interpreter& interpreter) { auto& window = static_cast(global_object()); - return interpreter.heap().allocate(window, XMLHttpRequest::create(window.impl())); + return interpreter.heap().allocate(window, window, XMLHttpRequest::create(window.impl())); } } diff --git a/Libraries/LibWeb/Bindings/XMLHttpRequestWrapper.cpp b/Libraries/LibWeb/Bindings/XMLHttpRequestWrapper.cpp index cfc3f9ebaaa..df38dce6cae 100644 --- a/Libraries/LibWeb/Bindings/XMLHttpRequestWrapper.cpp +++ b/Libraries/LibWeb/Bindings/XMLHttpRequestWrapper.cpp @@ -41,10 +41,10 @@ XMLHttpRequestWrapper* wrap(JS::Heap& heap, XMLHttpRequest& impl) return static_cast(wrap_impl(heap, impl)); } -XMLHttpRequestWrapper::XMLHttpRequestWrapper(XMLHttpRequest& impl) - : EventTargetWrapper(impl) +XMLHttpRequestWrapper::XMLHttpRequestWrapper(JS::GlobalObject& global_object, XMLHttpRequest& impl) + : EventTargetWrapper(global_object, impl) { - set_prototype(static_cast(interpreter().global_object()).xhr_prototype()); + set_prototype(static_cast(global_object).xhr_prototype()); } XMLHttpRequestWrapper::~XMLHttpRequestWrapper() diff --git a/Libraries/LibWeb/Bindings/XMLHttpRequestWrapper.h b/Libraries/LibWeb/Bindings/XMLHttpRequestWrapper.h index fe1a6f0bd36..3f18d76b76c 100644 --- a/Libraries/LibWeb/Bindings/XMLHttpRequestWrapper.h +++ b/Libraries/LibWeb/Bindings/XMLHttpRequestWrapper.h @@ -33,7 +33,7 @@ namespace Bindings { class XMLHttpRequestWrapper final : public EventTargetWrapper { public: - explicit XMLHttpRequestWrapper(XMLHttpRequest&); + XMLHttpRequestWrapper(JS::GlobalObject&, XMLHttpRequest&); virtual ~XMLHttpRequestWrapper() override; XMLHttpRequest& impl();