diff --git a/dom/workers/ServiceWorkerPrivate.cpp b/dom/workers/ServiceWorkerPrivate.cpp index 5edd34505b86..a8ec6a82fb50 100644 --- a/dom/workers/ServiceWorkerPrivate.cpp +++ b/dom/workers/ServiceWorkerPrivate.cpp @@ -845,6 +845,15 @@ private: bool WorkerRun(JSContext* aCx, WorkerPrivate* aWorkerPrivate) override; + NS_IMETHOD + Cancel() override + { + // Always ensure the handler is released on the worker thread, even if we + // are cancelled. + mHandler = nullptr; + return WorkerRunnable::Cancel(); + } + RefPtr mHandler; }; @@ -955,6 +964,7 @@ bool ClearWindowAllowedRunnable::WorkerRun(JSContext* aCx, WorkerPrivate* aWorkerPrivate) { mHandler->ClearWindowAllowed(aWorkerPrivate); + mHandler = nullptr; return true; }