| Index: third_party/WebKit/WebCore/dom/WorkerContext.cpp
|
| ===================================================================
|
| --- third_party/WebKit/WebCore/dom/WorkerContext.cpp (revision 9118)
|
| +++ third_party/WebKit/WebCore/dom/WorkerContext.cpp (working copy)
|
| @@ -31,6 +31,7 @@
|
| #include "WorkerContext.h"
|
|
|
| #include "ActiveDOMObject.h"
|
| +#include "DOMTimer.h"
|
| #include "DOMWindow.h"
|
| #include "Event.h"
|
| #include "EventException.h"
|
| @@ -40,7 +41,6 @@
|
| #include "WorkerLocation.h"
|
| #include "WorkerMessagingProxy.h"
|
| #include "WorkerNavigator.h"
|
| -#include "WorkerTask.h"
|
| #include "WorkerThread.h"
|
| #include <wtf/RefPtr.h>
|
|
|
| @@ -111,18 +111,16 @@
|
| m_thread->messagingProxy()->postWorkerException(errorMessage, lineNumber, sourceURL);
|
| }
|
|
|
| -static void addMessageTask(ScriptExecutionContext* context, MessageDestination destination, MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceURL)
|
| +static void addMessageTask(ScriptExecutionContext* context, WorkerMessagingProxy* messagingProxy, MessageDestination destination, MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceURL)
|
| {
|
| + if (messagingProxy->askedToTerminate())
|
| + return;
|
| context->addMessage(destination, source, level, message, lineNumber, sourceURL);
|
| }
|
|
|
| void WorkerContext::addMessage(MessageDestination destination, MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceURL)
|
| {
|
| - // createCallbackTask has to be a separate statement from postTaskToParentContext to make the destructor
|
| - // for message.copy() get called before postTaskToParentContext. (If they are one statement, the destructor
|
| - // gets called after postTaskToParentContext which causes a race condition.)
|
| - RefPtr<Task> task = createCallbackTask(m_thread->messagingProxy(), &addMessageTask, destination, source, level, message.copy(), lineNumber, sourceURL.copy());
|
| - postTaskToParentContext(task.release());
|
| + postTaskToWorkerObject(createCallbackTask(&addMessageTask, m_thread->messagingProxy(), destination, source, level, message, lineNumber, sourceURL));
|
| }
|
|
|
| void WorkerContext::resourceRetrievedByXMLHttpRequest(unsigned long, const ScriptString&)
|
| @@ -187,35 +185,24 @@
|
| return !event->defaultPrevented();
|
| }
|
|
|
| -class ScriptExecutionContextTaskWorkerTask : public WorkerTask {
|
| -public:
|
| - static PassRefPtr<ScriptExecutionContextTaskWorkerTask> create(PassRefPtr<ScriptExecutionContext::Task> task)
|
| - {
|
| - return adoptRef(new ScriptExecutionContextTaskWorkerTask(task));
|
| - }
|
| +void WorkerContext::postTask(PassRefPtr<Task> task)
|
| +{
|
| + thread()->runLoop().postTask(task);
|
| +}
|
|
|
| -private:
|
| - ScriptExecutionContextTaskWorkerTask(PassRefPtr<ScriptExecutionContext::Task> task)
|
| - : m_task(task)
|
| - {
|
| - }
|
| +void WorkerContext::postTaskToWorkerObject(PassRefPtr<Task> task)
|
| +{
|
| + thread()->messagingProxy()->postTaskToWorkerObject(task);
|
| +}
|
|
|
| - virtual void performTask(WorkerContext* context)
|
| - {
|
| - m_task->performTask(context);
|
| - }
|
| -
|
| - RefPtr<ScriptExecutionContext::Task> m_task;
|
| -};
|
| -
|
| -void WorkerContext::postTask(PassRefPtr<Task> task)
|
| +int WorkerContext::installTimeout(ScheduledAction* action, int timeout, bool singleShot)
|
| {
|
| - thread()->runLoop().postTask(ScriptExecutionContextTaskWorkerTask::create(task));
|
| + return DOMTimer::install(scriptExecutionContext(), action, timeout, singleShot);
|
| }
|
|
|
| -void WorkerContext::postTaskToParentContext(PassRefPtr<Task> task)
|
| +void WorkerContext::removeTimeout(int timeoutId)
|
| {
|
| - thread()->messagingProxy()->postTaskToParentContext(task);
|
| + DOMTimer::removeById(scriptExecutionContext(), timeoutId);
|
| }
|
|
|
| } // namespace WebCore
|
|
|