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();
}