Commit ce453d62 authored by nhiroki's avatar nhiroki Committed by Commit bot

Worker: Clarify a target context of postTask in WorkerEventQueue

BUG=673711

Review-Url: https://codereview.chromium.org/2580743002
Cr-Commit-Position: refs/heads/master@{#438805}
parent 6a3ac63e
...@@ -26,26 +26,28 @@ ...@@ -26,26 +26,28 @@
#include "core/workers/WorkerEventQueue.h" #include "core/workers/WorkerEventQueue.h"
#include "core/dom/ExecutionContext.h"
#include "core/dom/ExecutionContextTask.h" #include "core/dom/ExecutionContextTask.h"
#include "core/dom/TaskRunnerHelper.h"
#include "core/events/Event.h" #include "core/events/Event.h"
#include "core/inspector/InspectorInstrumentation.h" #include "core/inspector/InspectorInstrumentation.h"
#include "core/workers/WorkerGlobalScope.h"
namespace blink { namespace blink {
WorkerEventQueue* WorkerEventQueue::create(ExecutionContext* context) { WorkerEventQueue* WorkerEventQueue::create(
return new WorkerEventQueue(context); WorkerGlobalScope* workerGlobalScope) {
return new WorkerEventQueue(workerGlobalScope);
} }
WorkerEventQueue::WorkerEventQueue(ExecutionContext* context) WorkerEventQueue::WorkerEventQueue(WorkerGlobalScope* workerGlobalScope)
: m_executionContext(context), m_isClosed(false) {} : m_workerGlobalScope(workerGlobalScope), m_isClosed(false) {}
WorkerEventQueue::~WorkerEventQueue() { WorkerEventQueue::~WorkerEventQueue() {
DCHECK(m_pendingEvents.isEmpty()); DCHECK(m_pendingEvents.isEmpty());
} }
DEFINE_TRACE(WorkerEventQueue) { DEFINE_TRACE(WorkerEventQueue) {
visitor->trace(m_executionContext); visitor->trace(m_workerGlobalScope);
visitor->trace(m_pendingEvents); visitor->trace(m_pendingEvents);
EventQueue::trace(visitor); EventQueue::trace(visitor);
} }
...@@ -56,7 +58,7 @@ bool WorkerEventQueue::enqueueEvent(Event* event) { ...@@ -56,7 +58,7 @@ bool WorkerEventQueue::enqueueEvent(Event* event) {
InspectorInstrumentation::asyncTaskScheduled( InspectorInstrumentation::asyncTaskScheduled(
event->target()->getExecutionContext(), event->type(), event); event->target()->getExecutionContext(), event->type(), event);
m_pendingEvents.add(event); m_pendingEvents.add(event);
m_executionContext->postTask( m_workerGlobalScope->postTask(
BLINK_FROM_HERE, BLINK_FROM_HERE,
createSameThreadTask(&WorkerEventQueue::dispatchEvent, createSameThreadTask(&WorkerEventQueue::dispatchEvent,
wrapPersistent(this), wrapWeakPersistent(event))); wrapPersistent(this), wrapWeakPersistent(event)));
...@@ -87,12 +89,11 @@ bool WorkerEventQueue::removeEvent(Event* event) { ...@@ -87,12 +89,11 @@ bool WorkerEventQueue::removeEvent(Event* event) {
return true; return true;
} }
void WorkerEventQueue::dispatchEvent(Event* event, void WorkerEventQueue::dispatchEvent(Event* event) {
ExecutionContext* executionContext) {
if (!event || !removeEvent(event)) if (!event || !removeEvent(event))
return; return;
InspectorInstrumentation::AsyncTask asyncTask(executionContext, event); InspectorInstrumentation::AsyncTask asyncTask(m_workerGlobalScope, event);
event->target()->dispatchEvent(event); event->target()->dispatchEvent(event);
} }
......
...@@ -33,11 +33,11 @@ ...@@ -33,11 +33,11 @@
namespace blink { namespace blink {
class Event; class Event;
class ExecutionContext; class WorkerGlobalScope;
class WorkerEventQueue final : public EventQueue { class WorkerEventQueue final : public EventQueue {
public: public:
static WorkerEventQueue* create(ExecutionContext*); static WorkerEventQueue* create(WorkerGlobalScope*);
~WorkerEventQueue() override; ~WorkerEventQueue() override;
DECLARE_TRACE(); DECLARE_TRACE();
...@@ -47,11 +47,11 @@ class WorkerEventQueue final : public EventQueue { ...@@ -47,11 +47,11 @@ class WorkerEventQueue final : public EventQueue {
void close() override; void close() override;
private: private:
explicit WorkerEventQueue(ExecutionContext*); explicit WorkerEventQueue(WorkerGlobalScope*);
bool removeEvent(Event*); bool removeEvent(Event*);
void dispatchEvent(Event*, ExecutionContext*); void dispatchEvent(Event*);
Member<ExecutionContext> m_executionContext; Member<WorkerGlobalScope> m_workerGlobalScope;
bool m_isClosed; bool m_isClosed;
HeapHashSet<Member<Event>> m_pendingEvents; HeapHashSet<Member<Event>> m_pendingEvents;
......
...@@ -124,10 +124,14 @@ class CORE_EXPORT WorkerGlobalScope : public EventTargetWithInlineData, ...@@ -124,10 +124,14 @@ class CORE_EXPORT WorkerGlobalScope : public EventTargetWithInlineData,
bool isContextThread() const final; bool isContextThread() const final;
void disableEval(const String& errorMessage) final; void disableEval(const String& errorMessage) final;
String userAgent() const final { return m_userAgent; } String userAgent() const final { return m_userAgent; }
// This is necessary to make parent's postTask visible.
using ExecutionContext::postTask;
void postTask(TaskType, void postTask(TaskType,
const WebTraceLocation&, const WebTraceLocation&,
std::unique_ptr<ExecutionContextTask>, std::unique_ptr<ExecutionContextTask>,
const String& taskNameForInstrumentation) final; const String& taskNameForInstrumentation) final;
DOMTimerCoordinator* timers() final { return &m_timers; } DOMTimerCoordinator* timers() final { return &m_timers; }
SecurityContext& securityContext() final { return *this; } SecurityContext& securityContext() final { return *this; }
void addConsoleMessage(ConsoleMessage*) final; void addConsoleMessage(ConsoleMessage*) final;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment