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

Unified Diff: Source/core/events/DocumentEventQueue.cpp

Issue 26558004: Revert 158219 "Move dom/*Event* to events to match the DOM vs. E..." (Closed) Base URL: svn://svn.chromium.org/blink/branches/chromium/1651/
Patch Set: Created 7 years, 2 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 | « Source/core/events/DocumentEventQueue.h ('k') | Source/core/events/ErrorEvent.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/events/DocumentEventQueue.cpp
===================================================================
--- Source/core/events/DocumentEventQueue.cpp (revision 159156)
+++ Source/core/events/DocumentEventQueue.cpp (working copy)
@@ -1,147 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * 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
- * 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
- * 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
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * 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 "core/events/DocumentEventQueue.h"
-
-#include "core/dom/Document.h"
-#include "core/events/Event.h"
-#include "core/events/EventNames.h"
-#include "core/page/DOMWindow.h"
-#include "core/page/SuspendableTimer.h"
-
-namespace WebCore {
-
-class DocumentEventQueueTimer : public SuspendableTimer {
- WTF_MAKE_NONCOPYABLE(DocumentEventQueueTimer);
-public:
- DocumentEventQueueTimer(DocumentEventQueue* eventQueue, ScriptExecutionContext* context)
- : SuspendableTimer(context)
- , m_eventQueue(eventQueue) { }
-
-private:
- virtual void fired() { m_eventQueue->pendingEventTimerFired(); }
- DocumentEventQueue* m_eventQueue;
-};
-
-PassRefPtr<DocumentEventQueue> DocumentEventQueue::create(ScriptExecutionContext* context)
-{
- return adoptRef(new DocumentEventQueue(context));
-}
-
-DocumentEventQueue::DocumentEventQueue(ScriptExecutionContext* context)
- : m_pendingEventTimer(adoptPtr(new DocumentEventQueueTimer(this, context)))
- , m_isClosed(false)
-{
- m_pendingEventTimer->suspendIfNeeded();
-}
-
-DocumentEventQueue::~DocumentEventQueue()
-{
-}
-
-bool DocumentEventQueue::enqueueEvent(PassRefPtr<Event> event)
-{
- if (m_isClosed)
- return false;
-
- ASSERT(event->target());
- bool wasAdded = m_queuedEvents.add(event).isNewEntry;
- ASSERT_UNUSED(wasAdded, wasAdded); // It should not have already been in the list.
-
- if (!m_pendingEventTimer->isActive())
- m_pendingEventTimer->startOneShot(0);
-
- return true;
-}
-
-void DocumentEventQueue::enqueueOrDispatchScrollEvent(PassRefPtr<Node> target, ScrollEventTargetType targetType)
-{
- if (!target->document().hasListenerType(Document::SCROLL_LISTENER))
- return;
-
- // Per the W3C CSSOM View Module, scroll events fired at the document should bubble, others should not.
- RefPtr<Event> scrollEvent = targetType == ScrollEventDocumentTarget ? Event::createBubble(eventNames().scrollEvent) : Event::create(eventNames().scrollEvent);
-
- if (!m_nodesWithQueuedScrollEvents.add(target.get()).isNewEntry)
- return;
-
- scrollEvent->setTarget(target);
- enqueueEvent(scrollEvent.release());
-}
-
-bool DocumentEventQueue::cancelEvent(Event* event)
-{
- ListHashSet<RefPtr<Event>, 16>::iterator it = m_queuedEvents.find(event);
- bool found = it != m_queuedEvents.end();
- if (found)
- m_queuedEvents.remove(it);
- if (m_queuedEvents.isEmpty())
- m_pendingEventTimer->stop();
- return found;
-}
-
-void DocumentEventQueue::close()
-{
- m_isClosed = true;
- m_pendingEventTimer->stop();
- m_queuedEvents.clear();
-}
-
-void DocumentEventQueue::pendingEventTimerFired()
-{
- ASSERT(!m_pendingEventTimer->isActive());
- ASSERT(!m_queuedEvents.isEmpty());
-
- m_nodesWithQueuedScrollEvents.clear();
-
- // Insert a marker for where we should stop.
- ASSERT(!m_queuedEvents.contains(0));
- bool wasAdded = m_queuedEvents.add(0).isNewEntry;
- ASSERT_UNUSED(wasAdded, wasAdded); // It should not have already been in the list.
-
- RefPtr<DocumentEventQueue> protector(this);
-
- while (!m_queuedEvents.isEmpty()) {
- ListHashSet<RefPtr<Event>, 16>::iterator iter = m_queuedEvents.begin();
- RefPtr<Event> event = *iter;
- m_queuedEvents.remove(iter);
- if (!event)
- break;
- dispatchEvent(event.get());
- }
-}
-
-void DocumentEventQueue::dispatchEvent(PassRefPtr<Event> event)
-{
- EventTarget* eventTarget = event->target();
- if (eventTarget->toDOMWindow())
- eventTarget->toDOMWindow()->dispatchEvent(event, 0);
- else
- eventTarget->dispatchEvent(event);
-}
-
-}
« no previous file with comments | « Source/core/events/DocumentEventQueue.h ('k') | Source/core/events/ErrorEvent.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698