| OLD | NEW | 
|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "core/dom/IntersectionObserverController.h" | 5 #include "core/dom/IntersectionObserverController.h" | 
| 6 | 6 | 
| 7 #include "core/dom/Document.h" | 7 #include "core/dom/Document.h" | 
| 8 #include "core/dom/TaskRunnerHelper.h" | 8 #include "core/dom/TaskRunnerHelper.h" | 
| 9 #include "platform/TraceEvent.h" | 9 #include "platform/TraceEvent.h" | 
| 10 | 10 | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 23     : ActiveDOMObject(document), | 23     : ActiveDOMObject(document), | 
| 24       m_weakPtrFactory(this), | 24       m_weakPtrFactory(this), | 
| 25       m_callbackFiredWhileSuspended(false) {} | 25       m_callbackFiredWhileSuspended(false) {} | 
| 26 | 26 | 
| 27 IntersectionObserverController::~IntersectionObserverController() {} | 27 IntersectionObserverController::~IntersectionObserverController() {} | 
| 28 | 28 | 
| 29 void IntersectionObserverController::scheduleIntersectionObserverForDelivery( | 29 void IntersectionObserverController::scheduleIntersectionObserverForDelivery( | 
| 30     IntersectionObserver& observer) { | 30     IntersectionObserver& observer) { | 
| 31   m_pendingIntersectionObservers.add(&observer); | 31   m_pendingIntersectionObservers.add(&observer); | 
| 32   if (!m_weakPtrFactory.hasWeakPtrs()) { | 32   if (!m_weakPtrFactory.hasWeakPtrs()) { | 
| 33     // TODO(ojan): These tasks decide whether to throttle a subframe, so they ne
     ed to | 33     // TODO(ojan): These tasks decide whether to throttle a subframe, so they | 
| 34     // be unthrottled, but we should throttle all the other tasks (e.g. ones com
     ing from | 34     // need to be unthrottled, but we should throttle all the other tasks | 
| 35     // the web page). | 35     // (e.g. ones coming from the web page). | 
| 36     TaskRunnerHelper::get(TaskType::Unthrottled, getExecutionContext()) | 36     TaskRunnerHelper::get(TaskType::Unthrottled, getExecutionContext()) | 
| 37         ->postTask(BLINK_FROM_HERE, | 37         ->postTask(BLINK_FROM_HERE, | 
| 38                    WTF::bind(&IntersectionObserverController:: | 38                    WTF::bind(&IntersectionObserverController:: | 
| 39                                  deliverIntersectionObservations, | 39                                  deliverIntersectionObservations, | 
| 40                              m_weakPtrFactory.createWeakPtr())); | 40                              m_weakPtrFactory.createWeakPtr())); | 
| 41   } | 41   } | 
| 42 } | 42 } | 
| 43 | 43 | 
| 44 void IntersectionObserverController::resume() { | 44 void IntersectionObserverController::resume() { | 
| 45   // If the callback fired while DOM objects were suspended, notifications might
      be late, so deliver | 45   // If the callback fired while DOM objects were suspended, notifications might | 
| 46   // them right away (rather than waiting to fire again). | 46   // be late, so deliver them right away (rather than waiting to fire again). | 
| 47   if (m_callbackFiredWhileSuspended) { | 47   if (m_callbackFiredWhileSuspended) { | 
| 48     m_callbackFiredWhileSuspended = false; | 48     m_callbackFiredWhileSuspended = false; | 
| 49     deliverIntersectionObservations(); | 49     deliverIntersectionObservations(); | 
| 50   } | 50   } | 
| 51 } | 51 } | 
| 52 | 52 | 
| 53 void IntersectionObserverController::deliverIntersectionObservations() { | 53 void IntersectionObserverController::deliverIntersectionObservations() { | 
| 54   ExecutionContext* context = getExecutionContext(); | 54   ExecutionContext* context = getExecutionContext(); | 
| 55   if (!context) { | 55   if (!context) { | 
| 56     m_pendingIntersectionObservers.clear(); | 56     m_pendingIntersectionObservers.clear(); | 
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 92   m_trackedIntersectionObservers.removeAll(toRemove); | 92   m_trackedIntersectionObservers.removeAll(toRemove); | 
| 93 } | 93 } | 
| 94 | 94 | 
| 95 DEFINE_TRACE(IntersectionObserverController) { | 95 DEFINE_TRACE(IntersectionObserverController) { | 
| 96   visitor->trace(m_trackedIntersectionObservers); | 96   visitor->trace(m_trackedIntersectionObservers); | 
| 97   visitor->trace(m_pendingIntersectionObservers); | 97   visitor->trace(m_pendingIntersectionObservers); | 
| 98   ActiveDOMObject::trace(visitor); | 98   ActiveDOMObject::trace(visitor); | 
| 99 } | 99 } | 
| 100 | 100 | 
| 101 }  // namespace blink | 101 }  // namespace blink | 
| OLD | NEW | 
|---|