void ScriptExecutionContext::suspendActiveDOMObjectIfNeeded(ActiveDOMObject& activeDOMObject) { ASSERT(m_activeDOMObjects.contains(&activeDOMObject)); if (m_activeDOMObjectsAreSuspended) activeDOMObject.suspend(m_reasonForSuspendingActiveDOMObjects); if (m_activeDOMObjectsAreStopped) activeDOMObject.stop(); }
void ContextLifecycleNotifier::notifyStoppingActiveDOMObjects() { TemporaryChange<IterationType> scope(m_iterating, IteratingOverAll); Vector<UntracedMember<ContextLifecycleObserver>> snapshotOfObservers; copyToVector(m_observers, snapshotOfObservers); for (ContextLifecycleObserver* observer : snapshotOfObservers) { // It's possible that the ActiveDOMObject is already destructed. // See a FIXME above. if (m_observers.contains(observer)) { if (observer->observerType() != ContextLifecycleObserver::ActiveDOMObjectType) continue; ActiveDOMObject* activeDOMObject = static_cast<ActiveDOMObject*>(observer); #if DCHECK_IS_ON() DCHECK_EQ(activeDOMObject->getExecutionContext(), context()); DCHECK(activeDOMObject->suspendIfNeededCalled()); #endif activeDOMObject->stop(); } } }