diff options
author | Ben Murdoch <benm@google.com> | 2011-06-02 12:07:03 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-06-10 10:47:21 +0100 |
commit | 2daae5fd11344eaa88a0d92b0f6d65f8d2255c00 (patch) | |
tree | e4964fbd1cb70599f7718ff03e50ea1dab33890b /Source/WebCore/dom/EventQueue.cpp | |
parent | 87bdf0060a247bfbe668342b87e0874182e0ffa9 (diff) | |
download | external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.zip external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.gz external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.bz2 |
Merge WebKit at r84325: Initial merge by git.
Change-Id: Ic1a909300ecc0a13ddc6b4e784371d2ac6e3d59b
Diffstat (limited to 'Source/WebCore/dom/EventQueue.cpp')
-rw-r--r-- | Source/WebCore/dom/EventQueue.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/Source/WebCore/dom/EventQueue.cpp b/Source/WebCore/dom/EventQueue.cpp index 8e544c1..90f3e5d 100644 --- a/Source/WebCore/dom/EventQueue.cpp +++ b/Source/WebCore/dom/EventQueue.cpp @@ -28,12 +28,20 @@ #include "EventQueue.h" #include "DOMWindow.h" +#include "Document.h" #include "Event.h" #include "EventNames.h" +#include "RuntimeApplicationChecks.h" #include "ScriptExecutionContext.h" #include "SuspendableTimer.h" namespace WebCore { + +static inline bool shouldDispatchScrollEventSynchronously(Document* document) +{ + ASSERT_ARG(document, document); + return applicationIsSafari() && (document->url().protocolIs("feed") || document->url().protocolIs("feeds")); +} class EventQueueTimer : public SuspendableTimer { WTF_MAKE_NONCOPYABLE(EventQueueTimer); @@ -71,14 +79,20 @@ void EventQueue::enqueueEvent(PassRefPtr<Event> event) m_pendingEventTimer->startOneShot(0); } -void EventQueue::enqueueScrollEvent(PassRefPtr<Node> target, ScrollEventTargetType targetType) +void EventQueue::enqueueOrDispatchScrollEvent(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 */); + + if (shouldDispatchScrollEventSynchronously(target->document())) { + target->dispatchEvent(scrollEvent.release()); + return; + } + + if (!m_nodesWithQueuedScrollEvents.add(target.get()).second) + return; + scrollEvent->setTarget(target); enqueueEvent(scrollEvent.release()); } @@ -92,6 +106,12 @@ bool EventQueue::cancelEvent(Event* event) return found; } +void EventQueue::cancelQueuedEvents() +{ + m_pendingEventTimer->stop(); + m_queuedEvents.clear(); +} + void EventQueue::pendingEventTimerFired() { ASSERT(!m_pendingEventTimer->isActive()); |