Changeset 242798 in webkit
- Timestamp:
- Mar 12, 2019 10:15:52 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 8 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r242794 r242798 1 2019-03-12 Zalan Bujtas <zalan@apple.com> 2 3 [Synthetic Click] Dispatch mouseout soon after mouseup 4 https://bugs.webkit.org/show_bug.cgi?id=195575 5 <rdar://problem/47093049> 6 7 Reviewed by Simon Fraser. 8 9 * fast/events/touch/ios/content-observation/mouse-out-event-should-fire-on-click-expected.txt: Added. 10 * fast/events/touch/ios/content-observation/mouse-out-event-should-fire-on-click.html: Added. 11 1 12 2019-03-12 Antti Koivisto <antti@apple.com> 2 13 -
trunk/LayoutTests/fast/events/touch/ios/content-observation/mouse-out-event-should-fire-on-click.html
r242797 r242798 1 1 <html> 2 2 <head> 3 <title>This tests th e case when visible content change happens on touchstart</title>3 <title>This tests that we fire mouseout on synthetic click</title> 4 4 <script src="../../../../../resources/basic-gestures.js"></script> 5 5 <style> … … 11 11 12 12 #becomesVisible { 13 display: none;14 13 width: 100px; 15 14 height: 100px; … … 36 35 </head> 37 36 <body onload="test()"> 38 <div id=tapthis>PASS if ' clicked' text is notshown below.</div>37 <div id=tapthis>PASS if 'mouseout' text is shown below.</div> 39 38 <div id=becomesVisible></div> 40 39 <pre id=result></pre> 41 40 <script> 42 tapthis.addEventListener("mouseover", function( event ) {43 becomesVisible.style.display = "block";44 if (window.testRunner)45 testRunner.notifyDone();46 }, false);47 41 48 42 becomesVisible.addEventListener("click", function( event ) { … … 50 44 }, false); 51 45 46 tapthis.addEventListener("mouseout", function( event ) { 47 result.innerHTML = result.innerHTML + " mouseout triggered "; 48 if (window.testRunner) 49 testRunner.notifyDone(); 50 }, false); 51 52 52 tapthis.addEventListener("click", function( event ) { 53 result.innerHTML = "clicked";53 result.innerHTML = result.innerHTML + " clicked "; 54 54 }, false); 55 55 </script> -
trunk/LayoutTests/fast/events/touch/ios/content-observation/visibility-change-happens-while-in-mousemoved.html
r242777 r242798 46 46 }, false); 47 47 48 becomesVisible.addEventListener("click", function( event ) { 48 tapthis.addEventListener("mouseout", function( event ) { 49 result.innerHTML = result.innerHTML + " mouseout should NOT be triggered "; 50 }, false); 51 52 becomesVisible.addEventListener("click", function( event ) { 49 53 result.innerHTML = "clicked hidden"; 50 54 }, false); -
trunk/Source/WebCore/ChangeLog
r242797 r242798 1 2019-03-12 Zalan Bujtas <zalan@apple.com> 2 3 [Synthetic Click] Dispatch mouseout soon after mouseup 4 https://bugs.webkit.org/show_bug.cgi?id=195575 5 <rdar://problem/47093049> 6 7 Reviewed by Simon Fraser. 8 9 Let's fire a mouseout event when a click is submitted as the result of a tap. It helps to dismiss content which would otherwise require you to move the mouse (cases like control bar on youtube.com). 10 11 Test: fast/events/touch/ios/content-observation/mouse-out-event-should-fire-on-click.html 12 13 * page/EventHandler.h: 14 * page/ios/EventHandlerIOS.mm: 15 (WebCore::EventHandler::dispatchFakeMouseOut): 16 1 17 2019-03-12 Ryosuke Niwa <rniwa@webkit.org> 2 18 -
trunk/Source/WebCore/page/EventHandler.cpp
r242777 r242798 1979 1979 if (onlyUpdateScrollbars) { 1980 1980 if (shouldSendMouseEventsToInactiveWindows()) 1981 updateMouseEventTargetNode(mouseEvent.targetNode(), platformMouseEvent, true);1981 updateMouseEventTargetNode(mouseEvent.targetNode(), platformMouseEvent, FireMouseOverOut::Yes); 1982 1982 1983 1983 return true; … … 1994 1994 if (newSubframe) { 1995 1995 // Update over/out state before passing the event to the subframe. 1996 updateMouseEventTargetNode(mouseEvent.targetNode(), platformMouseEvent, true);1996 updateMouseEventTargetNode(mouseEvent.targetNode(), platformMouseEvent, FireMouseOverOut::Yes); 1997 1997 1998 1998 // Event dispatch in updateMouseEventTargetNode may have caused the subframe of the target … … 2477 2477 } 2478 2478 2479 void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMouseEvent& platformMouseEvent, boolfireMouseOverOut)2479 void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMouseEvent& platformMouseEvent, FireMouseOverOut fireMouseOverOut) 2480 2480 { 2481 2481 Ref<Frame> protectedFrame(m_frame); … … 2495 2495 2496 2496 // Fire mouseout/mouseover if the mouse has shifted to a different node. 2497 if (fireMouseOverOut ) {2497 if (fireMouseOverOut == FireMouseOverOut::Yes) { 2498 2498 auto scrollableAreaForLastNode = enclosingScrollableArea(m_lastElementUnderMouse.get()); 2499 2499 auto scrollableAreaForNodeUnderMouse = enclosingScrollableArea(m_elementUnderMouse.get()); … … 2589 2589 view->disableLayerFlushThrottlingTemporarilyForInteraction(); 2590 2590 2591 updateMouseEventTargetNode(targetNode, platformMouseEvent, setUnder );2591 updateMouseEventTargetNode(targetNode, platformMouseEvent, setUnder ? FireMouseOverOut::Yes : FireMouseOverOut::No); 2592 2592 2593 2593 if (m_elementUnderMouse && !m_elementUnderMouse->dispatchMouseEvent(platformMouseEvent, eventType, clickCount)) -
trunk/Source/WebCore/page/EventHandler.h
r242777 r242798 242 242 #if PLATFORM(IOS_FAMILY) 243 243 void defaultTouchEventHandler(Node&, TouchEvent&); 244 WEBCORE_EXPORT void dispatchSyntheticMouseOut(const PlatformMouseEvent&); 244 245 #endif 245 246 … … 405 406 Node* nodeUnderMouse() const; 406 407 407 void updateMouseEventTargetNode(Node*, const PlatformMouseEvent&, bool fireMouseOverOut);408 void fireMouseOverOut(bool fireMouseOver = true, bool fireMouseOut = true, bool updateLastNodeUnderMouse = true);409 408 enum class FireMouseOverOut { No, Yes }; 409 void updateMouseEventTargetNode(Node*, const PlatformMouseEvent&, FireMouseOverOut); 410 410 411 MouseEventWithHitTestResults prepareMouseEvent(const HitTestRequest&, const PlatformMouseEvent&); 411 412 -
trunk/Source/WebCore/page/ios/EventHandlerIOS.mm
r242777 r242798 516 516 } 517 517 518 void EventHandler::dispatchSyntheticMouseOut(const PlatformMouseEvent& platformMouseEvent) 519 { 520 updateMouseEventTargetNode(nullptr, platformMouseEvent, FireMouseOverOut::Yes); 521 } 522 518 523 bool EventHandler::passMousePressEventToSubframe(MouseEventWithHitTestResults& mev, Frame* subframe) 519 524 { -
trunk/Source/WebKit/ChangeLog
r242796 r242798 1 2019-03-12 Zalan Bujtas <zalan@apple.com> 2 3 [Synthetic Click] Dispatch mouseout soon after mouseup 4 https://bugs.webkit.org/show_bug.cgi?id=195575 5 <rdar://problem/47093049> 6 7 Reviewed by Simon Fraser. 8 9 * WebProcess/WebPage/ios/WebPageIOS.mm: 10 (WebKit::WebPage::completeSyntheticClick): 11 1 12 2019-03-12 Zalan Bujtas <zalan@apple.com> 2 13 -
trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
r242796 r242798 641 641 elementDidRefocus(*newFocusedElement); 642 642 643 if (nodeRespondingToClick.document().frame()) 644 nodeRespondingToClick.document().frame()->eventHandler().dispatchSyntheticMouseOut(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::NoType, 0, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap)); 645 if (m_isClosed) 646 return; 647 643 648 if (!tapWasHandled || !nodeRespondingToClick.isElementNode()) 644 649 send(Messages::WebPageProxy::DidNotHandleTapAsClick(roundedIntPoint(location)));
Note: See TracChangeset
for help on using the changeset viewer.