void expectWorkerLifetimeReportingCalls() { EXPECT_CALL(*m_mockWorkerReportingProxy, workerGlobalScopeStarted(_)).Times(1); EXPECT_CALL(*m_mockWorkerReportingProxy, didEvaluateWorkerScript(true)).Times(1); EXPECT_CALL(*m_mockWorkerReportingProxy, workerThreadTerminated()).Times(1); EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope()).Times(1); }
void ThreadedMessagingProxyBase::parentObjectDestroyedInternal() { DCHECK(isParentContextThread()); m_mayBeDestroyed = true; if (m_workerThread) terminateGlobalScope(); else workerThreadTerminated(); }
void WorkerMessagingProxy::workerObjectDestroyedInternal() { m_mayBeDestroyed = true; if (m_workerThread) terminateWorkerGlobalScope(); else workerThreadTerminated(); }
TEST_F(WorkerThreadTest, StartAndStopImmediately) { EXPECT_CALL(*m_mockWorkerReportingProxy, workerGlobalScopeStarted(_)) .Times(AtMost(1)); EXPECT_CALL(*m_mockWorkerReportingProxy, didEvaluateWorkerScript(_)) .Times(AtMost(1)); EXPECT_CALL(*m_mockWorkerReportingProxy, workerThreadTerminated()) .Times(AtMost(1)); EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope()) .Times(AtMost(1)); start(); m_workerThread->terminateAndWait(); }
TEST_F(WorkerThreadTest, StartAndStopOnScriptLoaded) { // Use a JavaScript source code that makes an infinite loop so that we can // catch some kind of issues as a timeout. const String source("while(true) {}"); EXPECT_CALL(*m_mockWorkerReportingProxy, workerGlobalScopeStarted(_)) .Times(AtMost(1)); EXPECT_CALL(*m_mockWorkerReportingProxy, didEvaluateWorkerScript(_)) .Times(AtMost(1)); EXPECT_CALL(*m_mockWorkerReportingProxy, workerThreadTerminated()) .Times(AtMost(1)); EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope()) .Times(AtMost(1)); startWithSourceCode(source); m_workerThread->waitUntilScriptLoaded(); m_workerThread->terminateAndWait(); }