| 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 fa6942c7490bd60df74c479be7a2c5e3461f56e0..ea83338acbc12f6b27c4091b36e3fb434051d788 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/IntersectionObservationRegistry.h"
|
| #include "core/dom/LayoutTreeBuilderTraversal.h"
|
| #include "core/dom/MainThreadTaskRunner.h"
|
| #include "core/dom/Microtask.h"
|
| @@ -432,6 +433,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();
|
|
|
| @@ -4966,6 +4970,27 @@ void Document::parseDNSPrefetchControlHeader(const String& dnsPrefetchControl)
|
| m_haveExplicitlyDisabledDNSPrefetch = true;
|
| }
|
|
|
| +WeakPtr<Document> Document::createWeakPtr()
|
| +{
|
| + if (!m_weakPointerFactory)
|
| + m_weakPointerFactory = adoptPtrWillBeNoop(new WeakPtrFactory<Document>(this));
|
| + return m_weakPointerFactory->createWeakPtr();
|
| +}
|
| +
|
| +IntersectionObservationRegistry* Document::intersectionObservationRegistry()
|
| +{
|
| + if (!m_intersectionObservationRegistry)
|
| + m_intersectionObservationRegistry = adoptPtrWillBeNoop(new IntersectionObservationRegistry(m_deliverIntersectionObservationsTimer));
|
| + return m_intersectionObservationRegistry.get();
|
| +}
|
| +
|
| +void Document::deliverIntersectionObservationsTimerFired(Timer<Document>*)
|
| +{
|
| + ASSERT(isMainThread());
|
| + ASSERT(m_intersectionObservationRegistry);
|
| + m_intersectionObservationRegistry->deliverIntersectionObservations();
|
| +}
|
| +
|
| void Document::reportBlockedScriptExecutionToInspector(const String& directiveText)
|
| {
|
| InspectorInstrumentation::scriptExecutionBlockedByCSP(this, directiveText);
|
| @@ -5023,6 +5048,8 @@ void Document::tasksWereResumed()
|
| m_scriptedAnimationController->resume();
|
|
|
| MutationObserver::resumeSuspendedObservers();
|
| + if (m_intersectionObservationRegistry)
|
| + m_intersectionObservationRegistry->resumeSuspendedIntersectionObservers();
|
| if (m_domWindow)
|
| DOMWindowPerformance::performance(*m_domWindow)->resumeSuspendedObservers();
|
| }
|
| @@ -5806,6 +5833,7 @@ DEFINE_TRACE(Document)
|
| visitor->trace(m_compositorPendingAnimations);
|
| visitor->trace(m_contextDocument);
|
| visitor->trace(m_canvasFontCache);
|
| + visitor->trace(m_intersectionObservationRegistry);
|
| WillBeHeapSupplementable<Document>::trace(visitor);
|
| #endif
|
| TreeScope::trace(visitor);
|
|
|