| Index: Source/core/dom/ScriptedAnimationController.cpp
|
| diff --git a/Source/core/dom/ScriptedAnimationController.cpp b/Source/core/dom/ScriptedAnimationController.cpp
|
| index 6438e51afa9b6bf5fc83aa67cb3c06ddf43505ba..33446c8e85835e2137a614e139e4ec09dc0a5ec1 100644
|
| --- a/Source/core/dom/ScriptedAnimationController.cpp
|
| +++ b/Source/core/dom/ScriptedAnimationController.cpp
|
| @@ -36,7 +36,7 @@
|
|
|
| namespace WebCore {
|
|
|
| -std::pair<EventTarget*, StringImpl*> scheduledEventTargetKey(const Event* event)
|
| +std::pair<EventTarget*, StringImpl*> eventTargetKey(const Event* event)
|
| {
|
| return std::make_pair(event->target(), event->type().impl());
|
| }
|
| @@ -95,11 +95,13 @@ void ScriptedAnimationController::dispatchEvents()
|
| {
|
| Vector<RefPtr<Event> > events;
|
| events.swap(m_eventQueue);
|
| - m_scheduledEventTargets.clear();
|
| + m_perFrameEvents.clear();
|
|
|
| for (size_t i = 0; i < events.size(); ++i) {
|
| EventTarget* eventTarget = events[i]->target();
|
| - // FIXME: we should figure out how to make dispatchEvent properly virtual to avoid this.
|
| + // FIXME: we should figure out how to make dispatchEvent properly virtual to avoid
|
| + // special casting window.
|
| + // FIXME: We should not fire events for nodes that are no longer in the tree.
|
| if (DOMWindow* window = eventTarget->toDOMWindow())
|
| window->dispatchEvent(events[i], 0);
|
| else
|
| @@ -158,14 +160,19 @@ void ScriptedAnimationController::serviceScriptedAnimations(double monotonicTime
|
| scheduleAnimationIfNeeded();
|
| }
|
|
|
| -void ScriptedAnimationController::scheduleEvent(PassRefPtr<Event> event)
|
| +void ScriptedAnimationController::enqueueEvent(PassRefPtr<Event> event)
|
| {
|
| - if (!m_scheduledEventTargets.add(scheduledEventTargetKey(event.get())).isNewEntry)
|
| - return;
|
| m_eventQueue.append(event);
|
| scheduleAnimationIfNeeded();
|
| }
|
|
|
| +void ScriptedAnimationController::enqueuePerFrameEvent(PassRefPtr<Event> event)
|
| +{
|
| + if (!m_perFrameEvents.add(eventTargetKey(event.get())).isNewEntry)
|
| + return;
|
| + enqueueEvent(event);
|
| +}
|
| +
|
| void ScriptedAnimationController::scheduleAnimationIfNeeded()
|
| {
|
| if (!m_document)
|
|
|