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

Unified Diff: third_party/WebKit/Source/core/workers/WorkerEventQueue.cpp

Issue 2209613002: Remove WorkerEventQueue::EventDispatcherTask (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: -extra LF, -PtrUtil.h Created 4 years, 4 months 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 | « third_party/WebKit/Source/core/workers/WorkerEventQueue.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/workers/WorkerEventQueue.cpp
diff --git a/third_party/WebKit/Source/core/workers/WorkerEventQueue.cpp b/third_party/WebKit/Source/core/workers/WorkerEventQueue.cpp
index 0439a3da8f8fcef4204f908dba6beb191a900759..94e74bcd192020440692a57f4f8c735930a8daf0 100644
--- a/third_party/WebKit/Source/core/workers/WorkerEventQueue.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerEventQueue.cpp
@@ -30,7 +30,6 @@
#include "core/dom/ExecutionContextTask.h"
#include "core/events/Event.h"
#include "core/inspector/InspectorInstrumentation.h"
-#include "wtf/PtrUtil.h"
namespace blink {
@@ -47,98 +46,58 @@ WorkerEventQueue::WorkerEventQueue(ExecutionContext* context)
WorkerEventQueue::~WorkerEventQueue()
{
- DCHECK(m_eventTaskMap.isEmpty());
+ DCHECK(m_pendingEvents.isEmpty());
}
DEFINE_TRACE(WorkerEventQueue)
{
visitor->trace(m_executionContext);
- visitor->trace(m_eventTaskMap);
+ visitor->trace(m_pendingEvents);
EventQueue::trace(visitor);
}
-class WorkerEventQueue::EventDispatcherTask : public ExecutionContextTask {
-public:
- static std::unique_ptr<EventDispatcherTask> create(Event* event, WorkerEventQueue* eventQueue)
- {
- return wrapUnique(new EventDispatcherTask(event, eventQueue));
- }
-
- ~EventDispatcherTask() override
- {
- if (m_event) {
- InspectorInstrumentation::asyncTaskCanceled(m_event->target()->getExecutionContext(), m_event);
- m_eventQueue->m_eventTaskMap.remove(m_event);
- }
- }
-
- void dispatchEvent(ExecutionContext* context, Event* event)
- {
- InspectorInstrumentation::AsyncTask asyncTask(context, event);
- event->target()->dispatchEvent(event);
- }
-
- virtual void performTask(ExecutionContext* context)
- {
- if (m_isCancelled)
- return;
-
- m_eventQueue->m_eventTaskMap.remove(m_event.get());
- dispatchEvent(context, m_event);
- m_event.clear();
- }
-
- void cancel()
- {
- m_isCancelled = true;
- m_event.clear();
- }
-
-private:
- EventDispatcherTask(Event* event, WorkerEventQueue* eventQueue)
- : m_event(event)
- , m_eventQueue(eventQueue)
- , m_isCancelled(false)
- {
- }
-
- Persistent<Event> m_event;
- Persistent<WorkerEventQueue> m_eventQueue;
- bool m_isCancelled;
-};
-
bool WorkerEventQueue::enqueueEvent(Event* event)
{
if (m_isClosed)
return false;
InspectorInstrumentation::asyncTaskScheduled(event->target()->getExecutionContext(), event->type(), event);
- std::unique_ptr<EventDispatcherTask> task = EventDispatcherTask::create(event, this);
- m_eventTaskMap.add(event, task.get());
- m_executionContext->postTask(BLINK_FROM_HERE, std::move(task));
+ m_pendingEvents.add(event);
+ m_executionContext->postTask(BLINK_FROM_HERE, createSameThreadTask(&WorkerEventQueue::dispatchEvent, wrapPersistent(this), wrapWeakPersistent(event)));
return true;
}
bool WorkerEventQueue::cancelEvent(Event* event)
{
- EventDispatcherTask* task = m_eventTaskMap.get(event);
- if (!task)
+ if (!removeEvent(event))
return false;
- task->cancel();
InspectorInstrumentation::asyncTaskCanceled(event->target()->getExecutionContext(), event);
- m_eventTaskMap.remove(event);
return true;
}
void WorkerEventQueue::close()
{
m_isClosed = true;
- for (const auto& entry : m_eventTaskMap) {
- Event* event = entry.key.get();
- EventDispatcherTask* task = entry.value;
+ for (const auto& event : m_pendingEvents)
InspectorInstrumentation::asyncTaskCanceled(event->target()->getExecutionContext(), event);
- task->cancel();
- }
- m_eventTaskMap.clear();
+ m_pendingEvents.clear();
+}
+
+bool WorkerEventQueue::removeEvent(Event* event)
+{
+ auto found = m_pendingEvents.find(event);
+ if (found == m_pendingEvents.end())
+ return false;
+ m_pendingEvents.remove(found);
+ return true;
+}
+
+void WorkerEventQueue::dispatchEvent(Event* event, ExecutionContext* executionContext)
+{
+ if (!event || !removeEvent(event))
+ return;
+
+ InspectorInstrumentation::AsyncTask asyncTask(executionContext, event);
+ event->target()->dispatchEvent(event);
}
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/workers/WorkerEventQueue.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698