Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(217)

Unified Diff: third_party/WebKit/Source/core/dom/Document.cpp

Issue 1449623002: IntersectionObserver: second cut. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Fix rootMargin parsing Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/dom/Document.cpp
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp
index 5163577596583956aac44fb63d5c25e8caec1774..f2752b17856589f5e5f0caad0dcf468fee0b9c6f 100644
--- a/third_party/WebKit/Source/core/dom/Document.cpp
+++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -76,6 +76,7 @@
#include "core/dom/ExceptionCode.h"
#include "core/dom/ExecutionContextTask.h"
#include "core/dom/FrameRequestCallback.h"
+#include "core/dom/IntersectionObserverRegistry.h"
#include "core/dom/LayoutTreeBuilderTraversal.h"
#include "core/dom/MainThreadTaskRunner.h"
#include "core/dom/Microtask.h"
@@ -433,6 +434,7 @@ Document::Document(const DocumentInit& initializer, DocumentClassFlags documentC
, m_loadEventDelayCount(0)
, m_loadEventDelayTimer(this, &Document::loadEventDelayTimerFired)
, m_pluginLoadingTimer(this, &Document::pluginLoadingTimerFired)
+ , m_deliverIntersectionObservationsTimer(this, &Document::deliverIntersectionObservationsTimerFired)
, m_documentTiming(*this)
, m_writeRecursionIsTooDeep(false)
, m_writeRecursionDepth(0)
@@ -602,6 +604,8 @@ void Document::dispose()
if (svgExtensions())
accessSVGExtensions().pauseAnimations();
+ m_deliverIntersectionObservationsTimer.stop();
+
m_lifecycle.advanceTo(DocumentLifecycle::Disposed);
DocumentLifecycleNotifier::notifyDocumentWasDisposed();
@@ -4482,11 +4486,7 @@ WeakPtrWillBeRawPtr<Document> Document::contextDocument()
if (m_contextDocument)
return m_contextDocument;
if (m_frame) {
-#if ENABLE(OILPAN)
- return this;
-#else
- return m_weakFactory.createWeakPtr();
-#endif
+ return createWeakPtr();
}
return nullptr;
}
@@ -4962,6 +4962,29 @@ void Document::parseDNSPrefetchControlHeader(const String& dnsPrefetchControl)
m_haveExplicitlyDisabledDNSPrefetch = true;
}
+WeakPtrWillBeRawPtr<Document> Document::createWeakPtr()
dcheng 2015/12/10 00:37:09 Having look at the design doc and spec some more,
szager1 2015/12/10 22:38:54 I understand your reticence, but I also spent two
+{
+#if ENABLE(OILPAN)
+ return this;
+#else
+ return m_weakFactory.createWeakPtr();
+#endif
+}
+
+IntersectionObserverRegistry* Document::intersectionObserverRegistry()
+{
+ if (!m_intersectionObserverRegistry)
+ m_intersectionObserverRegistry = new IntersectionObserverRegistry(m_deliverIntersectionObservationsTimer);
+ return m_intersectionObserverRegistry.get();
+}
+
+void Document::deliverIntersectionObservationsTimerFired(Timer<Document>*)
+{
+ ASSERT(isMainThread());
+ ASSERT(m_intersectionObserverRegistry);
+ m_intersectionObserverRegistry->deliverIntersectionObservations();
+}
+
void Document::reportBlockedScriptExecutionToInspector(const String& directiveText)
{
InspectorInstrumentation::scriptExecutionBlockedByCSP(this, directiveText);
@@ -5019,6 +5042,8 @@ void Document::tasksWereResumed()
m_scriptedAnimationController->resume();
MutationObserver::resumeSuspendedObservers();
+ if (m_intersectionObserverRegistry)
+ m_intersectionObserverRegistry->resumeSuspendedIntersectionObservers();
if (m_domWindow)
DOMWindowPerformance::performance(*m_domWindow)->resumeSuspendedObservers();
}
@@ -5812,6 +5837,7 @@ DEFINE_TRACE(Document)
visitor->trace(m_compositorPendingAnimations);
visitor->trace(m_contextDocument);
visitor->trace(m_canvasFontCache);
+ visitor->trace(m_intersectionObserverRegistry);
WillBeHeapSupplementable<Document>::trace(visitor);
#endif
TreeScope::trace(visitor);

Powered by Google App Engine
This is Rietveld 408576698