summaryrefslogtreecommitdiff
path: root/Source/WebCore/dom/Event.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/dom/Event.cpp')
-rw-r--r--Source/WebCore/dom/Event.cpp130
1 files changed, 75 insertions, 55 deletions
diff --git a/Source/WebCore/dom/Event.cpp b/Source/WebCore/dom/Event.cpp
index e222072d8..870595184 100644
--- a/Source/WebCore/dom/Event.cpp
+++ b/Source/WebCore/dom/Event.cpp
@@ -23,79 +23,47 @@
#include "config.h"
#include "Event.h"
+#include "EventNames.h"
+#include "EventPath.h"
#include "EventTarget.h"
#include "UserGestureIndicator.h"
#include <wtf/CurrentTime.h>
namespace WebCore {
-EventInit::EventInit()
- : bubbles(false)
- , cancelable(false)
-{
-}
-
-EventInit::EventInit(bool b, bool c)
- : bubbles(b)
- , cancelable(c)
-{
-}
-
-Event::Event()
- : m_canBubble(false)
- , m_cancelable(false)
- , m_propagationStopped(false)
- , m_immediatePropagationStopped(false)
- , m_defaultPrevented(false)
- , m_defaultHandled(false)
- , m_cancelBubble(false)
- , m_eventPhase(0)
- , m_currentTarget(0)
+Event::Event(IsTrusted isTrusted)
+ : m_isTrusted(isTrusted == IsTrusted::Yes)
, m_createTime(convertSecondsToDOMTimeStamp(currentTime()))
{
}
Event::Event(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg)
: m_type(eventType)
+ , m_isInitialized(true)
, m_canBubble(canBubbleArg)
, m_cancelable(cancelableArg)
- , m_propagationStopped(false)
- , m_immediatePropagationStopped(false)
- , m_defaultPrevented(false)
- , m_defaultHandled(false)
- , m_cancelBubble(false)
- , m_eventPhase(0)
- , m_currentTarget(0)
+ , m_isTrusted(true)
, m_createTime(convertSecondsToDOMTimeStamp(currentTime()))
{
}
Event::Event(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg, double timestamp)
: m_type(eventType)
+ , m_isInitialized(true)
, m_canBubble(canBubbleArg)
, m_cancelable(cancelableArg)
- , m_propagationStopped(false)
- , m_immediatePropagationStopped(false)
- , m_defaultPrevented(false)
- , m_defaultHandled(false)
- , m_cancelBubble(false)
- , m_eventPhase(0)
- , m_currentTarget(0)
+ , m_isTrusted(true)
, m_createTime(convertSecondsToDOMTimeStamp(timestamp))
{
}
-Event::Event(const AtomicString& eventType, const EventInit& initializer)
+Event::Event(const AtomicString& eventType, const EventInit& initializer, IsTrusted isTrusted)
: m_type(eventType)
+ , m_isInitialized(true)
, m_canBubble(initializer.bubbles)
, m_cancelable(initializer.cancelable)
- , m_propagationStopped(false)
- , m_immediatePropagationStopped(false)
- , m_defaultPrevented(false)
- , m_defaultHandled(false)
- , m_cancelBubble(false)
- , m_eventPhase(0)
- , m_currentTarget(0)
+ , m_composed(initializer.composed)
+ , m_isTrusted(isTrusted == IsTrusted::Yes)
, m_createTime(convertSecondsToDOMTimeStamp(currentTime()))
{
}
@@ -106,18 +74,42 @@ Event::~Event()
void Event::initEvent(const AtomicString& eventTypeArg, bool canBubbleArg, bool cancelableArg)
{
- if (dispatched())
+ if (isBeingDispatched())
return;
+ m_isInitialized = true;
m_propagationStopped = false;
m_immediatePropagationStopped = false;
m_defaultPrevented = false;
+ m_isTrusted = false;
+ m_target = nullptr;
m_type = eventTypeArg;
m_canBubble = canBubbleArg;
m_cancelable = cancelableArg;
}
+bool Event::composed() const
+{
+ if (m_composed)
+ return true;
+
+ // http://w3c.github.io/webcomponents/spec/shadow/#scoped-flag
+ if (!isTrusted())
+ return false;
+
+ return m_type == eventNames().inputEvent
+ || m_type == eventNames().textInputEvent
+ || m_type == eventNames().DOMActivateEvent
+ || isCompositionEvent()
+ || isClipboardEvent()
+ || isFocusEvent()
+ || isKeyboardEvent()
+ || isMouseEvent()
+ || isTouchEvent()
+ || isInputEvent();
+}
+
EventInterface Event::eventInterface() const
{
return EventInterfaceType;
@@ -143,12 +135,17 @@ bool Event::isKeyboardEvent() const
return false;
}
-bool Event::isTouchEvent() const
+bool Event::isInputEvent() const
+{
+ return false;
+}
+
+bool Event::isCompositionEvent() const
{
return false;
}
-bool Event::isDragEvent() const
+bool Event::isTouchEvent() const
{
return false;
}
@@ -168,32 +165,55 @@ bool Event::isBeforeUnloadEvent() const
return false;
}
-PassRefPtr<Event> Event::cloneFor(HTMLIFrameElement*) const
+bool Event::isErrorEvent() const
+{
+ return false;
+}
+
+bool Event::isTextEvent() const
+{
+ return false;
+}
+
+bool Event::isWheelEvent() const
{
- return Event::create(type(), bubbles(), cancelable());
+ return false;
}
-void Event::setTarget(PassRefPtr<EventTarget> target)
+void Event::setTarget(RefPtr<EventTarget>&& target)
{
if (m_target == target)
return;
- m_target = target;
+ m_target = WTFMove(target);
if (m_target)
receivedTarget();
}
+void Event::setCurrentTarget(EventTarget* currentTarget)
+{
+ m_currentTarget = currentTarget;
+}
+
+Vector<EventTarget*> Event::composedPath() const
+{
+ if (!m_eventPath)
+ return Vector<EventTarget*>();
+ return m_eventPath->computePathUnclosedToTarget(*m_currentTarget);
+}
+
void Event::receivedTarget()
{
}
-void Event::setUnderlyingEvent(PassRefPtr<Event> ue)
+void Event::setUnderlyingEvent(Event* underlyingEvent)
{
// Prohibit creation of a cycle -- just do nothing in that case.
- for (Event* e = ue.get(); e; e = e->underlyingEvent())
- if (e == this)
+ for (Event* event = underlyingEvent; event; event = event->underlyingEvent()) {
+ if (event == this)
return;
- m_underlyingEvent = ue;
+ }
+ m_underlyingEvent = underlyingEvent;
}
} // namespace WebCore