#include "config.h"
#include "core/dom/ScriptedAnimationController.h"
+#include "core/css/MediaQueryListListener.h"
#include "core/dom/Document.h"
#include "core/dom/RequestAnimationFrameCallback.h"
#include "core/events/Event.h"
-#include "core/frame/DOMWindow.h"
+#include "core/frame/LocalDOMWindow.h"
#include "core/frame/FrameView.h"
#include "core/inspector/InspectorInstrumentation.h"
#include "core/inspector/InspectorTraceEvents.h"
#include "core/loader/DocumentLoader.h"
+#include "platform/Logging.h"
-namespace WebCore {
+namespace blink {
std::pair<EventTarget*, StringImpl*> eventTargetKey(const Event* event)
{
{
}
+void ScriptedAnimationController::trace(Visitor* visitor)
+{
+#if ENABLE(OILPAN)
+ visitor->trace(m_callbacks);
+ visitor->trace(m_callbacksToInvoke);
+ visitor->trace(m_document);
+ visitor->trace(m_eventQueue);
+ visitor->trace(m_mediaQueryListListeners);
+ visitor->trace(m_perFrameEvents);
+#endif
+}
+
void ScriptedAnimationController::suspend()
{
++m_suspendCount;
scheduleAnimationIfNeeded();
}
-ScriptedAnimationController::CallbackId ScriptedAnimationController::registerCallback(PassOwnPtr<RequestAnimationFrameCallback> callback)
+void ScriptedAnimationController::dispatchEventsAndCallbacksForPrinting()
+{
+ dispatchEvents();
+ callMediaQueryListListeners();
+}
+
+ScriptedAnimationController::CallbackId ScriptedAnimationController::registerCallback(RequestAnimationFrameCallback* callback)
{
ScriptedAnimationController::CallbackId id = ++m_nextCallbackId;
callback->m_cancelled = false;
// 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())
+ if (LocalDOMWindow* window = eventTarget->toDOMWindow())
window->dispatchEvent(events[i], nullptr);
else
eventTarget->dispatchEvent(events[i]);
+
+ InspectorInstrumentation::didRemoveEvent(eventTarget, events[i].get());
}
}
m_callbacksToInvoke.clear();
}
+void ScriptedAnimationController::callMediaQueryListListeners()
+{
+ MediaQueryListListeners listeners;
+ listeners.swap(m_mediaQueryListListeners);
+
+ for (MediaQueryListListeners::const_iterator it = listeners.begin(), end = listeners.end();
+ it != end; ++it) {
+ (*it)->notifyMediaQueryChanged();
+ }
+}
+
void ScriptedAnimationController::serviceScriptedAnimations(double monotonicTimeNow)
{
- if (!m_callbacks.size() && !m_eventQueue.size())
+ if (!m_callbacks.size() && !m_eventQueue.size() && !m_mediaQueryListListeners.size())
return;
if (m_suspendCount)
return;
- RefPtr<ScriptedAnimationController> protect(this);
+ RefPtrWillBeRawPtr<ScriptedAnimationController> protect(this);
+ callMediaQueryListListeners();
dispatchEvents();
executeCallbacks(monotonicTimeNow);
void ScriptedAnimationController::enqueueEvent(PassRefPtrWillBeRawPtr<Event> event)
{
+ InspectorInstrumentation::didEnqueueEvent(event->target(), event.get());
m_eventQueue.append(event);
scheduleAnimationIfNeeded();
}
enqueueEvent(event);
}
+void ScriptedAnimationController::enqueueMediaQueryChangeListeners(WillBeHeapVector<RefPtrWillBeMember<MediaQueryListListener> >& listeners)
+{
+ for (size_t i = 0; i < listeners.size(); ++i) {
+ m_mediaQueryListListeners.add(listeners[i]);
+ }
+ scheduleAnimationIfNeeded();
+}
+
void ScriptedAnimationController::scheduleAnimationIfNeeded()
{
if (!m_document)
if (m_suspendCount)
return;
- if (!m_callbacks.size() && !m_eventQueue.size())
+ if (!m_callbacks.size() && !m_eventQueue.size() && !m_mediaQueryListListeners.size())
return;
if (FrameView* frameView = m_document->view())