1 /* 2 * Copyright (C) 2010 Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name of Google Inc. nor the names of its 15 * contributors may be used to endorse or promote products derived from 16 * this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 #ifndef WebDOMEvent_h 32 #define WebDOMEvent_h 33 34 #include "../platform/WebCommon.h" 35 #include "../platform/WebPrivatePtr.h" 36 #include "../platform/WebString.h" 37 #include "WebNode.h" 38 39 namespace WebCore { class Event; } 40 #if BLINK_IMPLEMENTATION 41 namespace WTF { template <typename T> class PassRefPtr; } 42 #endif 43 44 namespace blink { 45 46 class WebDOMEvent { 47 public: 48 enum PhaseType { 49 CapturingPhase = 1, 50 AtTarget = 2, 51 BubblingPhase = 3 52 }; 53 ~WebDOMEvent()54 ~WebDOMEvent() { reset(); } 55 WebDOMEvent()56 WebDOMEvent() { } WebDOMEvent(const WebDOMEvent & other)57 WebDOMEvent(const WebDOMEvent& other) { assign(other); } 58 WebDOMEvent& operator=(const WebDOMEvent& e) 59 { 60 assign(e); 61 return *this; 62 } 63 64 BLINK_EXPORT void reset(); 65 BLINK_EXPORT void assign(const WebDOMEvent&); 66 isNull()67 bool isNull() const { return m_private.isNull(); } 68 69 BLINK_EXPORT WebString type() const; 70 BLINK_EXPORT WebNode target() const; 71 BLINK_EXPORT WebNode currentTarget() const; 72 73 BLINK_EXPORT PhaseType eventPhase() const; 74 BLINK_EXPORT bool bubbles() const; 75 BLINK_EXPORT bool cancelable() const; 76 77 BLINK_EXPORT bool isUIEvent() const; 78 BLINK_EXPORT bool isMouseEvent() const; 79 BLINK_EXPORT bool isMutationEvent() const; 80 BLINK_EXPORT bool isKeyboardEvent() const; 81 BLINK_EXPORT bool isTextEvent() const; 82 BLINK_EXPORT bool isCompositionEvent() const; 83 BLINK_EXPORT bool isDragEvent() const; 84 BLINK_EXPORT bool isClipboardEvent() const; 85 BLINK_EXPORT bool isMessageEvent() const; 86 BLINK_EXPORT bool isWheelEvent() const; 87 BLINK_EXPORT bool isBeforeTextInsertedEvent() const; 88 BLINK_EXPORT bool isOverflowEvent() const; 89 BLINK_EXPORT bool isPageTransitionEvent() const; 90 BLINK_EXPORT bool isPopStateEvent() const; 91 BLINK_EXPORT bool isProgressEvent() const; 92 BLINK_EXPORT bool isXMLHttpRequestProgressEvent() const; 93 94 #if BLINK_IMPLEMENTATION 95 WebDOMEvent(const PassRefPtrWillBeRawPtr<WebCore::Event>&); 96 operator PassRefPtrWillBeRawPtr<WebCore::Event>() const; 97 #endif 98 to()99 template<typename T> T to() 100 { 101 T res; 102 res.WebDOMEvent::assign(*this); 103 return res; 104 } 105 toConst()106 template<typename T> const T toConst() const 107 { 108 T res; 109 res.WebDOMEvent::assign(*this); 110 return res; 111 } 112 113 protected: 114 #if BLINK_IMPLEMENTATION 115 void assign(const PassRefPtrWillBeRawPtr<WebCore::Event>&); 116 unwrap()117 template<typename T> T* unwrap() 118 { 119 return static_cast<T*>(m_private.get()); 120 } 121 constUnwrap()122 template<typename T> const T* constUnwrap() const 123 { 124 return static_cast<const T*>(m_private.get()); 125 } 126 #endif 127 128 WebPrivatePtr<WebCore::Event> m_private; 129 }; 130 131 } // namespace blink 132 133 #endif 134