Changeset 143439 in webkit
- Timestamp:
- Feb 20, 2013 1:43:11 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r143436 r143439 1 2013-02-20 Mike West <mkwst@chromium.org> 2 3 Use EventPathWalker rather than parentNode() to normalize event targets in EventHandler. 4 https://bugs.webkit.org/show_bug.cgi?id=110037 5 6 Reviewed by Ryosuke Niwa. 7 8 * fast/dom/shadow/resources/event-dispatching.js: 9 (scrollMouseWheel): 10 (addEventListeners): 11 Add MouseWheel, Drag, and Touch support to the event-dispatching 12 tests in Shadow DOM. 13 * fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node.html: 14 * fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root.html: 15 Scroll the mouse wheel, drag a bit, and touch before leaving the 16 text node, and record the generated events. 17 1 18 2013-02-20 Zoltan Arvai <zarvai@inf.u-szeged.hu> 2 19 -
trunk/LayoutTests/fast/dom/shadow/resources/event-dispatching.js
r143191 r143439 15 15 y = element.offsetTop + element.offsetHeight / 2; 16 16 eventSender.mouseMoveTo(x, y); 17 } 18 19 function touchLocation(node) 20 { 21 var x = node.offsetLeft + 5; 22 var y = node.offsetTop + defaultPaddingSize + 5; 23 eventSender.addTouchPoint(x, y); 24 eventSender.touchStart(); 25 eventSender.leapForward(100); 26 eventSender.touchEnd(); 27 eventSender.cancelTouchPoint(0); 28 } 29 30 function selectTextNode(node) 31 { 32 getSelection().setBaseAndExtent(node, 0, node, node.length); 33 } 34 35 function dragMouse(node) { 36 var x = node.offsetLeft + 5; 37 var y = node.offsetTop + defaultPaddingSize + 5; 38 39 eventSender.mouseMoveTo(x, y); 40 eventSender.mouseDown(); 41 eventSender.leapForward(100); 42 eventSender.mouseMoveTo(x + 100, y + 100); 43 eventSender.mouseUp(); 44 eventSender.mouseMoveTo(x, y); 45 } 46 47 function scrollMouseWheel(node) { 48 var x = node.offsetLeft + 5; 49 var y = node.offsetTop + defaultPaddingSize + 5; 50 eventSender.mouseMoveTo(x, y); 51 eventSender.mouseScrollBy(0, 120); 17 52 } 18 53 … … 76 111 for (var i = 0; i < nodes.length; ++i) { 77 112 var node = getNodeInShadowTreeStack(nodes[i]); 113 node.addEventListener('click', recordEvent, false); 114 node.addEventListener('dragstart', recordEvent, false); 115 node.addEventListener('mouseout', recordEvent, false); 78 116 node.addEventListener('mouseover', recordEvent, false); 79 node.addEventListener('mouse out', recordEvent, false);80 node.addEventListener(' click', recordEvent, false);117 node.addEventListener('mousewheel', recordEvent, false); 118 node.addEventListener('touchstart', recordEvent, false); 81 119 // <content> might be an inactive insertion point, so style it also. 82 120 if (node.tagName == 'DIV' || node.tagName == 'DETAILS' || node.tagName == 'SUMMARY' || node.tagName == 'CONTENT') -
trunk/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node-expected.txt
r143191 r143439 21 21 mouseover 22 22 @top (target: top) (related: shadow-host) 23 24 touchstart 25 @content (target: content) 26 @shadow-root (target: content) 27 @shadow-host (target: shadow-host) 28 @top (target: shadow-host) 29 30 mousewheel 31 @content (target: content) 32 @shadow-root (target: content) 33 @shadow-host (target: shadow-host) 34 @top (target: shadow-host) 23 35 PASS successfullyParsed is true 24 36 -
trunk/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node.html
r143191 r143439 31 31 eventSender.mouseMoveTo(x, y); 32 32 clearEventRecords(); 33 33 34 moveMouseOver(document.getElementById('top')); 34 35 debugDispatchedEvent('mouseout'); 35 36 debugDispatchedEvent('mouseover'); 37 38 touchLocation(host); 39 debugDispatchedEvent('touchstart'); 40 41 scrollMouseWheel(host); 42 debugDispatchedEvent('mousewheel'); 36 43 </script> 37 44 <script src="../../js/resources/js-test-post.js"></script> -
trunk/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root-expected.txt
r143191 r143439 21 21 mouseover 22 22 @top (target: top) (related: shadow-host) 23 24 touchstart 25 @shadow-root (target: shadow-root) 26 @shadow-host (target: shadow-host) 27 @top (target: shadow-host) 28 29 mousewheel 30 @shadow-root (target: shadow-root) 31 @shadow-host (target: shadow-host) 32 @top (target: shadow-host) 23 33 PASS successfullyParsed is true 24 34 -
trunk/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root.html
r143191 r143439 30 30 eventSender.mouseMoveTo(x, y); 31 31 clearEventRecords(); 32 32 33 moveMouseOver(document.getElementById('top')); 33 34 debugDispatchedEvent('mouseout'); 34 35 debugDispatchedEvent('mouseover'); 36 37 touchLocation(host); 38 debugDispatchedEvent('touchstart'); 39 40 scrollMouseWheel(host); 41 debugDispatchedEvent('mousewheel'); 35 42 </script> 36 43 <script src="../../js/resources/js-test-post.js"></script> -
trunk/Source/WebCore/ChangeLog
r143438 r143439 1 2013-02-20 Mike West <mkwst@chromium.org> 2 3 Use EventPathWalker rather than parentNode() to normalize event targets in EventHandler. 4 https://bugs.webkit.org/show_bug.cgi?id=110037 5 6 Reviewed by Ryosuke Niwa. 7 8 We need to teach EventHandler about Shadow DOM in a few places in order 9 to ensure that we properly target events dispatched upon text nodes. 10 Rather than naively grabbing the text node's direct parent via 11 parentNode(), we need to account for the case in which the text node is 12 distributed[1] to an insertion point inside a shadow host. 13 EventPathWalker::parent understands these relationships, and should 14 be used when dealing with mouse, drag, and touch events. 15 16 [1]: http://www.w3.org/TR/shadow-dom/#dfn-distribution 17 18 * page/EventHandler.cpp: 19 (WebCore::EventHandler::handleMouseDraggedEvent): 20 (WebCore::EventHandler::handleTouchEvent): 21 (WebCore::EventHandler::passGestureEventToWidgetIfPossible): 22 (WebCore::EventHandler::updateDragAndDrop): 23 Refactor parentNode callsites to use EventPathWalker::parent(). 24 1 25 2013-02-20 Vsevolod Vlasov <vsevik@chromium.org> 2 26 -
trunk/Source/WebCore/page/EventHandler.cpp
r143422 r143439 708 708 RenderObject* renderer = targetNode->renderer(); 709 709 if (!renderer) { 710 renderer = targetNode->parentNode() ? targetNode->parentNode()->renderer() : 0; 710 Node* parent = EventPathWalker::parent(targetNode); 711 if (!parent) 712 return false; 713 714 renderer = parent->renderer(); 711 715 if (!renderer || !renderer->isListBox()) 712 716 return false; … … 1982 1986 RefPtr<Node> newTarget = mev.targetNode(); 1983 1987 if (newTarget && newTarget->isTextNode()) 1984 newTarget = newTarget->parentNode();1988 newTarget = EventPathWalker::parent(newTarget.get()); 1985 1989 1986 1990 m_autoscrollController->updateDragAndDrop(newTarget.get(), event.position(), event.timestamp()); … … 2635 2639 static const Node* closestScrollableNodeCandidate(const Node* node) 2636 2640 { 2637 for (const Node* scrollableNode = node; scrollableNode; scrollableNode = scrollableNode->parentNode()) { 2641 for (EventPathWalker walker(node); walker.node(); walker.moveToParent()) { 2642 Node* scrollableNode = walker.node(); 2638 2643 if (scrollableNode->isDocumentNode()) 2639 2644 return scrollableNode; … … 3870 3875 // Touch events should not go to text nodes 3871 3876 if (node->isTextNode()) 3872 node = node->parentNode();3877 node = EventPathWalker::parent(node); 3873 3878 3874 3879 if (InspectorInstrumentation::handleTouchEvent(m_frame->page(), node))
Note: See TracChangeset
for help on using the changeset viewer.