1/* 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org) 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc. All rights reserved. 6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) 8 * Copyright (C) 2011 Google Inc. All rights reserved. 9 * 10 * This library is free software; you can redistribute it and/or 11 * modify it under the terms of the GNU Library General Public 12 * License as published by the Free Software Foundation; either 13 * version 2 of the License, or (at your option) any later version. 14 * 15 * This library is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 * Library General Public License for more details. 19 * 20 * You should have received a copy of the GNU Library General Public License 21 * along with this library; see the file COPYING.LIB. If not, write to 22 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 23 * Boston, MA 02110-1301, USA. 24 */ 25 26#ifndef EventDispatcher_h 27#define EventDispatcher_h 28 29#include "EventContext.h" 30#include "SimulatedClickOptions.h" 31#include <wtf/Forward.h> 32#include <wtf/HashMap.h> 33#include <wtf/PassRefPtr.h> 34#include <wtf/Vector.h> 35 36namespace WebCore { 37 38class Event; 39class EventDispatchMediator; 40class EventTarget; 41class FrameView; 42class Node; 43class PlatformKeyboardEvent; 44class PlatformMouseEvent; 45class ShadowRoot; 46class TreeScope; 47class WindowEventContext; 48 49enum EventDispatchContinuation { 50 ContinueDispatching, 51 DoneDispatching 52}; 53 54class EventDispatcher { 55public: 56 static bool dispatchEvent(Node*, PassRefPtr<EventDispatchMediator>); 57 static void dispatchScopedEvent(Node*, PassRefPtr<EventDispatchMediator>); 58 59 static void dispatchSimulatedClick(Element*, Event* underlyingEvent, SimulatedClickMouseEventOptions, SimulatedClickVisualOptions); 60 61 bool dispatch(); 62 Node* node() const { return m_node.get(); } 63 Event* event() const { return m_event.get(); } 64 EventPath& eventPath() { return m_eventPath; } 65 66private: 67 EventDispatcher(Node*, PassRefPtr<Event>); 68 const EventContext* topEventContext(); 69 70 EventDispatchContinuation dispatchEventPreProcess(void*& preDispatchEventHandlerResult); 71 EventDispatchContinuation dispatchEventAtCapturing(WindowEventContext&); 72 EventDispatchContinuation dispatchEventAtTarget(); 73 void dispatchEventAtBubbling(WindowEventContext&); 74 void dispatchEventPostProcess(void* preDispatchEventHandlerResult); 75 76 EventPath m_eventPath; 77 RefPtr<Node> m_node; 78 RefPtr<Event> m_event; 79 RefPtr<FrameView> m_view; 80#ifndef NDEBUG 81 bool m_eventDispatched; 82#endif 83}; 84 85} 86 87#endif 88