18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2006, 2008, 2009 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef EventListener_h 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define EventListener_h 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RefCounted.h> 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qiannamespace JSC { 278f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian class JSObject; 280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch class MarkStack; 298f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block class ScriptExecutionContext; 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class Event; 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class EventListener : public RefCounted<EventListener> { 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 38545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch enum Type { 39545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch JSEventListenerType, 40545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch ImageEventListenerType, 41545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch InspectorDOMAgentType, 42545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch InspectorDOMStorageResourceType, 43545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch ObjCEventListenerType, 44545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch CPPEventListenerType, 45545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch ConditionEventListenerType, 46e14391e94c850b8bd03680c23b38978db68687a8John Reck GObjectEventListenerType, 47e14391e94c850b8bd03680c23b38978db68687a8John Reck NativeEventListenerType 48545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }; 49545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual ~EventListener() { } 51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual bool operator==(const EventListener&) = 0; 52231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual void handleEvent(ScriptExecutionContext*, Event*) = 0; 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool wasCreatedFromMarkup() const { return false; } 548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(JSC) 560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual void markJSFunction(JSC::MarkStack&) { } 578f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 595f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian bool isAttribute() const { return virtualisAttribute(); } 60231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Type type() const { return m_type; } 61231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 62231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block protected: 63231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block EventListener(Type type) 64231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block : m_type(type) 65231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 66231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian private: 695f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual bool virtualisAttribute() const { return false; } 70231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Type m_type; 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 77