summaryrefslogtreecommitdiff
path: root/Source/WebCore/workers/WorkerEventQueue.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/workers/WorkerEventQueue.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/workers/WorkerEventQueue.cpp')
-rw-r--r--Source/WebCore/workers/WorkerEventQueue.cpp72
1 files changed, 30 insertions, 42 deletions
diff --git a/Source/WebCore/workers/WorkerEventQueue.cpp b/Source/WebCore/workers/WorkerEventQueue.cpp
index fd3b865be..f43bd2a7a 100644
--- a/Source/WebCore/workers/WorkerEventQueue.cpp
+++ b/Source/WebCore/workers/WorkerEventQueue.cpp
@@ -10,10 +10,10 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
@@ -21,23 +21,19 @@
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
*/
#include "config.h"
#include "WorkerEventQueue.h"
-#include "DOMWindow.h"
-#include "Document.h"
#include "Event.h"
-#include "EventNames.h"
+#include "EventTarget.h"
#include "ScriptExecutionContext.h"
namespace WebCore {
WorkerEventQueue::WorkerEventQueue(ScriptExecutionContext& context)
: m_scriptExecutionContext(context)
- , m_isClosed(false)
{
}
@@ -46,66 +42,60 @@ WorkerEventQueue::~WorkerEventQueue()
close();
}
-class WorkerEventQueue::EventDispatcherTask final : public ScriptExecutionContext::Task {
+class WorkerEventQueue::EventDispatcher
+{
public:
- static PassOwnPtr<EventDispatcherTask> create(PassRefPtr<Event> event, WorkerEventQueue& eventQueue)
+ EventDispatcher(RefPtr<Event>&& event, WorkerEventQueue& eventQueue)
+ : m_event(WTFMove(event))
+ , m_eventQueue(eventQueue)
{
- return adoptPtr(new EventDispatcherTask(event, eventQueue));
}
- virtual ~EventDispatcherTask()
+ ~EventDispatcher()
{
if (m_event)
- m_eventQueue.m_eventTaskMap.remove(m_event.get());
+ m_eventQueue.m_eventDispatcherMap.remove(m_event.get());
}
- void dispatchEvent(ScriptExecutionContext*, PassRefPtr<Event> event)
- {
- event->target()->dispatchEvent(event);
- }
-
- virtual void performTask(ScriptExecutionContext* context) override
+ void dispatch()
{
if (m_isCancelled)
return;
- m_eventQueue.m_eventTaskMap.remove(m_event.get());
- dispatchEvent(context, m_event);
- m_event.clear();
+ m_eventQueue.m_eventDispatcherMap.remove(m_event.get());
+ m_event->target()->dispatchEvent(*m_event);
+ m_event = nullptr;
}
void cancel()
{
m_isCancelled = true;
- m_event.clear();
+ m_event = nullptr;
}
private:
- EventDispatcherTask(PassRefPtr<Event> event, WorkerEventQueue& eventQueue)
- : m_event(event)
- , m_eventQueue(eventQueue)
- , m_isCancelled(false)
- {
- }
-
RefPtr<Event> m_event;
WorkerEventQueue& m_eventQueue;
- bool m_isCancelled;
+ bool m_isCancelled { false };
};
-bool WorkerEventQueue::enqueueEvent(PassRefPtr<Event> prpEvent)
+bool WorkerEventQueue::enqueueEvent(Ref<Event>&& event)
{
if (m_isClosed)
return false;
- RefPtr<Event> event = prpEvent;
- OwnPtr<EventDispatcherTask> task = EventDispatcherTask::create(event, *this);
- m_eventTaskMap.add(event.release(), task.get());
- m_scriptExecutionContext.postTask(task.release());
+
+ auto* eventPtr = event.ptr();
+ auto eventDispatcher = std::make_unique<EventDispatcher>(WTFMove(event), *this);
+ m_eventDispatcherMap.add(eventPtr, eventDispatcher.get());
+ m_scriptExecutionContext.postTask([eventDispatcher = WTFMove(eventDispatcher)] (ScriptExecutionContext&) {
+ eventDispatcher->dispatch();
+ });
+
return true;
}
bool WorkerEventQueue::cancelEvent(Event& event)
{
- EventDispatcherTask* task = m_eventTaskMap.take(&event);
+ EventDispatcher* task = m_eventDispatcherMap.take(&event);
if (!task)
return false;
task->cancel();
@@ -115,11 +105,9 @@ bool WorkerEventQueue::cancelEvent(Event& event)
void WorkerEventQueue::close()
{
m_isClosed = true;
- for (EventTaskMap::iterator it = m_eventTaskMap.begin(); it != m_eventTaskMap.end(); ++it) {
- EventDispatcherTask* task = it->value;
- task->cancel();
- }
- m_eventTaskMap.clear();
+ for (auto& dispatcher : m_eventDispatcherMap.values())
+ dispatcher->cancel();
+ m_eventDispatcherMap.clear();
}
-}
+} // namespace WebCore