| Index: Source/core/events/EventTarget.h
|
| ===================================================================
|
| --- Source/core/events/EventTarget.h (revision 159156)
|
| +++ Source/core/events/EventTarget.h (working copy)
|
| @@ -1,213 +0,0 @@
|
| -/*
|
| - * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
|
| - * (C) 1999 Antti Koivisto (koivisto@kde.org)
|
| - * (C) 2001 Dirk Mueller (mueller@kde.org)
|
| - * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
|
| - * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org)
|
| - * (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
|
| - *
|
| - * 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.
|
| - *
|
| - */
|
| -
|
| -#ifndef EventTarget_h
|
| -#define EventTarget_h
|
| -
|
| -#include "core/events/EventListenerMap.h"
|
| -#include "core/events/EventNames.h"
|
| -#include "wtf/Forward.h"
|
| -
|
| -namespace WebCore {
|
| -
|
| - class ApplicationCache;
|
| - class AudioContext;
|
| - class DOMWindow;
|
| - class DedicatedWorkerGlobalScope;
|
| - class Event;
|
| - class EventListener;
|
| - class EventSource;
|
| - class ExceptionState;
|
| - class FileReader;
|
| - class FileWriter;
|
| - class IDBDatabase;
|
| - class IDBRequest;
|
| - class IDBTransaction;
|
| - class MIDIAccess;
|
| - class MIDIInput;
|
| - class MIDIPort;
|
| - class MediaController;
|
| - class MediaStream;
|
| - class MessagePort;
|
| - class NamedFlow;
|
| - class Node;
|
| - class Notification;
|
| - class SVGElementInstance;
|
| - class ScriptExecutionContext;
|
| - class ScriptProcessorNode;
|
| - class SharedWorker;
|
| - class SharedWorkerGlobalScope;
|
| - class TextTrack;
|
| - class TextTrackCue;
|
| - class WebSocket;
|
| - class Worker;
|
| - class XMLHttpRequest;
|
| - class XMLHttpRequestUpload;
|
| -
|
| - struct FiringEventIterator {
|
| - FiringEventIterator(const AtomicString& eventType, size_t& iterator, size_t& end)
|
| - : eventType(eventType)
|
| - , iterator(iterator)
|
| - , end(end)
|
| - {
|
| - }
|
| -
|
| - const AtomicString& eventType;
|
| - size_t& iterator;
|
| - size_t& end;
|
| - };
|
| - typedef Vector<FiringEventIterator, 1> FiringEventIteratorVector;
|
| -
|
| - struct EventTargetData {
|
| - WTF_MAKE_NONCOPYABLE(EventTargetData); WTF_MAKE_FAST_ALLOCATED;
|
| - public:
|
| - EventTargetData();
|
| - ~EventTargetData();
|
| -
|
| - EventListenerMap eventListenerMap;
|
| - OwnPtr<FiringEventIteratorVector> firingEventIterators;
|
| - };
|
| -
|
| - class EventTarget {
|
| - public:
|
| - void ref() { refEventTarget(); }
|
| - void deref() { derefEventTarget(); }
|
| -
|
| - virtual const AtomicString& interfaceName() const = 0;
|
| - virtual ScriptExecutionContext* scriptExecutionContext() const = 0;
|
| -
|
| - virtual Node* toNode();
|
| - virtual DOMWindow* toDOMWindow();
|
| - virtual MessagePort* toMessagePort();
|
| -
|
| - virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture);
|
| - virtual bool removeEventListener(const AtomicString& eventType, EventListener*, bool useCapture);
|
| - virtual void removeAllEventListeners();
|
| - virtual bool dispatchEvent(PassRefPtr<Event>);
|
| - bool dispatchEvent(PassRefPtr<Event>, ExceptionState&); // DOM API
|
| - virtual void uncaughtExceptionInEventHandler();
|
| -
|
| - // Used for legacy "onEvent" attribute APIs.
|
| - bool setAttributeEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, DOMWrapperWorld* isolatedWorld = 0);
|
| - EventListener* getAttributeEventListener(const AtomicString& eventType, DOMWrapperWorld* isolatedWorld = 0);
|
| -
|
| - bool hasEventListeners() const;
|
| - bool hasEventListeners(const AtomicString& eventType) const;
|
| - bool hasCapturingEventListeners(const AtomicString& eventType);
|
| - const EventListenerVector& getEventListeners(const AtomicString& eventType);
|
| -
|
| - bool fireEventListeners(Event*);
|
| - bool isFiringEventListeners();
|
| -
|
| - protected:
|
| - virtual ~EventTarget();
|
| -
|
| - virtual EventTargetData* eventTargetData() = 0;
|
| - virtual EventTargetData* ensureEventTargetData() = 0;
|
| -
|
| - private:
|
| - virtual void refEventTarget() = 0;
|
| - virtual void derefEventTarget() = 0;
|
| -
|
| - DOMWindow* executingWindow();
|
| - void fireEventListeners(Event*, EventTargetData*, EventListenerVector&);
|
| - void countLegacyEvents(const AtomicString& legacyTypeName, EventListenerVector*, EventListenerVector*);
|
| -
|
| - bool clearAttributeEventListener(const AtomicString& eventType, DOMWrapperWorld* isolatedWorld);
|
| -
|
| - friend class EventListenerIterator;
|
| - };
|
| -
|
| - // FIXME: These macros should be split into separate DEFINE and DECLARE
|
| - // macros to avoid causing so many header includes.
|
| - #define DEFINE_ATTRIBUTE_EVENT_LISTENER(attribute) \
|
| - EventListener* on##attribute(DOMWrapperWorld* isolatedWorld) { return getAttributeEventListener(eventNames().attribute##Event, isolatedWorld); } \
|
| - void setOn##attribute(PassRefPtr<EventListener> listener, DOMWrapperWorld* isolatedWorld = 0) { setAttributeEventListener(eventNames().attribute##Event, listener, isolatedWorld); } \
|
| -
|
| - #define DECLARE_VIRTUAL_ATTRIBUTE_EVENT_LISTENER(attribute) \
|
| - virtual EventListener* on##attribute(DOMWrapperWorld* isolatedWorld); \
|
| - virtual void setOn##attribute(PassRefPtr<EventListener>, DOMWrapperWorld* isolatedWorld); \
|
| -
|
| - #define DEFINE_VIRTUAL_ATTRIBUTE_EVENT_LISTENER(type, attribute) \
|
| - EventListener* type::on##attribute(DOMWrapperWorld* isolatedWorld) { return getAttributeEventListener(eventNames().attribute##Event, isolatedWorld); } \
|
| - void type::setOn##attribute(PassRefPtr<EventListener> listener, DOMWrapperWorld* isolatedWorld) { setAttributeEventListener(eventNames().attribute##Event, listener, isolatedWorld); } \
|
| -
|
| - #define DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(attribute) \
|
| - EventListener* on##attribute(DOMWrapperWorld* isolatedWorld) { return document().getWindowAttributeEventListener(eventNames().attribute##Event, isolatedWorld); } \
|
| - void setOn##attribute(PassRefPtr<EventListener> listener, DOMWrapperWorld* isolatedWorld) { document().setWindowAttributeEventListener(eventNames().attribute##Event, listener, isolatedWorld); } \
|
| -
|
| - #define DEFINE_MAPPED_ATTRIBUTE_EVENT_LISTENER(attribute, eventName) \
|
| - EventListener* on##attribute(DOMWrapperWorld* isolatedWorld) { return getAttributeEventListener(eventNames().eventName##Event, isolatedWorld); } \
|
| - void setOn##attribute(PassRefPtr<EventListener> listener, DOMWrapperWorld* isolatedWorld) { setAttributeEventListener(eventNames().eventName##Event, listener, isolatedWorld); } \
|
| -
|
| - #define DECLARE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(recipient, attribute) \
|
| - EventListener* on##attribute(DOMWrapperWorld* isolatedWorld); \
|
| - void setOn##attribute(PassRefPtr<EventListener> listener, DOMWrapperWorld* isolatedWorld);
|
| -
|
| - #define DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(type, recipient, attribute) \
|
| - EventListener* type::on##attribute(DOMWrapperWorld* isolatedWorld) { return recipient ? recipient->getAttributeEventListener(eventNames().attribute##Event, isolatedWorld) : 0; } \
|
| - void type::setOn##attribute(PassRefPtr<EventListener> listener, DOMWrapperWorld* isolatedWorld) { if (recipient) recipient->setAttributeEventListener(eventNames().attribute##Event, listener, isolatedWorld); }
|
| -
|
| - inline bool EventTarget::isFiringEventListeners()
|
| - {
|
| - EventTargetData* d = eventTargetData();
|
| - if (!d)
|
| - return false;
|
| - return d->firingEventIterators && !d->firingEventIterators->isEmpty();
|
| - }
|
| -
|
| - inline bool EventTarget::hasEventListeners() const
|
| - {
|
| - // FIXME: We should have a const version of eventTargetData.
|
| - if (const EventTargetData* d = const_cast<EventTarget*>(this)->eventTargetData())
|
| - return !d->eventListenerMap.isEmpty();
|
| - return false;
|
| - }
|
| -
|
| - inline bool EventTarget::hasEventListeners(const AtomicString& eventType) const
|
| - {
|
| - // FIXME: We should have const version of eventTargetData.
|
| - if (const EventTargetData* d = const_cast<EventTarget*>(this)->eventTargetData())
|
| - return d->eventListenerMap.contains(eventType);
|
| - return false;
|
| - }
|
| -
|
| - inline bool EventTarget::hasCapturingEventListeners(const AtomicString& eventType)
|
| - {
|
| - EventTargetData* d = eventTargetData();
|
| - if (!d)
|
| - return false;
|
| - return d->eventListenerMap.containsCapturing(eventType);
|
| - }
|
| -
|
| -} // namespace WebCore
|
| -
|
| -#endif // EventTarget_h
|
|
|