From 8f72e70a9fd78eec56623b3a62e68f16b7b27e28 Mon Sep 17 00:00:00 2001 From: Feng Qian <> Date: Fri, 10 Apr 2009 18:11:29 -0700 Subject: AI 145796: Land the WebKit merge @r42026. Automated import of CL 145796 --- WebCore/bindings/v8/V8AbstractEventListener.h | 98 +++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 WebCore/bindings/v8/V8AbstractEventListener.h (limited to 'WebCore/bindings/v8/V8AbstractEventListener.h') diff --git a/WebCore/bindings/v8/V8AbstractEventListener.h b/WebCore/bindings/v8/V8AbstractEventListener.h new file mode 100644 index 0000000..0c34a86 --- /dev/null +++ b/WebCore/bindings/v8/V8AbstractEventListener.h @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "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 THE COPYRIGHT + * OWNER 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 V8AbstractEventListener_h +#define V8AbstractEventListener_h + +#include "EventListener.h" +#include + +namespace WebCore { + + class Event; + class Frame; + + // There are two kinds of event listeners: HTML or non-HMTL. onload, onfocus, etc (attributes) are always HTML event handler type; + // Event listeners added by Window.addEventListener or EventTargetNode::addEventListener are non-HTML type. + // + // Why does this matter? + // WebKit does not allow duplicated HTML event handlers of the same type, but ALLOWs duplicated non-HTML event handlers. + class V8AbstractEventListener : public EventListener { + public: + virtual ~V8AbstractEventListener() { } + + // Returns the owner frame of the listener. + Frame* frame() { return m_frame; } + + virtual void handleEvent(Event*, bool isWindowEvent); + void invokeEventHandler(v8::Handle, Event*, v8::Handle jsEvent, bool isWindowEvent); + + // Returns the listener object, either a function or an object. + virtual v8::Local getListenerObject() + { + return v8::Local::New(m_listener); + } + + // Dispose listener object and clear the handle. + void disposeListenerObject(); + + virtual bool disconnected() const { return !m_frame; } + + protected: + v8::Persistent m_listener; + + // Indicates if this is an HTML type listener. + bool m_isInline; + + private: + V8AbstractEventListener(Frame*, bool isInline); + + virtual v8::Local callListenerFunction(v8::Handle jsevent, Event*, bool isWindowEvent) = 0; + + // Get the receiver object to use for event listener call. + v8::Local getReceiverObject(Event*, bool isWindowEvent); + + // Frame to which the event listener is attached to. An event listener must be destroyed before its owner frame is + // deleted. See fast/dom/replaceChild.html + // FIXME: this could hold m_frame live until the event listener is deleted. + Frame* m_frame; + + // Position in the HTML source for HTML event listeners. + int m_lineNumber; + int m_columnNumber; + + friend class V8EventListener; + friend class V8ObjectEventListener; + friend class V8LazyEventListener; + }; + +} // namespace WebCore + +#endif // V8AbstractEventListener_h -- cgit v1.1