#include "config.h"
#include "WebEmbeddedWorkerImpl.h"
+#include "ServiceWorkerGlobalScopeClientImpl.h"
#include "ServiceWorkerGlobalScopeProxy.h"
#include "WebDataSourceImpl.h"
#include "WebFrameImpl.h"
toWebFrameImpl(m_embeddedWorker.m_mainFrame)->frame()->document()->postTask(task);
}
- virtual bool postTaskForModeToWorkerGlobalScope(PassOwnPtr<ExecutionContextTask> task, const String& mode) OVERRIDE
+ virtual bool postTaskToWorkerGlobalScope(PassOwnPtr<ExecutionContextTask> task) OVERRIDE
{
if (m_embeddedWorker.m_askedToTerminate || !m_embeddedWorker.m_workerThread)
return false;
- return m_embeddedWorker.m_workerThread->runLoop().postTaskForMode(task, mode);
+ return m_embeddedWorker.m_workerThread->runLoop().postTask(task);
}
private:
ASSERT(m_mainScriptLoader);
if (m_mainScriptLoader->failed() || m_askedToTerminate) {
- m_workerContextClient->workerContextFailedToStart();
m_mainScriptLoader.clear();
+ // This may delete 'this'.
+ m_workerContextClient->workerContextFailedToStart();
return;
}
(m_workerStartData.startMode == WebEmbeddedWorkerStartModePauseOnStart)
? PauseWorkerGlobalScopeOnStart : DontPauseWorkerGlobalScopeOnStart;
+ // This is to be owned by ServiceWorker's WorkerGlobalScope, and is
+ // guaranteed to be around while the WorkerGlobalScope is alive.
+ WebServiceWorkerContextClient* contextClient = m_workerContextClient.get();
+
OwnPtr<WorkerClients> workerClients = WorkerClients::create();
providePermissionClientToWorker(workerClients.get(), m_permissionClient.release());
+ provideServiceWorkerGlobalScopeClientToWorker(workerClients.get(), ServiceWorkerGlobalScopeClientImpl::create(m_workerContextClient.release()));
OwnPtr<WorkerThreadStartupData> startupData =
WorkerThreadStartupData::create(
m_mainScriptLoader.clear();
- m_workerGlobalScopeProxy = ServiceWorkerGlobalScopeProxy::create(*this, *toWebFrameImpl(m_mainFrame)->frame()->document(), m_workerContextClient.release());
+ m_workerGlobalScopeProxy = ServiceWorkerGlobalScopeProxy::create(*this, *toWebFrameImpl(m_mainFrame)->frame()->document(), *contextClient);
m_loaderProxy = LoaderProxy::create(*this);
m_workerThread = ServiceWorkerThread::create(*m_loaderProxy, *m_workerGlobalScopeProxy, startupData.release());