소스 검색

LibWeb: Split JS wrapper constructors into construct/initialize

Andreas Kling 5 년 전
부모
커밋
03da70c7d0
31개의 변경된 파일107개의 추가작업 그리고 55개의 파일을 삭제
  1. 6 2
      Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.cpp
  2. 2 1
      Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.h
  3. 6 2
      Libraries/LibWeb/Bindings/DocumentWrapper.cpp
  4. 2 1
      Libraries/LibWeb/Bindings/DocumentWrapper.h
  5. 6 2
      Libraries/LibWeb/Bindings/ElementWrapper.cpp
  6. 2 1
      Libraries/LibWeb/Bindings/ElementWrapper.h
  7. 2 2
      Libraries/LibWeb/Bindings/EventListenerWrapper.cpp
  8. 1 1
      Libraries/LibWeb/Bindings/EventListenerWrapper.h
  9. 6 2
      Libraries/LibWeb/Bindings/EventTargetWrapper.cpp
  10. 2 1
      Libraries/LibWeb/Bindings/EventTargetWrapper.h
  11. 2 2
      Libraries/LibWeb/Bindings/EventWrapper.cpp
  12. 1 1
      Libraries/LibWeb/Bindings/EventWrapper.h
  13. 6 2
      Libraries/LibWeb/Bindings/HTMLCanvasElementWrapper.cpp
  14. 2 1
      Libraries/LibWeb/Bindings/HTMLCanvasElementWrapper.h
  15. 2 2
      Libraries/LibWeb/Bindings/HTMLImageElementWrapper.cpp
  16. 1 1
      Libraries/LibWeb/Bindings/HTMLImageElementWrapper.h
  17. 6 2
      Libraries/LibWeb/Bindings/ImageDataWrapper.cpp
  18. 2 1
      Libraries/LibWeb/Bindings/ImageDataWrapper.h
  19. 6 2
      Libraries/LibWeb/Bindings/LocationObject.cpp
  20. 2 1
      Libraries/LibWeb/Bindings/LocationObject.h
  21. 6 2
      Libraries/LibWeb/Bindings/MouseEventWrapper.cpp
  22. 2 1
      Libraries/LibWeb/Bindings/MouseEventWrapper.h
  23. 12 8
      Libraries/LibWeb/Bindings/NavigatorObject.cpp
  24. 2 1
      Libraries/LibWeb/Bindings/NavigatorObject.h
  25. 7 3
      Libraries/LibWeb/Bindings/NodeWrapper.cpp
  26. 2 1
      Libraries/LibWeb/Bindings/NodeWrapper.h
  27. 2 2
      Libraries/LibWeb/Bindings/WindowObject.cpp
  28. 4 2
      Libraries/LibWeb/Bindings/Wrappable.h
  29. 1 1
      Libraries/LibWeb/Bindings/XMLHttpRequestConstructor.cpp
  30. 3 3
      Libraries/LibWeb/Bindings/XMLHttpRequestWrapper.cpp
  31. 1 1
      Libraries/LibWeb/Bindings/XMLHttpRequestWrapper.h

+ 6 - 2
Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.cpp

@@ -47,9 +47,13 @@ CanvasRenderingContext2DWrapper* wrap(JS::Heap& heap, CanvasRenderingContext2D&
     return static_cast<CanvasRenderingContext2DWrapper*>(wrap_impl(heap, impl));
     return static_cast<CanvasRenderingContext2DWrapper*>(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)
     , m_impl(impl)
+{
+}
+
+void CanvasRenderingContext2DWrapper::initialize(JS::Interpreter&, JS::GlobalObject&)
 {
 {
     define_native_function("fillRect", fill_rect, 4);
     define_native_function("fillRect", fill_rect, 4);
     define_native_function("scale", scale, 2);
     define_native_function("scale", scale, 2);

+ 2 - 1
Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.h

@@ -33,7 +33,8 @@ namespace Bindings {
 
 
 class CanvasRenderingContext2DWrapper final : public Wrapper {
 class CanvasRenderingContext2DWrapper final : public Wrapper {
 public:
 public:
-    explicit CanvasRenderingContext2DWrapper(CanvasRenderingContext2D&);
+    CanvasRenderingContext2DWrapper(JS::GlobalObject&, CanvasRenderingContext2D&);
+    virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override;
     virtual ~CanvasRenderingContext2DWrapper() override;
     virtual ~CanvasRenderingContext2DWrapper() override;
 
 
     CanvasRenderingContext2D& impl() { return m_impl; }
     CanvasRenderingContext2D& impl() { return m_impl; }

+ 6 - 2
Libraries/LibWeb/Bindings/DocumentWrapper.cpp

@@ -38,8 +38,12 @@
 namespace Web {
 namespace Web {
 namespace Bindings {
 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("getElementById", get_element_by_id, 1);
     define_native_function("querySelector", query_selector, 1);
     define_native_function("querySelector", query_selector, 1);

+ 2 - 1
Libraries/LibWeb/Bindings/DocumentWrapper.h

@@ -33,7 +33,8 @@ namespace Bindings {
 
 
 class DocumentWrapper : public NodeWrapper {
 class DocumentWrapper : public NodeWrapper {
 public:
 public:
-    explicit DocumentWrapper(Document&);
+    DocumentWrapper(JS::GlobalObject&, Document&);
+    virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override;
     virtual ~DocumentWrapper() override;
     virtual ~DocumentWrapper() override;
 
 
     Document& node();
     Document& node();

+ 6 - 2
Libraries/LibWeb/Bindings/ElementWrapper.cpp

@@ -38,8 +38,12 @@
 namespace Web {
 namespace Web {
 namespace Bindings {
 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("innerHTML", inner_html_getter, inner_html_setter);
     define_native_property("id", id_getter, id_setter);
     define_native_property("id", id_getter, id_setter);

+ 2 - 1
Libraries/LibWeb/Bindings/ElementWrapper.h

@@ -33,7 +33,8 @@ namespace Bindings {
 
 
 class ElementWrapper : public NodeWrapper {
 class ElementWrapper : public NodeWrapper {
 public:
 public:
-    explicit ElementWrapper(Element&);
+    ElementWrapper(JS::GlobalObject&, Element&);
+    virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override;
     virtual ~ElementWrapper() override;
     virtual ~ElementWrapper() override;
 
 
     Element& node();
     Element& node();

+ 2 - 2
Libraries/LibWeb/Bindings/EventListenerWrapper.cpp

@@ -33,8 +33,8 @@
 namespace Web {
 namespace Web {
 namespace Bindings {
 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)
     , m_impl(impl)
 {
 {
 }
 }

+ 1 - 1
Libraries/LibWeb/Bindings/EventListenerWrapper.h

@@ -33,7 +33,7 @@ namespace Bindings {
 
 
 class EventListenerWrapper final : public Wrapper {
 class EventListenerWrapper final : public Wrapper {
 public:
 public:
-    explicit EventListenerWrapper(EventListener&);
+    EventListenerWrapper(JS::GlobalObject&, EventListener&);
     virtual ~EventListenerWrapper() override;
     virtual ~EventListenerWrapper() override;
 
 
     EventListener& impl() { return *m_impl; }
     EventListener& impl() { return *m_impl; }

+ 6 - 2
Libraries/LibWeb/Bindings/EventTargetWrapper.cpp

@@ -38,9 +38,13 @@
 namespace Web {
 namespace Web {
 namespace Bindings {
 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)
     , m_impl(impl)
+{
+}
+
+void EventTargetWrapper::initialize(JS::Interpreter&, JS::GlobalObject&)
 {
 {
     define_native_function("addEventListener", add_event_listener, 2);
     define_native_function("addEventListener", add_event_listener, 2);
 }
 }

+ 2 - 1
Libraries/LibWeb/Bindings/EventTargetWrapper.h

@@ -33,7 +33,8 @@ namespace Bindings {
 
 
 class EventTargetWrapper : public Wrapper {
 class EventTargetWrapper : public Wrapper {
 public:
 public:
-    explicit EventTargetWrapper(EventTarget&);
+    EventTargetWrapper(JS::GlobalObject&, EventTarget&);
+    virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override;
     virtual ~EventTargetWrapper() override;
     virtual ~EventTargetWrapper() override;
 
 
     EventTarget& impl() { return *m_impl; }
     EventTarget& impl() { return *m_impl; }

+ 2 - 2
Libraries/LibWeb/Bindings/EventWrapper.cpp

@@ -40,8 +40,8 @@ EventWrapper* wrap(JS::Heap& heap, Event& event)
     return static_cast<EventWrapper*>(wrap_impl(heap, event));
     return static_cast<EventWrapper*>(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)
     , m_event(event)
 {
 {
 }
 }

+ 1 - 1
Libraries/LibWeb/Bindings/EventWrapper.h

@@ -33,7 +33,7 @@ namespace Bindings {
 
 
 class EventWrapper : public Wrapper {
 class EventWrapper : public Wrapper {
 public:
 public:
-    explicit EventWrapper(Event&);
+    EventWrapper(JS::GlobalObject&, Event&);
     virtual ~EventWrapper() override;
     virtual ~EventWrapper() override;
 
 
     Event& event() { return m_event; }
     Event& event() { return m_event; }

+ 6 - 2
Libraries/LibWeb/Bindings/HTMLCanvasElementWrapper.cpp

@@ -38,8 +38,12 @@
 namespace Web {
 namespace Web {
 namespace Bindings {
 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);
     define_native_function("getContext", get_context, 1);
 
 

+ 2 - 1
Libraries/LibWeb/Bindings/HTMLCanvasElementWrapper.h

@@ -33,7 +33,8 @@ namespace Bindings {
 
 
 class HTMLCanvasElementWrapper : public ElementWrapper {
 class HTMLCanvasElementWrapper : public ElementWrapper {
 public:
 public:
-    explicit HTMLCanvasElementWrapper(HTMLCanvasElement&);
+    HTMLCanvasElementWrapper(JS::GlobalObject&, HTMLCanvasElement&);
+    virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override;
     virtual ~HTMLCanvasElementWrapper() override;
     virtual ~HTMLCanvasElementWrapper() override;
 
 
     HTMLCanvasElement& node();
     HTMLCanvasElement& node();

+ 2 - 2
Libraries/LibWeb/Bindings/HTMLImageElementWrapper.cpp

@@ -35,8 +35,8 @@
 namespace Web {
 namespace Web {
 namespace Bindings {
 namespace Bindings {
 
 
-HTMLImageElementWrapper::HTMLImageElementWrapper(HTMLImageElement& element)
-    : ElementWrapper(element)
+HTMLImageElementWrapper::HTMLImageElementWrapper(JS::GlobalObject& global_object, HTMLImageElement& element)
+    : ElementWrapper(global_object, element)
 {
 {
 }
 }
 
 

+ 1 - 1
Libraries/LibWeb/Bindings/HTMLImageElementWrapper.h

@@ -33,7 +33,7 @@ namespace Bindings {
 
 
 class HTMLImageElementWrapper : public ElementWrapper {
 class HTMLImageElementWrapper : public ElementWrapper {
 public:
 public:
-    explicit HTMLImageElementWrapper(HTMLImageElement&);
+    HTMLImageElementWrapper(JS::GlobalObject&, HTMLImageElement&);
     virtual ~HTMLImageElementWrapper() override;
     virtual ~HTMLImageElementWrapper() override;
 
 
     HTMLImageElement& node();
     HTMLImageElement& node();

+ 6 - 2
Libraries/LibWeb/Bindings/ImageDataWrapper.cpp

@@ -40,9 +40,13 @@ ImageDataWrapper* wrap(JS::Heap& heap, ImageData& event)
     return static_cast<ImageDataWrapper*>(wrap_impl(heap, event));
     return static_cast<ImageDataWrapper*>(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)
     , m_impl(impl)
+{
+}
+
+void ImageDataWrapper::initialize(JS::Interpreter&, JS::GlobalObject&)
 {
 {
     define_native_property("width", width_getter, nullptr);
     define_native_property("width", width_getter, nullptr);
     define_native_property("height", height_getter, nullptr);
     define_native_property("height", height_getter, nullptr);

+ 2 - 1
Libraries/LibWeb/Bindings/ImageDataWrapper.h

@@ -33,7 +33,8 @@ namespace Bindings {
 
 
 class ImageDataWrapper : public Wrapper {
 class ImageDataWrapper : public Wrapper {
 public:
 public:
-    explicit ImageDataWrapper(ImageData&);
+    ImageDataWrapper(JS::GlobalObject&, ImageData&);
+    virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override;
     virtual ~ImageDataWrapper() override;
     virtual ~ImageDataWrapper() override;
 
 
     ImageData& impl() { return m_impl; }
     ImageData& impl() { return m_impl; }

+ 6 - 2
Libraries/LibWeb/Bindings/LocationObject.cpp

@@ -35,8 +35,12 @@
 namespace Web {
 namespace Web {
 namespace Bindings {
 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;
     u8 attr = JS::Attribute::Writable | JS::Attribute::Enumerable;
     define_native_property("href", href_getter, href_setter, attr);
     define_native_property("href", href_getter, href_setter, attr);

+ 2 - 1
Libraries/LibWeb/Bindings/LocationObject.h

@@ -34,7 +34,8 @@ namespace Bindings {
 
 
 class LocationObject final : public JS::Object {
 class LocationObject final : public JS::Object {
 public:
 public:
-    LocationObject();
+    explicit LocationObject(JS::GlobalObject&);
+    virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override;
     virtual ~LocationObject() override;
     virtual ~LocationObject() override;
 
 
 private:
 private:

+ 6 - 2
Libraries/LibWeb/Bindings/MouseEventWrapper.cpp

@@ -35,8 +35,12 @@
 namespace Web {
 namespace Web {
 namespace Bindings {
 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("offsetX", offset_x_getter, nullptr);
     define_native_property("offsetY", offset_y_getter, nullptr);
     define_native_property("offsetY", offset_y_getter, nullptr);

+ 2 - 1
Libraries/LibWeb/Bindings/MouseEventWrapper.h

@@ -33,7 +33,8 @@ namespace Bindings {
 
 
 class MouseEventWrapper : public EventWrapper {
 class MouseEventWrapper : public EventWrapper {
 public:
 public:
-    explicit MouseEventWrapper(MouseEvent&);
+    MouseEventWrapper(JS::GlobalObject&, MouseEvent&);
+    virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override;
     virtual ~MouseEventWrapper() override;
     virtual ~MouseEventWrapper() override;
 
 
     MouseEvent& event();
     MouseEvent& event();

+ 12 - 8
Libraries/LibWeb/Bindings/NavigatorObject.cpp

@@ -34,19 +34,23 @@
 namespace Web {
 namespace Web {
 namespace Bindings {
 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"));
     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("language", languages->get(0));
     define_property("languages", languages);
     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);
     define_native_property("userAgent", user_agent_getter, nullptr);
 }
 }

+ 2 - 1
Libraries/LibWeb/Bindings/NavigatorObject.h

@@ -34,7 +34,8 @@ namespace Bindings {
 
 
 class NavigatorObject final : public JS::Object {
 class NavigatorObject final : public JS::Object {
 public:
 public:
-    NavigatorObject();
+    NavigatorObject(JS::GlobalObject&);
+    virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override;
     virtual ~NavigatorObject() override;
     virtual ~NavigatorObject() override;
 
 
 private:
 private:

+ 7 - 3
Libraries/LibWeb/Bindings/NodeWrapper.cpp

@@ -52,10 +52,14 @@ NodeWrapper* wrap(JS::Heap& heap, Node& node)
     return static_cast<NodeWrapper*>(wrap_impl(heap, node));
     return static_cast<NodeWrapper*>(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()
 NodeWrapper::~NodeWrapper()

+ 2 - 1
Libraries/LibWeb/Bindings/NodeWrapper.h

@@ -33,7 +33,8 @@ namespace Bindings {
 
 
 class NodeWrapper : public EventTargetWrapper {
 class NodeWrapper : public EventTargetWrapper {
 public:
 public:
-    explicit NodeWrapper(Node&);
+    NodeWrapper(JS::GlobalObject&, Node&);
+    virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override;
     virtual ~NodeWrapper() override;
     virtual ~NodeWrapper() override;
 
 
     Node& node();
     Node& node();

+ 2 - 2
Libraries/LibWeb/Bindings/WindowObject.cpp

@@ -60,8 +60,8 @@ void WindowObject::initialize()
     define_native_function("requestAnimationFrame", request_animation_frame, 1);
     define_native_function("requestAnimationFrame", request_animation_frame, 1);
     define_native_function("cancelAnimationFrame", cancel_animation_frame, 1);
     define_native_function("cancelAnimationFrame", cancel_animation_frame, 1);
 
 
-    define_property("navigator", heap().allocate<NavigatorObject>(*this), JS::Attribute::Enumerable | JS::Attribute::Configurable);
-    define_property("location", heap().allocate<LocationObject>(*this), JS::Attribute::Enumerable | JS::Attribute::Configurable);
+    define_property("navigator", heap().allocate<NavigatorObject>(*this, *this), JS::Attribute::Enumerable | JS::Attribute::Configurable);
+    define_property("location", heap().allocate<LocationObject>(*this, *this), JS::Attribute::Enumerable | JS::Attribute::Configurable);
 
 
     m_xhr_prototype = heap().allocate<XMLHttpRequestPrototype>(*this, *this);
     m_xhr_prototype = heap().allocate<XMLHttpRequestPrototype>(*this, *this);
     m_xhr_constructor = heap().allocate<XMLHttpRequestConstructor>(*this, *this);
     m_xhr_constructor = heap().allocate<XMLHttpRequestConstructor>(*this, *this);

+ 4 - 2
Libraries/LibWeb/Bindings/Wrappable.h

@@ -49,8 +49,10 @@ private:
 template<class NativeObject>
 template<class NativeObject>
 inline Wrapper* wrap_impl(JS::Heap& heap, NativeObject& native_object)
 inline Wrapper* wrap_impl(JS::Heap& heap, NativeObject& native_object)
 {
 {
-    if (!native_object.wrapper())
-        native_object.set_wrapper(*heap.allocate<typename NativeObject::WrapperType>(heap.interpreter().global_object(), native_object));
+    if (!native_object.wrapper()) {
+        auto& global_object = heap.interpreter().global_object();
+        native_object.set_wrapper(*heap.allocate<typename NativeObject::WrapperType>(global_object, global_object, native_object));
+    }
     return native_object.wrapper();
     return native_object.wrapper();
 }
 }
 
 

+ 1 - 1
Libraries/LibWeb/Bindings/XMLHttpRequestConstructor.cpp

@@ -64,7 +64,7 @@ JS::Value XMLHttpRequestConstructor::call(JS::Interpreter& interpreter)
 JS::Value XMLHttpRequestConstructor::construct(JS::Interpreter& interpreter)
 JS::Value XMLHttpRequestConstructor::construct(JS::Interpreter& interpreter)
 {
 {
     auto& window = static_cast<WindowObject&>(global_object());
     auto& window = static_cast<WindowObject&>(global_object());
-    return interpreter.heap().allocate<XMLHttpRequestWrapper>(window, XMLHttpRequest::create(window.impl()));
+    return interpreter.heap().allocate<XMLHttpRequestWrapper>(window, window, XMLHttpRequest::create(window.impl()));
 }
 }
 
 
 }
 }

+ 3 - 3
Libraries/LibWeb/Bindings/XMLHttpRequestWrapper.cpp

@@ -41,10 +41,10 @@ XMLHttpRequestWrapper* wrap(JS::Heap& heap, XMLHttpRequest& impl)
     return static_cast<XMLHttpRequestWrapper*>(wrap_impl(heap, impl));
     return static_cast<XMLHttpRequestWrapper*>(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<WindowObject&>(interpreter().global_object()).xhr_prototype());
+    set_prototype(static_cast<WindowObject&>(global_object).xhr_prototype());
 }
 }
 
 
 XMLHttpRequestWrapper::~XMLHttpRequestWrapper()
 XMLHttpRequestWrapper::~XMLHttpRequestWrapper()

+ 1 - 1
Libraries/LibWeb/Bindings/XMLHttpRequestWrapper.h

@@ -33,7 +33,7 @@ namespace Bindings {
 
 
 class XMLHttpRequestWrapper final : public EventTargetWrapper {
 class XMLHttpRequestWrapper final : public EventTargetWrapper {
 public:
 public:
-    explicit XMLHttpRequestWrapper(XMLHttpRequest&);
+    XMLHttpRequestWrapper(JS::GlobalObject&, XMLHttpRequest&);
     virtual ~XMLHttpRequestWrapper() override;
     virtual ~XMLHttpRequestWrapper() override;
 
 
     XMLHttpRequest& impl();
     XMLHttpRequest& impl();