Index: Source/web/WebEmbeddedWorkerImpl.cpp |
diff --git a/Source/web/WebEmbeddedWorkerImpl.cpp b/Source/web/WebEmbeddedWorkerImpl.cpp |
index 04083c122948b97f2e4385a562341954d9692b9e..2859e49573d147c7b90c81bba82fa2928568e6c7 100644 |
--- a/Source/web/WebEmbeddedWorkerImpl.cpp |
+++ b/Source/web/WebEmbeddedWorkerImpl.cpp |
@@ -122,39 +122,7 @@ private: |
RefPtr<ContentSecurityPolicy> m_contentSecurityPolicy; |
}; |
-class WebEmbeddedWorkerImpl::LoaderProxy : public WorkerLoaderProxy { |
-public: |
- static PassOwnPtr<LoaderProxy> create(WebEmbeddedWorkerImpl& embeddedWorker) |
- { |
- return adoptPtr(new LoaderProxy(embeddedWorker)); |
- } |
- |
- virtual void postTaskToLoader(PassOwnPtr<ExecutionContextTask> task) override |
- { |
- toWebLocalFrameImpl(m_embeddedWorker.m_mainFrame)->frame()->document()->postTask(task); |
- } |
- |
- virtual bool postTaskToWorkerGlobalScope(PassOwnPtr<ExecutionContextTask> task) override |
- { |
- if (m_embeddedWorker.m_askedToTerminate || !m_embeddedWorker.m_workerThread) |
- return false; |
- m_embeddedWorker.m_workerThread->postTask(task); |
- return !m_embeddedWorker.m_workerThread->terminated(); |
- } |
- |
-private: |
- explicit LoaderProxy(WebEmbeddedWorkerImpl& embeddedWorker) |
- : m_embeddedWorker(embeddedWorker) |
- { |
- } |
- |
- // Not owned, embedded worker owns this. |
- WebEmbeddedWorkerImpl& m_embeddedWorker; |
-}; |
- |
-WebEmbeddedWorker* WebEmbeddedWorker::create( |
- WebServiceWorkerContextClient* client, |
- WebWorkerPermissionClientProxy* permissionClient) |
+WebEmbeddedWorker* WebEmbeddedWorker::create(WebServiceWorkerContextClient* client, WebWorkerPermissionClientProxy* permissionClient) |
{ |
return new WebEmbeddedWorkerImpl(adoptPtr(client), adoptPtr(permissionClient)); |
} |
@@ -165,9 +133,7 @@ static HashSet<WebEmbeddedWorkerImpl*>& runningWorkerInstances() |
return set; |
} |
-WebEmbeddedWorkerImpl::WebEmbeddedWorkerImpl( |
- PassOwnPtr<WebServiceWorkerContextClient> client, |
- PassOwnPtr<WebWorkerPermissionClientProxy> permissionClient) |
+WebEmbeddedWorkerImpl::WebEmbeddedWorkerImpl(PassOwnPtr<WebServiceWorkerContextClient> client, PassOwnPtr<WebWorkerPermissionClientProxy> permissionClient) |
: m_workerContextClient(client) |
, m_permissionClient(permissionClient) |
, m_workerInspectorProxy(WorkerInspectorProxy::create()) |
@@ -197,6 +163,8 @@ WebEmbeddedWorkerImpl::~WebEmbeddedWorkerImpl() |
m_webView->close(); |
m_mainFrame->close(); |
+ if (m_loaderProxy) |
+ m_loaderProxy->detachProvider(this); |
} |
void WebEmbeddedWorkerImpl::terminateAll() |
@@ -294,6 +262,20 @@ void WebEmbeddedWorkerImpl::postMessageToPageInspector(const String& message) |
pageInspector->dispatchMessageFromWorker(message); |
} |
+void WebEmbeddedWorkerImpl::postTaskToLoader(PassOwnPtr<ExecutionContextTask> task) |
+{ |
+ toWebLocalFrameImpl(m_mainFrame)->frame()->document()->postTask(task); |
+} |
+ |
+bool WebEmbeddedWorkerImpl::postTaskToWorkerGlobalScope(PassOwnPtr<ExecutionContextTask> task) |
+{ |
+ if (m_askedToTerminate || !m_workerThread) |
+ return false; |
+ |
+ m_workerThread->postTask(task); |
+ return !m_workerThread->terminated(); |
+} |
+ |
void WebEmbeddedWorkerImpl::prepareShadowPageForLoader() |
{ |
// Create 'shadow page', which is never displayed and is used mainly to |
@@ -441,8 +423,8 @@ void WebEmbeddedWorkerImpl::startWorkerThread() |
m_mainScriptLoader.clear(); |
m_workerGlobalScopeProxy = ServiceWorkerGlobalScopeProxy::create(*this, *document, *m_workerContextClient); |
- m_loaderProxy = LoaderProxy::create(*this); |
- m_workerThread = ServiceWorkerThread::create(*m_loaderProxy, *m_workerGlobalScopeProxy, startupData.release()); |
+ m_loaderProxy = WorkerLoaderProxy::create(this); |
+ m_workerThread = ServiceWorkerThread::create(m_loaderProxy, *m_workerGlobalScopeProxy, startupData.release()); |
m_workerThread->start(); |
m_workerInspectorProxy->workerThreadCreated(document, m_workerThread.get(), scriptURL); |
} |