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