summaryrefslogtreecommitdiffstats
path: root/dom/interfaces/events/nsIDOMEventTarget.idl
diff options
context:
space:
mode:
Diffstat (limited to 'dom/interfaces/events/nsIDOMEventTarget.idl')
-rw-r--r--dom/interfaces/events/nsIDOMEventTarget.idl304
1 files changed, 304 insertions, 0 deletions
diff --git a/dom/interfaces/events/nsIDOMEventTarget.idl b/dom/interfaces/events/nsIDOMEventTarget.idl
new file mode 100644
index 000000000..a7e3aae5a
--- /dev/null
+++ b/dom/interfaces/events/nsIDOMEventTarget.idl
@@ -0,0 +1,304 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "domstubs.idl"
+
+%{C++
+#include "mozilla/EventForwards.h"
+#include "mozilla/dom/Nullable.h"
+#include "js/TypeDecls.h"
+
+using mozilla::dom::Nullable;
+
+namespace mozilla {
+class EventChainPostVisitor;
+class EventChainPreVisitor;
+class EventListenerManager;
+namespace dom {
+class EventTarget;
+} // namespace dom
+} // namespace mozilla
+
+class nsPresContext;
+%}
+
+/**
+ * The nsIDOMEventTarget interface is the interface implemented by all
+ * event targets in the Document Object Model.
+ *
+ * For more information on this interface please see
+ * http://www.w3.org/TR/DOM-Level-2-Events/
+ */
+
+[ptr] native WidgetEventPtr(mozilla::WidgetEvent);
+[ptr] native nsPresContextPtr(nsPresContext);
+[ptr] native nsEventStatusPtr(nsEventStatus);
+[ptr] native JSContextPtr(JSContext);
+[ref] native EventChainPostVisitorRef(mozilla::EventChainPostVisitor);
+[ref] native EventChainPreVisitorRef(mozilla::EventChainPreVisitor);
+[ptr] native EventListenerManagerPtr(mozilla::EventListenerManager);
+[ptr] native EventTargetPtr(mozilla::dom::EventTarget);
+
+interface nsIScriptContext;
+interface nsIDOMEventListener;
+interface nsIDOMEvent;
+
+[scriptable, builtinclass, uuid(9a78ac3c-9507-4d00-b2d6-10b508d2ec31)]
+interface nsIDOMEventTarget : nsISupports
+{
+ /**
+ * This method allows the registration of event listeners on the event target.
+ * If an EventListener is added to an EventTarget while it is processing an
+ * event, it will not be triggered by the current actions but may be
+ * triggered during a later stage of event flow, such as the bubbling phase.
+ *
+ * If multiple identical EventListeners are registered on the same
+ * EventTarget with the same parameters the duplicate instances are
+ * discarded. They do not cause the EventListener to be called twice
+ * and since they are discarded they do not need to be removed with the
+ * removeEventListener method.
+ *
+ * @param type The event type for which the user is registering
+ * @param listener The listener parameter takes an interface
+ * implemented by the user which contains the methods
+ * to be called when the event occurs.
+ * @param useCapture If true, useCapture indicates that the user
+ * wishes to initiate capture. After initiating
+ * capture, all events of the specified type will be
+ * dispatched to the registered EventListener before
+ * being dispatched to any EventTargets beneath them
+ * in the tree. Events which are bubbling upward
+ * through the tree will not trigger an
+ * EventListener designated to use capture.
+ * @param wantsUntrusted If false, the listener will not receive any
+ * untrusted events (see above), if true, the
+ * listener will receive events whether or not
+ * they're trusted
+ */
+ [optional_argc] void addEventListener(in DOMString type,
+ in nsIDOMEventListener listener,
+ [optional] in boolean useCapture,
+ [optional] in boolean wantsUntrusted);
+
+ /**
+ * addSystemEventListener() adds an event listener of aType to the system
+ * group. Typically, core code should use system group for listening to
+ * content (i.e., non-chrome) element's events. If core code uses
+ * nsIDOMEventTarget::AddEventListener for a content node, it means
+ * that the listener cannot listen the event when web content calls
+ * stopPropagation() of the event.
+ *
+ * @param aType An event name you're going to handle.
+ * @param aListener An event listener.
+ * @param aUseCapture TRUE if you want to listen the event in capturing
+ * phase. Otherwise, FALSE.
+ * @param aWantsUntrusted TRUE if you want to handle untrusted events.
+ * Otherwise, FALSE.
+ * @return NS_OK if succeed. Otherwise, NS_ERROR_*.
+ */
+ [noscript, optional_argc] void addSystemEventListener(
+ in DOMString type,
+ in nsIDOMEventListener listener,
+ [optional] in boolean aUseCapture,
+ [optional] in boolean aWantsUntrusted);
+
+%{C++
+ // non-virtual so it won't affect the vtable
+ nsresult AddEventListener(const nsAString& aType,
+ nsIDOMEventListener* aListener,
+ bool aUseCapture)
+ {
+ return AddEventListener(aType, aListener, aUseCapture, false, 1);
+ }
+ // non-virtual so it won't affect the vtable
+ nsresult AddEventListener(const nsAString& aType,
+ nsIDOMEventListener* aListener,
+ bool aUseCapture,
+ bool aWantsUntrusted)
+ {
+ return AddEventListener(aType, aListener, aUseCapture, aWantsUntrusted, 2);
+ }
+ // non-virtual so it won't affect the vtable
+ nsresult AddSystemEventListener(const nsAString& aType,
+ nsIDOMEventListener* aListener,
+ bool aUseCapture)
+ {
+ return AddSystemEventListener(aType, aListener, aUseCapture, false, 1);
+ }
+ // non-virtual so it won't affect the vtable
+ nsresult AddSystemEventListener(const nsAString& aType,
+ nsIDOMEventListener* aListener,
+ bool aUseCapture,
+ bool aWantsUntrusted)
+ {
+ return AddSystemEventListener(aType, aListener, aUseCapture,
+ aWantsUntrusted, 2);
+ }
+%}
+
+ /**
+ * This method allows the removal of event listeners from the event
+ * target. If an EventListener is removed from an EventTarget while it
+ * is processing an event, it will not be triggered by the current actions.
+ * EventListeners can never be invoked after being removed.
+ * Calling removeEventListener with arguments which do not identify any
+ * currently registered EventListener on the EventTarget has no effect.
+ *
+ * @param type Specifies the event type of the EventListener being
+ * removed.
+ * @param listener The EventListener parameter indicates the
+ * EventListener to be removed.
+ * @param useCapture Specifies whether the EventListener being
+ * removed was registered as a capturing listener or
+ * not. If a listener was registered twice, one with
+ * capture and one without, each must be removed
+ * separately. Removal of a capturing listener does
+ * not affect a non-capturing version of the same
+ * listener, and vice versa.
+ */
+ void removeEventListener(in DOMString type,
+ in nsIDOMEventListener listener,
+ [optional] in boolean useCapture);
+
+ /**
+ * removeSystemEventListener() should be used if you have used
+ * addSystemEventListener().
+ */
+ [noscript] void removeSystemEventListener(
+ in DOMString type,
+ in nsIDOMEventListener listener,
+ [optional] in boolean aUseCapture);
+
+ /**
+ * This method allows the dispatch of events into the implementations
+ * event model. Events dispatched in this manner will have the same
+ * capturing and bubbling behavior as events dispatched directly by the
+ * implementation. The target of the event is the EventTarget on which
+ * dispatchEvent is called.
+ *
+ * @param evt Specifies the event type, behavior, and contextual
+ * information to be used in processing the event.
+ * @return Indicates whether any of the listeners which handled the
+ * event called preventDefault. If preventDefault was called
+ * the value is false, else the value is true.
+ * @throws INVALID_STATE_ERR: Raised if the Event's type was
+ * not specified by initializing the event before
+ * dispatchEvent was called. Specification of the Event's
+ * type as null or an empty string will also trigger this
+ * exception.
+ */
+ boolean dispatchEvent(in nsIDOMEvent evt)
+ raises(DOMException);
+
+ /**
+ * Returns the nsIDOMEventTarget object which should be used as the target
+ * of DOMEvents.
+ * Usually |this| is returned, but for example global object returns
+ * the outer object.
+ */
+ [notxpcom, nostdcall] EventTargetPtr GetTargetForDOMEvent();
+
+ /**
+ * Returns the nsIDOMEventTarget object which should be used as the target
+ * of the event and when constructing event target chain.
+ * Usually |this| is returned, but for example global object returns
+ * the inner object.
+ */
+ [notxpcom, nostdcall] EventTargetPtr GetTargetForEventTargetChain();
+
+ /**
+ * Called before the capture phase of the event flow.
+ * This is used to create the event target chain and implementations
+ * should set the necessary members of EventChainPreVisitor.
+ * At least aVisitor.mCanHandle must be set,
+ * usually also aVisitor.mParentTarget if mCanHandle is PR_TRUE.
+ * First one tells that this object can handle the aVisitor.mEvent event and
+ * the latter one is the possible parent object for the event target chain.
+ * @see EventDispatcher.h for more documentation about aVisitor.
+ *
+ * @param aVisitor the visitor object which is used to create the
+ * event target chain for event dispatching.
+ *
+ * @note Only EventDispatcher should call this method.
+ */
+ [noscript, nostdcall]
+ void PreHandleEvent(in EventChainPreVisitorRef aVisitor);
+
+ /**
+ * If EventChainPreVisitor.mWantsWillHandleEvent is set PR_TRUE,
+ * called just before possible event handlers on this object will be called.
+ */
+ [noscript, nostdcall]
+ void WillHandleEvent(in EventChainPostVisitorRef aVisitor);
+
+ /**
+ * Called after the bubble phase of the system event group.
+ * The default handling of the event should happen here.
+ * @param aVisitor the visitor object which is used during post handling.
+ *
+ * @see EventDispatcher.h for documentation about aVisitor.
+ * @note Only EventDispatcher should call this method.
+ */
+ [noscript, nostdcall]
+ void PostHandleEvent(in EventChainPostVisitorRef aVisitor);
+
+ /**
+ * Dispatch an event.
+ * @param aEvent the event that is being dispatched.
+ * @param aDOMEvent the event that is being dispatched, use if you want to
+ * dispatch nsIDOMEvent, not only WidgetEvent.
+ * @param aPresContext the current presentation context, can be nullptr.
+ * @param aEventStatus the status returned from the function, can be nullptr.
+ *
+ * @note If both aEvent and aDOMEvent are used, aEvent must be the internal
+ * event of the aDOMEvent.
+ *
+ * If aDOMEvent is not nullptr (in which case aEvent can be nullptr) it is used
+ * for dispatching, otherwise aEvent is used.
+ *
+ * @deprecated This method is here just until all the callers outside Gecko
+ * have been converted to use nsIDOMEventTarget::dispatchEvent.
+ */
+ [noscript, nostdcall]
+ void DispatchDOMEvent(in WidgetEventPtr aEvent,
+ in nsIDOMEvent aDOMEvent,
+ in nsPresContextPtr aPresContext,
+ in nsEventStatusPtr aEventStatus);
+
+ /**
+ * Get the script context in which the event handlers should be run.
+ * May return null.
+ * @note Caller *must* check the value of aRv.
+ */
+ [notxpcom, nostdcall]
+ nsIScriptContext GetContextForEventHandlers(out nsresult aRv);
+};
+
+%{C++
+
+#define NS_IMPL_DOMTARGET_DEFAULTS(_class) \
+mozilla::dom::EventTarget* _class::GetTargetForDOMEvent() { return this; } \
+mozilla::dom::EventTarget* _class::GetTargetForEventTargetChain() { return this; } \
+nsresult _class::WillHandleEvent(mozilla::EventChainPostVisitor& aVisitor) { return NS_OK; }
+
+#define NS_IMPL_REMOVE_SYSTEM_EVENT_LISTENER(aClass) \
+NS_IMETHODIMP \
+aClass::RemoveSystemEventListener(const nsAString& aType, \
+ nsIDOMEventListener *aListener, \
+ bool aUseCapture) \
+{ \
+ mozilla::EventListenerManager* listenerManager = \
+ GetExistingListenerManager(); \
+ if (!listenerManager) { \
+ return NS_OK; \
+ } \
+ mozilla::EventListenerFlags flags; \
+ flags.mInSystemGroup = true; \
+ flags.mCapture = aUseCapture; \
+ listenerManager->RemoveEventListenerByType(aListener, aType, flags); \
+ return NS_OK; \
+}
+
+%}