summaryrefslogtreecommitdiff
path: root/Libraries/LibWeb
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/LibWeb')
-rw-r--r--Libraries/LibWeb/Bindings/EventWrapperFactory.cpp (renamed from Libraries/LibWeb/Bindings/EventWrapper.cpp)14
-rw-r--r--Libraries/LibWeb/Bindings/EventWrapperFactory.h (renamed from Libraries/LibWeb/Bindings/EventWrapper.h)17
-rw-r--r--Libraries/LibWeb/Bindings/MouseEventWrapper.cpp88
-rw-r--r--Libraries/LibWeb/Bindings/MouseEventWrapper.h51
-rw-r--r--Libraries/LibWeb/Bindings/NodeWrapperFactory.h2
-rw-r--r--Libraries/LibWeb/CMakeLists.txt5
-rw-r--r--Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp4
-rw-r--r--Libraries/LibWeb/DOM/Event.h8
-rw-r--r--Libraries/LibWeb/DOM/Event.idl5
-rw-r--r--Libraries/LibWeb/DOM/MouseEvent.idl6
-rw-r--r--Libraries/LibWeb/DOM/Node.cpp3
-rw-r--r--Libraries/LibWeb/DOM/XMLHttpRequest.cpp3
12 files changed, 29 insertions, 177 deletions
diff --git a/Libraries/LibWeb/Bindings/EventWrapper.cpp b/Libraries/LibWeb/Bindings/EventWrapperFactory.cpp
index 129a110eec..ced48a4155 100644
--- a/Libraries/LibWeb/Bindings/EventWrapper.cpp
+++ b/Libraries/LibWeb/Bindings/EventWrapperFactory.cpp
@@ -25,10 +25,8 @@
*/
#include <LibJS/Interpreter.h>
-#include <LibJS/Runtime/GlobalObject.h>
#include <LibWeb/Bindings/EventWrapper.h>
#include <LibWeb/Bindings/MouseEventWrapper.h>
-#include <LibWeb/DOM/MouseEvent.h>
namespace Web {
namespace Bindings {
@@ -36,19 +34,9 @@ namespace Bindings {
EventWrapper* wrap(JS::Heap& heap, Event& event)
{
if (event.is_mouse_event())
- return static_cast<EventWrapper*>(wrap_impl(heap, static_cast<MouseEvent&>(event)));
+ return static_cast<MouseEventWrapper*>(wrap_impl(heap, static_cast<MouseEvent&>(event)));
return static_cast<EventWrapper*>(wrap_impl(heap, event));
}
-EventWrapper::EventWrapper(JS::GlobalObject& global_object, Event& event)
- : Wrapper(*global_object.object_prototype())
- , m_event(event)
-{
-}
-
-EventWrapper::~EventWrapper()
-{
-}
-
}
}
diff --git a/Libraries/LibWeb/Bindings/EventWrapper.h b/Libraries/LibWeb/Bindings/EventWrapperFactory.h
index 1e9f4b04b2..dee3c5422a 100644
--- a/Libraries/LibWeb/Bindings/EventWrapper.h
+++ b/Libraries/LibWeb/Bindings/EventWrapperFactory.h
@@ -26,25 +26,12 @@
#pragma once
-#include <LibWeb/Bindings/Wrapper.h>
+#include <LibJS/Forward.h>
+#include <LibWeb/Forward.h>
namespace Web {
namespace Bindings {
-class EventWrapper : public Wrapper {
- JS_OBJECT(EventWrapper, Wrapper);
-
-public:
- EventWrapper(JS::GlobalObject&, Event&);
- virtual ~EventWrapper() override;
-
- Event& event() { return m_event; }
- const Event& event() const { return m_event; }
-
-private:
- NonnullRefPtr<Event> m_event;
-};
-
EventWrapper* wrap(JS::Heap&, Event&);
}
diff --git a/Libraries/LibWeb/Bindings/MouseEventWrapper.cpp b/Libraries/LibWeb/Bindings/MouseEventWrapper.cpp
deleted file mode 100644
index 6d3ff58fb9..0000000000
--- a/Libraries/LibWeb/Bindings/MouseEventWrapper.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <AK/FlyString.h>
-#include <AK/Function.h>
-#include <LibJS/Interpreter.h>
-#include <LibJS/Runtime/Function.h>
-#include <LibJS/Runtime/GlobalObject.h>
-#include <LibWeb/Bindings/MouseEventWrapper.h>
-#include <LibWeb/DOM/MouseEvent.h>
-
-namespace Web {
-namespace Bindings {
-
-MouseEventWrapper::MouseEventWrapper(JS::GlobalObject& global_object, MouseEvent& event)
- : EventWrapper(global_object, event)
-{
-}
-
-void MouseEventWrapper::initialize(JS::Interpreter& interpreter, JS::GlobalObject& global_object)
-{
- EventWrapper::initialize(interpreter, global_object);
- define_native_property("offsetX", offset_x_getter, nullptr);
- define_native_property("offsetY", offset_y_getter, nullptr);
-}
-
-MouseEventWrapper::~MouseEventWrapper()
-{
-}
-
-const MouseEvent& MouseEventWrapper::event() const
-{
- return static_cast<const MouseEvent&>(EventWrapper::event());
-}
-
-MouseEvent& MouseEventWrapper::event()
-{
- return static_cast<MouseEvent&>(EventWrapper::event());
-}
-
-static MouseEvent* impl_from(JS::Interpreter& interpreter, JS::GlobalObject& global_object)
-{
- auto* this_object = interpreter.this_value(global_object).to_object(interpreter, global_object);
- if (!this_object)
- return nullptr;
- // FIXME: Verify that it's a CanvasRenderingContext2DWrapper somehow!
- return &static_cast<MouseEventWrapper*>(this_object)->event();
-}
-
-JS_DEFINE_NATIVE_GETTER(MouseEventWrapper::offset_x_getter)
-{
- if (auto* impl = impl_from(interpreter, global_object))
- return JS::Value(impl->offset_x());
- return {};
-}
-
-JS_DEFINE_NATIVE_GETTER(MouseEventWrapper::offset_y_getter)
-{
- if (auto* impl = impl_from(interpreter, global_object))
- return JS::Value(impl->offset_y());
- return {};
-}
-
-}
-}
diff --git a/Libraries/LibWeb/Bindings/MouseEventWrapper.h b/Libraries/LibWeb/Bindings/MouseEventWrapper.h
deleted file mode 100644
index 9e7cb96b8e..0000000000
--- a/Libraries/LibWeb/Bindings/MouseEventWrapper.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include <LibWeb/Bindings/EventWrapper.h>
-
-namespace Web {
-namespace Bindings {
-
-class MouseEventWrapper : public EventWrapper {
-public:
- MouseEventWrapper(JS::GlobalObject&, MouseEvent&);
- virtual void initialize(JS::Interpreter&, JS::GlobalObject&) override;
- virtual ~MouseEventWrapper() override;
-
- MouseEvent& event();
- const MouseEvent& event() const;
-
-private:
- virtual const char* class_name() const override { return "MouseEventWrapper"; }
-
- JS_DECLARE_NATIVE_GETTER(offset_x_getter);
- JS_DECLARE_NATIVE_GETTER(offset_y_getter);
-};
-
-}
-}
diff --git a/Libraries/LibWeb/Bindings/NodeWrapperFactory.h b/Libraries/LibWeb/Bindings/NodeWrapperFactory.h
index 33f162bbe3..b8fa0cd10b 100644
--- a/Libraries/LibWeb/Bindings/NodeWrapperFactory.h
+++ b/Libraries/LibWeb/Bindings/NodeWrapperFactory.h
@@ -26,8 +26,8 @@
#pragma once
-#include <LibWeb/Forward.h>
#include <LibJS/Forward.h>
+#include <LibWeb/Forward.h>
namespace Web {
namespace Bindings {
diff --git a/Libraries/LibWeb/CMakeLists.txt b/Libraries/LibWeb/CMakeLists.txt
index a42b71585f..9c36c2cc49 100644
--- a/Libraries/LibWeb/CMakeLists.txt
+++ b/Libraries/LibWeb/CMakeLists.txt
@@ -1,9 +1,8 @@
set(SOURCES
Bindings/CanvasRenderingContext2DWrapper.cpp
Bindings/EventListenerWrapper.cpp
- Bindings/EventWrapper.cpp
+ Bindings/EventWrapperFactory.cpp
Bindings/LocationObject.cpp
- Bindings/MouseEventWrapper.cpp
Bindings/NavigatorObject.cpp
Bindings/NodeWrapperFactory.cpp
Bindings/WindowObject.cpp
@@ -158,6 +157,8 @@ libweb_js_wrapper(HTMLElement)
libweb_js_wrapper(HTMLImageElement)
libweb_js_wrapper(HTMLCanvasElement)
libweb_js_wrapper(ImageData)
+libweb_js_wrapper(Event)
+libweb_js_wrapper(MouseEvent)
get_property(WRAPPER_SOURCES GLOBAL PROPERTY wrapper_sources)
set(SOURCES ${SOURCES} ${WRAPPER_SOURCES})
diff --git a/Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp b/Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp
index b7089a0dbc..ec47efa551 100644
--- a/Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp
+++ b/Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp
@@ -322,6 +322,8 @@ static bool should_emit_wrapper_factory(const IDL::Interface& interface)
return false;
if (interface.name.ends_with("Element"))
return false;
+ if (interface.name.ends_with("Event"))
+ return false;
return true;
}
@@ -521,7 +523,7 @@ void generate_implementation(const IDL::Interface& interface)
out() << " new_array->indexed_properties().append(wrap(interpreter.heap(), element));";
out() << " }";
out() << " return new_array;";
- } else if (return_type.name == "long") {
+ } else if (return_type.name == "long" || return_type.name == "double") {
out() << " return JS::Value(retval);";
} else if (return_type.name == "Uint8ClampedArray") {
out() << " return retval;";
diff --git a/Libraries/LibWeb/DOM/Event.h b/Libraries/LibWeb/DOM/Event.h
index 33ceabffba..67c5a5da6a 100644
--- a/Libraries/LibWeb/DOM/Event.h
+++ b/Libraries/LibWeb/DOM/Event.h
@@ -44,18 +44,18 @@ public:
virtual ~Event() {}
- const FlyString& name() const { return m_event_name; }
+ const FlyString& type() const { return m_type; }
virtual bool is_mouse_event() const { return false; }
protected:
- Event(const FlyString& event_name)
- : m_event_name(event_name)
+ explicit Event(const FlyString& type)
+ : m_type(type)
{
}
private:
- FlyString m_event_name;
+ FlyString m_type;
};
}
diff --git a/Libraries/LibWeb/DOM/Event.idl b/Libraries/LibWeb/DOM/Event.idl
new file mode 100644
index 0000000000..6a33752d50
--- /dev/null
+++ b/Libraries/LibWeb/DOM/Event.idl
@@ -0,0 +1,5 @@
+interface Event {
+
+ readonly attribute DOMString type;
+
+}
diff --git a/Libraries/LibWeb/DOM/MouseEvent.idl b/Libraries/LibWeb/DOM/MouseEvent.idl
new file mode 100644
index 0000000000..4cecda9462
--- /dev/null
+++ b/Libraries/LibWeb/DOM/MouseEvent.idl
@@ -0,0 +1,6 @@
+interface MouseEvent : Event {
+
+ readonly attribute double offsetX;
+ readonly attribute double offsetY;
+
+}
diff --git a/Libraries/LibWeb/DOM/Node.cpp b/Libraries/LibWeb/DOM/Node.cpp
index 0abb77b750..4f66b7de38 100644
--- a/Libraries/LibWeb/DOM/Node.cpp
+++ b/Libraries/LibWeb/DOM/Node.cpp
@@ -31,6 +31,7 @@
#include <LibJS/Runtime/MarkedValueList.h>
#include <LibJS/Runtime/ScriptFunction.h>
#include <LibWeb/Bindings/EventWrapper.h>
+#include <LibWeb/Bindings/EventWrapperFactory.h>
#include <LibWeb/Bindings/NodeWrapper.h>
#include <LibWeb/Bindings/NodeWrapperFactory.h>
#include <LibWeb/CSS/StyleResolver.h>
@@ -131,7 +132,7 @@ bool Node::is_link() const
void Node::dispatch_event(NonnullRefPtr<Event> event)
{
for (auto& listener : listeners()) {
- if (listener.event_name == event->name()) {
+ if (listener.event_name == event->type()) {
auto& function = const_cast<EventListener&>(*listener.listener).function();
#ifdef EVENT_DEBUG
static_cast<const JS::ScriptFunction*>(function)->body().dump(0);
diff --git a/Libraries/LibWeb/DOM/XMLHttpRequest.cpp b/Libraries/LibWeb/DOM/XMLHttpRequest.cpp
index 47b2f59f0a..89789c2a63 100644
--- a/Libraries/LibWeb/DOM/XMLHttpRequest.cpp
+++ b/Libraries/LibWeb/DOM/XMLHttpRequest.cpp
@@ -27,6 +27,7 @@
#include <LibJS/Interpreter.h>
#include <LibJS/Runtime/Function.h>
#include <LibWeb/Bindings/EventWrapper.h>
+#include <LibWeb/Bindings/EventWrapperFactory.h>
#include <LibWeb/Bindings/XMLHttpRequestWrapper.h>
#include <LibWeb/DOM/Document.h>
#include <LibWeb/DOM/Event.h>
@@ -91,7 +92,7 @@ void XMLHttpRequest::send()
void XMLHttpRequest::dispatch_event(NonnullRefPtr<Event> event)
{
for (auto& listener : listeners()) {
- if (listener.event_name == event->name()) {
+ if (listener.event_name == event->type()) {
auto& function = const_cast<EventListener&>(*listener.listener).function();
auto& heap = function.heap();
auto* this_value = wrap(heap, *this);