| Index: third_party/WebKit/WebCore/dom/WorkerMessagingProxy.cpp
|
| ===================================================================
|
| --- third_party/WebKit/WebCore/dom/WorkerMessagingProxy.cpp (revision 9118)
|
| +++ third_party/WebKit/WebCore/dom/WorkerMessagingProxy.cpp (working copy)
|
| @@ -33,14 +33,14 @@
|
| #include "DOMWindow.h"
|
| #include "Document.h"
|
| #include "MessageEvent.h"
|
| +#include "ScriptExecutionContext.h"
|
| #include "Worker.h"
|
| #include "WorkerContext.h"
|
| -#include "WorkerTask.h"
|
| #include "WorkerThread.h"
|
|
|
| namespace WebCore {
|
|
|
| -class MessageWorkerContextTask : public WorkerTask {
|
| +class MessageWorkerContextTask : public ScriptExecutionContext::Task {
|
| public:
|
| static PassRefPtr<MessageWorkerContextTask> create(const String& message)
|
| {
|
| @@ -53,8 +53,11 @@
|
| {
|
| }
|
|
|
| - virtual void performTask(WorkerContext* context)
|
| + virtual void performTask(ScriptExecutionContext* scriptContext)
|
| {
|
| + ASSERT(scriptContext->isWorkerContext());
|
| + WorkerContext* context = static_cast<WorkerContext*>(scriptContext);
|
| +
|
| RefPtr<Event> evt = MessageEvent::create(m_message, "", "", 0, 0);
|
|
|
| if (context->onmessage()) {
|
| @@ -213,17 +216,22 @@
|
|
|
| void WorkerMessagingProxy::postMessageToWorkerContext(const String& message)
|
| {
|
| + postTaskToWorkerContext(MessageWorkerContextTask::create(message));
|
| +}
|
| +
|
| +void WorkerMessagingProxy::postTaskToWorkerContext(PassRefPtr<ScriptExecutionContext::Task> task)
|
| +{
|
| if (m_askedToTerminate)
|
| return;
|
|
|
| if (m_workerThread) {
|
| ++m_unconfirmedMessageCount;
|
| - m_workerThread->runLoop().postTask(MessageWorkerContextTask::create(message));
|
| + m_workerThread->runLoop().postTask(task);
|
| } else
|
| - m_queuedEarlyTasks.append(MessageWorkerContextTask::create(message));
|
| + m_queuedEarlyTasks.append(task);
|
| }
|
|
|
| -void WorkerMessagingProxy::postTaskToParentContext(PassRefPtr<ScriptExecutionContext::Task> task)
|
| +void WorkerMessagingProxy::postTaskToWorkerObject(PassRefPtr<ScriptExecutionContext::Task> task)
|
| {
|
| m_scriptExecutionContext->postTask(task);
|
| }
|
| @@ -257,7 +265,7 @@
|
| if (m_workerThread)
|
| terminate();
|
| else
|
| - workerContextDestroyedInternal(); // It never existed, just do our cleanup.
|
| + workerContextDestroyedInternal();
|
| }
|
|
|
| void WorkerMessagingProxy::workerContextDestroyed()
|
| @@ -270,6 +278,7 @@
|
| {
|
| // WorkerContextDestroyedTask is always the last to be performed, so the proxy is not needed for communication
|
| // in either side any more. However, the Worker object may still exist, and it assumes that the proxy exists, too.
|
| + m_workerThread = 0;
|
| if (!m_workerObject)
|
| delete this;
|
| }
|
|
|