Index: third_party/WebKit/Source/core/dom/IntersectionObserverController.cpp |
diff --git a/third_party/WebKit/Source/core/dom/IntersectionObserverController.cpp b/third_party/WebKit/Source/core/dom/IntersectionObserverController.cpp |
index dbdb3f937f598f7f37bb4aad6f082e6f24f0c087..169ec7ceda926e01fce3e84be46eb1d66a4214d2 100644 |
--- a/third_party/WebKit/Source/core/dom/IntersectionObserverController.cpp |
+++ b/third_party/WebKit/Source/core/dom/IntersectionObserverController.cpp |
@@ -5,7 +5,7 @@ |
#include "core/dom/IntersectionObserverController.h" |
#include "core/dom/Document.h" |
-#include "core/dom/IdleRequestOptions.h" |
+#include "core/dom/TaskRunnerHelper.h" |
#include "platform/TraceEvent.h" |
namespace blink { |
@@ -19,7 +19,7 @@ IntersectionObserverController* IntersectionObserverController::create(Document* |
IntersectionObserverController::IntersectionObserverController(Document* document) |
: ActiveDOMObject(document) |
- , m_callbackID(0) |
+ , m_weakPtrFactory(this) |
, m_callbackFiredWhileSuspended(false) |
{ |
} |
@@ -29,15 +29,14 @@ IntersectionObserverController::~IntersectionObserverController() { } |
void IntersectionObserverController::scheduleIntersectionObserverForDelivery(IntersectionObserver& observer) |
{ |
m_pendingIntersectionObservers.add(&observer); |
- if (m_callbackID) |
- return; |
- Document* document = toDocument(getExecutionContext()); |
- if (!document) |
- return; |
- IdleRequestOptions options; |
- // The IntersectionObserver spec mandates that notifications be sent within 100ms. |
- options.setTimeout(100); |
- m_callbackID = document->requestIdleCallback(this, options); |
+ if (!m_weakPtrFactory.hasWeakPtrs()) { |
+ // TODO(ojan): These tasks decide whether to throttle a subframe, so they need to |
+ // be unthrottled, but we should throttle all the other tasks (e.g. ones coming from |
+ // the web page). |
+ TaskRunnerHelper::get(TaskType::Unthrottled, |
+ getExecutionContext())->postTask(BLINK_FROM_HERE, |
+ WTF::bind(&IntersectionObserverController::deliverIntersectionObservations, m_weakPtrFactory.createWeakPtr())); |
+ } |
} |
void IntersectionObserverController::resume() |
@@ -50,13 +49,6 @@ void IntersectionObserverController::resume() |
} |
} |
-void IntersectionObserverController::handleEvent(IdleDeadline*) |
-{ |
- DCHECK(m_callbackID); |
- m_callbackID = 0; |
- deliverIntersectionObservations(); |
-} |
- |
void IntersectionObserverController::deliverIntersectionObservations() |
{ |
ExecutionContext* context = getExecutionContext(); |
@@ -104,7 +96,6 @@ DEFINE_TRACE(IntersectionObserverController) |
visitor->trace(m_trackedIntersectionObservers); |
visitor->trace(m_pendingIntersectionObservers); |
ActiveDOMObject::trace(visitor); |
- IdleRequestCallback::trace(visitor); |
} |
} // namespace blink |