summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/dom/EventQueue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/dom/EventQueue.cpp')
-rw-r--r--Source/WebCore/dom/EventQueue.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/Source/WebCore/dom/EventQueue.cpp b/Source/WebCore/dom/EventQueue.cpp
index 27cd802..a43929e 100644
--- a/Source/WebCore/dom/EventQueue.cpp
+++ b/Source/WebCore/dom/EventQueue.cpp
@@ -48,12 +48,26 @@ void EventQueue::enqueueEvent(PassRefPtr<Event> event)
m_pendingEventTimer.startOneShot(0);
}
+void EventQueue::enqueueScrollEvent(PassRefPtr<Node> target, ScrollEventTargetType targetType)
+{
+ if (!m_nodesWithQueuedScrollEvents.add(target.get()).second)
+ return;
+
+ // Per the W3C CSSOM View Module, scroll events fired at the document should bubble, others should not.
+ bool canBubble = targetType == ScrollEventDocumentTarget;
+ RefPtr<Event> scrollEvent = Event::create(eventNames().scrollEvent, canBubble, false /* non cancelleable */);
+ scrollEvent->setTarget(target);
+ enqueueEvent(scrollEvent.release());
+}
+
void EventQueue::pendingEventTimerFired(Timer<EventQueue>*)
{
ASSERT(!m_pendingEventTimer.isActive());
Vector<RefPtr<Event> > queuedEvents;
queuedEvents.swap(m_queuedEvents);
+
+ m_nodesWithQueuedScrollEvents.clear();
for (size_t i = 0; i < queuedEvents.size(); i++)
dispatchEvent(queuedEvents[i].release());