void WorkerThreadableLoader::MainThreadBridge::destroy() { // Ensure that no more client callbacks are done in the worker context's thread. clearClientWrapper(); // "delete this" and m_mainThreadLoader::deref() on the worker object's thread. m_loaderProxy.postTaskToLoader(createCallbackTask(&MainThreadBridge::mainThreadDestroy, this)); }
void WorkerThreadableWebSocketChannel::Bridge::disconnect() { clearClientWrapper(); if (m_peer) { Peer* peer = m_peer; m_peer = 0; m_loaderProxy.postTaskToLoader(createCallbackTask(&mainThreadDestroy, AllowCrossThreadAccess(peer))); } m_workerContext = 0; }
void WorkerThreadableLoader::MainThreadBridge::destroy() { // Ensure that no more client callbacks are done in the worker context's thread. clearClientWrapper(); // "delete this" and m_mainThreadLoader::deref() on the worker object's thread. m_loaderProxy.postTaskToLoader([self = std::unique_ptr<WorkerThreadableLoader::MainThreadBridge>(this)] (ScriptExecutionContext& context) { ASSERT(isMainThread()); ASSERT_UNUSED(context, context.isDocument()); }); }
void WorkerThreadableWebSocketChannel::Bridge::disconnect() { clearClientWrapper(); if (m_peer) { m_loaderProxy.postTaskToLoader([peer = std::unique_ptr<Peer>(m_peer)](ScriptExecutionContext& context) { ASSERT(isMainThread()); ASSERT_UNUSED(context, context.isDocument()); }); m_peer = nullptr; } m_workerGlobalScope = nullptr; }
void WorkerThreadableLoader::MainThreadBridge::cancel() { m_loaderProxy.postTaskToLoader(createCallbackTask(&MainThreadBridge::mainThreadCancel, this)); ThreadableLoaderClientWrapper* clientWrapper = m_workerClientWrapper.get(); if (!clientWrapper->done()) { // If the client hasn't reached a termination state, then transition it by sending a cancellation error. // Note: no more client callbacks will be done after this method -- the clearClientWrapper() call ensures that. ResourceError error(String(), 0, String(), String()); error.setIsCancellation(true); clientWrapper->didFail(error); } clearClientWrapper(); }
void WorkerThreadableLoader::MainThreadBridge::cancel() { m_loaderProxy.postTaskToLoader([this] (ScriptExecutionContext& context) { ASSERT(isMainThread()); ASSERT_UNUSED(context, context.isDocument()); if (!m_mainThreadLoader) return; m_mainThreadLoader->cancel(); m_mainThreadLoader = nullptr; }); ThreadableLoaderClientWrapper* clientWrapper = m_workerClientWrapper.get(); if (!clientWrapper->done()) { // If the client hasn't reached a termination state, then transition it by sending a cancellation error. // Note: no more client callbacks will be done after this method -- the clearClientWrapper() call ensures that. ResourceError error(String(), 0, URL(), String()); error.setIsCancellation(true); clientWrapper->didFail(error); } clearClientWrapper(); }
void WorkerThreadableLoader::MainThreadBridge::cancel() { m_loaderProxy.postTaskToLoader([this] (ScriptExecutionContext& context) { ASSERT(isMainThread()); ASSERT_UNUSED(context, context.isDocument()); if (!m_mainThreadLoader) return; m_mainThreadLoader->cancel(); m_mainThreadLoader = nullptr; }); if (m_workerClientWrapper->done()) { clearClientWrapper(); return; } // Taking a ref of client wrapper as call to didFail may take out the last reference of it. Ref<ThreadableLoaderClientWrapper> protectedWorkerClientWrapper(*m_workerClientWrapper); // If the client hasn't reached a termination state, then transition it by sending a cancellation error. // Note: no more client callbacks will be done after this method -- we clear the client wrapper to ensure that. ResourceError error(ResourceError::Type::Cancellation); protectedWorkerClientWrapper->didFail(error); protectedWorkerClientWrapper->clearClient(); }
void WorkerThreadableWebSocketChannel::Bridge::disconnect() { clearClientWrapper(); terminatePeer(); }