Changeset 156815 in webkit
- Timestamp:
- Oct 2, 2013 6:32:43 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r156814 r156815 1 2013-10-02 Andreas Kling <akling@apple.com> 2 3 CTTE: Drag events are only dispatched on Elements. 4 <https://webkit.org/b/122250> 5 6 Reviewed by Antti Koivisto. 7 8 We never dispatch drag events on non-Element nodes so tighten up the 9 code to operate on Elements instead. 10 1 11 2013-10-02 Hans Muller <hmuller@adobe.com> 2 12 -
trunk/Source/WebCore/page/EventHandler.cpp
r156800 r156815 1966 1966 #if ENABLE(DRAG_SUPPORT) 1967 1967 1968 bool EventHandler::dispatchDragEvent(const AtomicString& eventType, Node*dragTarget, const PlatformMouseEvent& event, Clipboard* clipboard)1968 bool EventHandler::dispatchDragEvent(const AtomicString& eventType, Element& dragTarget, const PlatformMouseEvent& event, Clipboard* clipboard) 1969 1969 { 1970 1970 FrameView* view = m_frame.view(); … … 1984 1984 0, 0, clipboard); 1985 1985 1986 dragTarget ->dispatchEvent(me.get(), IGNORE_EXCEPTION);1986 dragTarget.dispatchEvent(me.get(), IGNORE_EXCEPTION); 1987 1987 return me->defaultPrevented(); 1988 1988 } … … 2098 2098 MouseEventWithHitTestResults mev = prepareMouseEvent(request, event); 2099 2099 2100 // Drag events should never go to text nodes (following IE, and proper mouseover/out dispatch) 2101 RefPtr<Node> newTarget = mev.targetNode(); 2102 if (newTarget && newTarget->isTextNode()) 2103 newTarget = newTarget->parentOrShadowHostElement(); 2100 RefPtr<Element> newTarget; 2101 if (Node* targetNode = mev.targetNode()) { 2102 // Drag events should never go to non-element nodes (following IE, and proper mouseover/out dispatch) 2103 if (!targetNode->isElementNode()) 2104 newTarget = targetNode->parentOrShadowHostElement(); 2105 else 2106 newTarget = toElement(targetNode); 2107 } 2104 2108 2105 2109 m_autoscrollController->updateDragAndDrop(newTarget.get(), event.position(), event.timestamp()); … … 2121 2125 dispatchDragSrcEvent(eventNames().dragEvent, event); 2122 2126 } 2123 accept = dispatchDragEvent(eventNames().dragenterEvent, newTarget.get(), event, clipboard);2127 accept = dispatchDragEvent(eventNames().dragenterEvent, *newTarget, event, clipboard); 2124 2128 if (!accept) 2125 2129 accept = findDropZone(newTarget.get(), clipboard); … … 2130 2134 accept = targetFrame->eventHandler().updateDragAndDrop(event, clipboard); 2131 2135 } else if (m_dragTarget) 2132 dispatchDragEvent(eventNames().dragleaveEvent, m_dragTarget.get(), event, clipboard);2136 dispatchDragEvent(eventNames().dragleaveEvent, *m_dragTarget, event, clipboard); 2133 2137 2134 2138 if (newTarget) { … … 2148 2152 dispatchDragSrcEvent(eventNames().dragEvent, event); 2149 2153 } 2150 accept = dispatchDragEvent(eventNames().dragoverEvent, newTarget.get(), event, clipboard);2154 accept = dispatchDragEvent(eventNames().dragoverEvent, *newTarget, event, clipboard); 2151 2155 if (!accept) 2152 2156 accept = findDropZone(newTarget.get(), clipboard); … … 2154 2158 } 2155 2159 } 2156 m_dragTarget = newTarget; 2157 2160 m_dragTarget = newTarget.release(); 2158 2161 return accept; 2159 2162 } … … 2165 2168 if (targetFrame) 2166 2169 targetFrame->eventHandler().cancelDragAndDrop(event, clipboard); 2167 } else if (m_dragTarget .get()) {2170 } else if (m_dragTarget) { 2168 2171 if (dragState().source && dragState().shouldDispatchEvents) 2169 2172 dispatchDragSrcEvent(eventNames().dragEvent, event); 2170 dispatchDragEvent(eventNames().dragleaveEvent, m_dragTarget.get(), event, clipboard);2173 dispatchDragEvent(eventNames().dragleaveEvent, *m_dragTarget, event, clipboard); 2171 2174 } 2172 2175 clearDragState(); … … 2180 2183 if (targetFrame) 2181 2184 preventedDefault = targetFrame->eventHandler().performDragAndDrop(event, clipboard); 2182 } else if (m_dragTarget .get())2183 preventedDefault = dispatchDragEvent(eventNames().dropEvent, m_dragTarget.get(), event, clipboard);2185 } else if (m_dragTarget) 2186 preventedDefault = dispatchDragEvent(eventNames().dropEvent, *m_dragTarget, event, clipboard); 2184 2187 clearDragState(); 2185 2188 return preventedDefault; … … 2189 2192 { 2190 2193 stopAutoscrollTimer(); 2191 m_dragTarget = 0;2194 m_dragTarget = nullptr; 2192 2195 m_capturingMouseEventsElement = nullptr; 2193 2196 m_shouldOnlyFireDragOverEvent = false; … … 3536 3539 bool EventHandler::dispatchDragSrcEvent(const AtomicString& eventType, const PlatformMouseEvent& event) 3537 3540 { 3538 return !dispatchDragEvent(eventType, dragState().source.get(), event, dragState().clipboard.get());3541 return !dispatchDragEvent(eventType, *dragState().source, event, dragState().clipboard.get()); 3539 3542 } 3540 3543 -
trunk/Source/WebCore/page/EventHandler.h
r156761 r156815 329 329 bool dispatchMouseEvent(const AtomicString& eventType, Node* target, bool cancelable, int clickCount, const PlatformMouseEvent&, bool setUnder); 330 330 #if ENABLE(DRAG_SUPPORT) 331 bool dispatchDragEvent(const AtomicString& eventType, Node*target, const PlatformMouseEvent&, Clipboard*);331 bool dispatchDragEvent(const AtomicString& eventType, Element& target, const PlatformMouseEvent&, Clipboard*); 332 332 333 333 void freeClipboard(); … … 462 462 463 463 #if ENABLE(DRAG_SUPPORT) 464 RefPtr< Node> m_dragTarget;464 RefPtr<Element> m_dragTarget; 465 465 bool m_shouldOnlyFireDragOverEvent; 466 466 #endif
Note: See TracChangeset
for help on using the changeset viewer.