void BroadcastChannel::Shutdown() { mState = StateClosed; // The DTOR of this WorkerRef will release the worker for us. mWorkerRef = nullptr; if (mActor) { mActor->SetParent(nullptr); if (NS_IsMainThread()) { RefPtr<TeardownRunnableOnMainThread> runnable = new TeardownRunnableOnMainThread(mActor); NS_DispatchToCurrentThread(runnable); } else { WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate(); MOZ_ASSERT(workerPrivate); RefPtr<TeardownRunnableOnWorker> runnable = new TeardownRunnableOnWorker(workerPrivate, mActor); runnable->Dispatch(); } mActor = nullptr; } IgnoreKeepAliveIfHasListenersFor(NS_LITERAL_STRING("message")); }
void MediaQueryList::Disconnect() { DisconnectFromOwner(); IgnoreKeepAliveIfHasListenersFor(ONCHANGE_STRING); }
void PermissionStatus::DisconnectFromOwner() { IgnoreKeepAliveIfHasListenersFor(NS_LITERAL_STRING("change")); if (mObserver) { mObserver->RemoveSink(this); mObserver = nullptr; } DOMEventTargetHelper::DisconnectFromOwner(); }
void BroadcastChannel::Shutdown() { mState = StateClosed; // The DTOR of this WorkerHolder will release the worker for us. mWorkerHolder = nullptr; if (mActor) { mActor->SetParent(nullptr); RefPtr<TeardownRunnable> runnable = new TeardownRunnable(mActor); NS_DispatchToCurrentThread(runnable); mActor = nullptr; } IgnoreKeepAliveIfHasListenersFor(NS_LITERAL_STRING("message")); }