Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2387)

Unified Diff: Source/web/WebEmbeddedWorkerImpl.cpp

Issue 91173002: Actually start ServiceWorkerThread in EmbeddedWorker (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebase Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/web/WebEmbeddedWorkerImpl.h ('k') | Source/web/web.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/web/WebEmbeddedWorkerImpl.cpp
diff --git a/Source/web/WebEmbeddedWorkerImpl.cpp b/Source/web/WebEmbeddedWorkerImpl.cpp
index bbdea4eebd7a85f6ef92e289b2127efb71d83680..998955367dc26d81532381dbe716c8fd06a52617 100644
--- a/Source/web/WebEmbeddedWorkerImpl.cpp
+++ b/Source/web/WebEmbeddedWorkerImpl.cpp
@@ -31,6 +31,7 @@
#include "config.h"
#include "WebEmbeddedWorkerImpl.h"
+#include "ServiceWorkerGlobalScopeProxy.h"
#include "WebDataSourceImpl.h"
#include "WebFrameImpl.h"
#include "WebServiceWorkerContextClient.h"
@@ -41,9 +42,11 @@
#include "core/loader/FrameLoadRequest.h"
#include "core/loader/SubstituteData.h"
#include "core/workers/WorkerClients.h"
+#include "core/workers/WorkerLoaderProxy.h"
#include "core/workers/WorkerScriptLoader.h"
#include "core/workers/WorkerScriptLoaderClient.h"
#include "core/workers/WorkerThreadStartupData.h"
+#include "modules/serviceworkers/ServiceWorkerThread.h"
#include "platform/NotImplemented.h"
#include "platform/SharedBuffer.h"
#include "wtf/Functional.h"
@@ -76,6 +79,7 @@ public:
}
bool failed() const { return m_scriptLoader->failed(); }
+ const KURL& url() const { return m_scriptLoader->responseURL(); }
String script() const { return m_scriptLoader->script(); }
private:
@@ -92,6 +96,35 @@ private:
Closure m_callback;
};
+class WebEmbeddedWorkerImpl::LoaderProxy : public WorkerLoaderProxy {
+public:
+ static PassOwnPtr<LoaderProxy> create(WebEmbeddedWorkerImpl& embeddedWorker)
+ {
+ return adoptPtr(new LoaderProxy(embeddedWorker));
+ }
+
+ virtual void postTaskToLoader(PassOwnPtr<ExecutionContextTask> task) OVERRIDE
+ {
+ m_embeddedWorker.m_loadingContext->postTask(task);
+ }
+
+ virtual bool postTaskForModeToWorkerGlobalScope(PassOwnPtr<ExecutionContextTask> task, const String& mode) OVERRIDE
+ {
+ if (m_embeddedWorker.m_askedToTerminate || !m_embeddedWorker.m_workerThread)
+ return false;
+ return m_embeddedWorker.m_workerThread->runLoop().postTaskForMode(task, mode);
+ }
+
+private:
+ explicit LoaderProxy(WebEmbeddedWorkerImpl& embeddedWorker)
+ : m_embeddedWorker(embeddedWorker)
+ {
+ }
+
+ // Not owned, embedded worker owns this.
+ WebEmbeddedWorkerImpl& m_embeddedWorker;
+};
+
WebEmbeddedWorker* WebEmbeddedWorker::create(
WebServiceWorkerContextClient* client,
WebWorkerPermissionClientProxy* permissionClient)
@@ -188,12 +221,31 @@ void WebEmbeddedWorkerImpl::onScriptLoaderFinished()
return;
}
- // FIXME: Create WorkerReportingProxy, set up WorkerThreadStartupData,
- // create ServiceWorkerThread and start it with m_scripLoader->script().
+ WorkerThreadStartMode startMode =
+ (m_workerStartData.startMode == WebEmbeddedWorkerStartModePauseOnStart)
+ ? PauseWorkerGlobalScopeOnStart : DontPauseWorkerGlobalScopeOnStart;
+
+ OwnPtr<WorkerClients> workerClients = WorkerClients::create();
+ providePermissionClientToWorker(workerClients.get(), m_permissionClient.release());
+
+ OwnPtr<WorkerThreadStartupData> startupData =
+ WorkerThreadStartupData::create(
+ m_mainScriptLoader->url(),
+ m_workerStartData.userAgent,
+ m_mainScriptLoader->script(),
+ startMode,
+ // FIXME: fill appropriate CSP info and policy type.
+ String(),
+ ContentSecurityPolicy::Enforce,
+ workerClients.release());
m_mainScriptLoader.clear();
- notImplemented();
+ m_workerGlobalScopeProxy = ServiceWorkerGlobalScopeProxy::create(*this, *m_loadingContext, m_workerContextClient.release());
+ m_loaderProxy = LoaderProxy::create(*this);
+
+ m_workerThread = ServiceWorkerThread::create(*m_loaderProxy, *m_workerGlobalScopeProxy, startupData.release());
+ m_workerThread->start();
}
} // namespace blink
« no previous file with comments | « Source/web/WebEmbeddedWorkerImpl.h ('k') | Source/web/web.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698