Index: Source/core/dom/Document.cpp |
diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp |
index be4eee242f3c4bf5fd3e270dea6cac481171ded7..2aff5c201de51a354399b31c0ee3e245a9520ab6 100644 |
--- a/Source/core/dom/Document.cpp |
+++ b/Source/core/dom/Document.cpp |
@@ -91,6 +91,7 @@ |
#include "core/dom/ProcessingInstruction.h" |
#include "core/dom/ScriptRunner.h" |
#include "core/dom/ScriptedAnimationController.h" |
+#include "core/dom/ScriptedIdleTaskController.h" |
#include "core/dom/SelectorQuery.h" |
#include "core/dom/StaticNodeList.h" |
#include "core/dom/StyleEngine.h" |
@@ -644,6 +645,11 @@ void Document::dispose() |
m_scriptedAnimationController->clearDocumentPointer(); |
m_scriptedAnimationController.clear(); |
+ // FIXME: consider using ActiveDOMObject. |
+ if (m_scriptedIdleTaskController) |
+ m_scriptedIdleTaskController->clearDocumentPointer(); |
+ m_scriptedIdleTaskController.clear(); |
+ |
if (svgExtensions()) |
accessSVGExtensions().pauseAnimations(); |
@@ -2130,6 +2136,11 @@ void Document::detach(const AttachContext& context) |
m_scriptedAnimationController->clearDocumentPointer(); |
m_scriptedAnimationController.clear(); |
+ // FIXME: consider using ActiveDOMObject. |
+ if (m_scriptedIdleTaskController) |
+ m_scriptedIdleTaskController->clearDocumentPointer(); |
+ m_scriptedIdleTaskController.clear(); |
+ |
if (svgExtensions()) |
accessSVGExtensions().pauseAnimations(); |
@@ -5130,6 +5141,26 @@ void Document::serviceScriptedAnimations(double monotonicAnimationStartTime) |
m_scriptedAnimationController->serviceScriptedAnimations(monotonicAnimationStartTime); |
} |
+ScriptedIdleTaskController& Document::ensureScriptedIdleTaskController() |
+{ |
+ if (!m_scriptedIdleTaskController) { |
+ m_scriptedIdleTaskController = ScriptedIdleTaskController::create(this); |
+ } |
+ return *m_scriptedIdleTaskController; |
+} |
+ |
+int Document::requestIdleFrame(IdleRequestCallback* callback) |
+{ |
+ return ensureScriptedIdleTaskController().registerCallback(callback); |
+} |
+ |
+void Document::cancelIdleFrame(int id) |
+{ |
+ if (!m_scriptedIdleTaskController) |
+ return; |
+ m_scriptedIdleTaskController->cancelCallback(id); |
+} |
+ |
PassRefPtrWillBeRawPtr<Touch> Document::createTouch(DOMWindow* window, EventTarget* target, int identifier, double pageX, double pageY, double screenX, double screenY, double radiusX, double radiusY, float rotationAngle, float force) const |
{ |
// Match behavior from when these types were integers, and avoid surprises from someone explicitly |
@@ -5734,6 +5765,7 @@ DEFINE_TRACE(Document) |
visitor->trace(m_styleSheetList); |
visitor->trace(m_mediaQueryMatcher); |
visitor->trace(m_scriptedAnimationController); |
+ visitor->trace(m_scriptedIdleTaskController); |
visitor->trace(m_textAutosizer); |
visitor->trace(m_registrationContext); |
visitor->trace(m_customElementMicrotaskRunQueue); |