Title: [116671] trunk
Revision
116671
Author
[email protected]
Date
2012-05-10 11:42:54 -0700 (Thu, 10 May 2012)

Log Message

[chromium] Trigger context menu for long press gesture
https://bugs.webkit.org/show_bug.cgi?id=85919

Patch by Varun Jain <[email protected]> on 2012-05-10
Reviewed by Adam Barth.

Source/WebCore:

Test: fast/events/touch/gesture/context-menu-on-long-press.html

* page/EventHandler.cpp:
(WebCore):
(WebCore::EventHandler::sendContextMenuEventForGesture):
* page/EventHandler.h:
(EventHandler):

Source/WebKit/chromium:

* src/PageWidgetDelegate.cpp:
(WebKit::PageWidgetDelegate::handleInputEvent):
* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::handleGestureEvent):

Tools:

* DumpRenderTree/chromium/EventSender.cpp:
(EventSender::EventSender):
(EventSender::gestureLongPress):
(EventSender::gestureEvent):
* DumpRenderTree/chromium/EventSender.h:
(EventSender):

LayoutTests:

* fast/events/touch/gesture/context-menu-on-long-press.html: Added.
* platform/chromium/fast/events/touch/gesture/context-menu-on-long-press-expected.txt: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (116670 => 116671)


--- trunk/LayoutTests/ChangeLog	2012-05-10 18:40:29 UTC (rev 116670)
+++ trunk/LayoutTests/ChangeLog	2012-05-10 18:42:54 UTC (rev 116671)
@@ -1,3 +1,13 @@
+2012-05-10  Varun Jain  <[email protected]>
+
+        [chromium] Trigger context menu for long press gesture
+        https://bugs.webkit.org/show_bug.cgi?id=85919
+
+        Reviewed by Adam Barth.
+
+        * fast/events/touch/gesture/context-menu-on-long-press.html: Added.
+        * platform/chromium/fast/events/touch/gesture/context-menu-on-long-press-expected.txt: Added.
+
 2012-05-10  Abhishek Arya  <[email protected]>
 
         Crash in ApplyStyleCommand::joinChildTextNodes.

Added: trunk/LayoutTests/fast/events/touch/gesture/context-menu-on-long-press.html (0 => 116671)


--- trunk/LayoutTests/fast/events/touch/gesture/context-menu-on-long-press.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/gesture/context-menu-on-long-press.html	2012-05-10 18:42:54 UTC (rev 116671)
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src=""
+</head>
+<body _onload_="test()">
+<p>This test checks that the context menu is shown on long press gesture.</p>
+<div id="text">Testing</div>
+<div id="result">FAIL</div>
+<script>
+function test()
+{
+    if (window.layoutTestController)
+        layoutTestController.dumpAsText();
+
+    document._oncontextmenu_ = function() { document.getElementById("result").innerHTML = "PASS"; }
+
+    var text = document.getElementById("text");
+
+    var x = text.offsetParent.offsetLeft + text.offsetLeft + 4;
+    var y = text.offsetParent.offsetTop + text.offsetTop + text.offsetHeight / 2;
+
+    if (!window.eventSender)
+        return;
+    if (eventSender.gestureLongPress) {
+        eventSender.gestureLongPress(x, y);
+    } else {
+        debug("gestureLongPress not implemented by this platform");
+        return;
+    }
+}
+</script>
+</body>
+</html>

Added: trunk/LayoutTests/platform/chromium/fast/events/touch/gesture/context-menu-on-long-press-expected.txt (0 => 116671)


--- trunk/LayoutTests/platform/chromium/fast/events/touch/gesture/context-menu-on-long-press-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium/fast/events/touch/gesture/context-menu-on-long-press-expected.txt	2012-05-10 18:42:54 UTC (rev 116671)
@@ -0,0 +1,4 @@
+This test checks that the context menu is shown on long press gesture.
+
+Testing
+PASS

Modified: trunk/Source/WebCore/ChangeLog (116670 => 116671)


--- trunk/Source/WebCore/ChangeLog	2012-05-10 18:40:29 UTC (rev 116670)
+++ trunk/Source/WebCore/ChangeLog	2012-05-10 18:42:54 UTC (rev 116671)
@@ -1,3 +1,18 @@
+2012-05-10  Varun Jain  <[email protected]>
+
+        [chromium] Trigger context menu for long press gesture
+        https://bugs.webkit.org/show_bug.cgi?id=85919
+
+        Reviewed by Adam Barth.
+
+        Test: fast/events/touch/gesture/context-menu-on-long-press.html
+
+        * page/EventHandler.cpp:
+        (WebCore):
+        (WebCore::EventHandler::sendContextMenuEventForGesture):
+        * page/EventHandler.h:
+        (EventHandler):
+
 2012-05-10  Abhishek Arya  <[email protected]>
 
         Crash in ApplyStyleCommand::joinChildTextNodes.

Modified: trunk/Source/WebCore/page/EventHandler.cpp (116670 => 116671)


--- trunk/Source/WebCore/page/EventHandler.cpp	2012-05-10 18:40:29 UTC (rev 116670)
+++ trunk/Source/WebCore/page/EventHandler.cpp	2012-05-10 18:42:54 UTC (rev 116671)
@@ -2599,6 +2599,18 @@
     return dispatchMouseEvent(eventNames().contextmenuEvent, targetNode, true, 0, mouseEvent, false);
 }
 
+#if ENABLE(GESTURE_EVENTS)
+bool EventHandler::sendContextMenuEventForGesture(const PlatformGestureEvent& event)
+{
+#if OS(WINDOWS)
+    PlatformEvent::Type eventType = PlatformEvent::MouseReleased;
+#else
+    PlatformEvent::Type eventType = PlatformEvent::MousePressed;
+#endif
+    PlatformMouseEvent mouseEvent(event.position(), event.globalPosition(), RightButton, eventType, 1, false, false, false, false, WTF::currentTime());
+    return sendContextMenuEvent(mouseEvent);
+}
+#endif // ENABLE(GESTURE_EVENTS)
 #endif // ENABLE(CONTEXT_MENUS)
 
 void EventHandler::scheduleHoverStateUpdate()

Modified: trunk/Source/WebCore/page/EventHandler.h (116670 => 116671)


--- trunk/Source/WebCore/page/EventHandler.h	2012-05-10 18:40:29 UTC (rev 116670)
+++ trunk/Source/WebCore/page/EventHandler.h	2012-05-10 18:42:54 UTC (rev 116671)
@@ -175,7 +175,10 @@
 #if ENABLE(CONTEXT_MENUS)
     bool sendContextMenuEvent(const PlatformMouseEvent&);
     bool sendContextMenuEventForKey();
+#if ENABLE(GESTURE_EVENTS)
+    bool sendContextMenuEventForGesture(const PlatformGestureEvent&);
 #endif
+#endif
 
     void setMouseDownMayStartAutoscroll() { m_mouseDownMayStartAutoscroll = true; }
 

Modified: trunk/Source/WebKit/chromium/ChangeLog (116670 => 116671)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-05-10 18:40:29 UTC (rev 116670)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-05-10 18:42:54 UTC (rev 116671)
@@ -1,3 +1,15 @@
+2012-05-10  Varun Jain  <[email protected]>
+
+        [chromium] Trigger context menu for long press gesture
+        https://bugs.webkit.org/show_bug.cgi?id=85919
+
+        Reviewed by Adam Barth.
+
+        * src/PageWidgetDelegate.cpp:
+        (WebKit::PageWidgetDelegate::handleInputEvent):
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::handleGestureEvent):
+
 2012-05-10  Mark Pilgrim  <[email protected]>
 
         [Chromium] Remove dead code behind unused WEBKIT_USING_CG

Modified: trunk/Source/WebKit/chromium/src/PageWidgetDelegate.cpp (116670 => 116671)


--- trunk/Source/WebKit/chromium/src/PageWidgetDelegate.cpp	2012-05-10 18:40:29 UTC (rev 116670)
+++ trunk/Source/WebKit/chromium/src/PageWidgetDelegate.cpp	2012-05-10 18:42:54 UTC (rev 116671)
@@ -153,6 +153,7 @@
     case WebInputEvent::GestureTap:
     case WebInputEvent::GestureTapDown:
     case WebInputEvent::GestureDoubleTap:
+    case WebInputEvent::GestureLongPress:
         return handler.handleGestureEvent(*static_cast<const WebGestureEvent*>(&event));
 #endif
 

Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.cpp (116670 => 116671)


--- trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2012-05-10 18:40:29 UTC (rev 116670)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2012-05-10 18:42:54 UTC (rev 116671)
@@ -658,12 +658,22 @@
         }
         return gestureHandled;
     }
+    case WebInputEvent::GestureLongPress: {
+        if (!mainFrameImpl() || !mainFrameImpl()->frameView())
+            return false;
+
+        m_page->contextMenuController()->clearContextMenu();
+        m_contextMenuAllowed = true;
+        PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event);
+        bool handled = mainFrameImpl()->frame()->eventHandler()->sendContextMenuEventForGesture(platformEvent);
+        m_contextMenuAllowed = false;
+        return handled;
+    }
     case WebInputEvent::GestureScrollBegin:
     case WebInputEvent::GestureScrollEnd:
     case WebInputEvent::GestureScrollUpdate:
     case WebInputEvent::GestureTapDown:
     case WebInputEvent::GestureDoubleTap:
-    case WebInputEvent::GestureLongPress:
     case WebInputEvent::GesturePinchBegin:
     case WebInputEvent::GesturePinchEnd:
     case WebInputEvent::GesturePinchUpdate: {

Modified: trunk/Tools/ChangeLog (116670 => 116671)


--- trunk/Tools/ChangeLog	2012-05-10 18:40:29 UTC (rev 116670)
+++ trunk/Tools/ChangeLog	2012-05-10 18:42:54 UTC (rev 116671)
@@ -1,3 +1,17 @@
+2012-05-10  Varun Jain  <[email protected]>
+
+        [chromium] Trigger context menu for long press gesture
+        https://bugs.webkit.org/show_bug.cgi?id=85919
+
+        Reviewed by Adam Barth.
+
+        * DumpRenderTree/chromium/EventSender.cpp:
+        (EventSender::EventSender):
+        (EventSender::gestureLongPress):
+        (EventSender::gestureEvent):
+        * DumpRenderTree/chromium/EventSender.h:
+        (EventSender):
+
 2012-05-10  Takashi Toyoshima  <[email protected]>
 
         don't use autoinstall to import pywebsocket but check it in WebKit directly.

Modified: trunk/Tools/DumpRenderTree/chromium/EventSender.cpp (116670 => 116671)


--- trunk/Tools/DumpRenderTree/chromium/EventSender.cpp	2012-05-10 18:40:29 UTC (rev 116670)
+++ trunk/Tools/DumpRenderTree/chromium/EventSender.cpp	2012-05-10 18:42:54 UTC (rev 116671)
@@ -286,6 +286,7 @@
     bindMethod("gestureScrollFirstPoint", &EventSender::gestureScrollFirstPoint);
     bindMethod("gestureScrollUpdate", &EventSender::gestureScrollUpdate);
     bindMethod("gestureTap", &EventSender::gestureTap);
+    bindMethod("gestureLongPress", &EventSender::gestureLongPress);
     bindMethod("zoomPageIn", &EventSender::zoomPageIn);
     bindMethod("zoomPageOut", &EventSender::zoomPageOut);
     bindMethod("scalePageBy", &EventSender::scalePageBy);
@@ -1092,6 +1093,12 @@
     gestureEvent(WebInputEvent::GestureTap, arguments);
 }
 
+void EventSender::gestureLongPress(const CppArgumentList& arguments, CppVariant* result)
+{
+    result->setNull();
+    gestureEvent(WebInputEvent::GestureLongPress, arguments);
+}
+
 void EventSender::gestureScrollFirstPoint(const CppArgumentList& arguments, CppVariant* result)
 {
     result->setNull();
@@ -1141,6 +1148,10 @@
         event.x = point.x;
         event.y = point.y;
         break;
+    case WebInputEvent::GestureLongPress:
+        event.x = point.x;
+        event.y = point.y;
+        break;
     default:
         ASSERT_NOT_REACHED();
     }

Modified: trunk/Tools/DumpRenderTree/chromium/EventSender.h (116670 => 116671)


--- trunk/Tools/DumpRenderTree/chromium/EventSender.h	2012-05-10 18:40:29 UTC (rev 116670)
+++ trunk/Tools/DumpRenderTree/chromium/EventSender.h	2012-05-10 18:42:54 UTC (rev 116671)
@@ -104,6 +104,7 @@
     void gestureScrollFirstPoint(const CppArgumentList&, CppVariant*);
     void gestureScrollUpdate(const CppArgumentList&, CppVariant*);
     void gestureTap(const CppArgumentList&, CppVariant*);
+    void gestureLongPress(const CppArgumentList&, CppVariant*);
     void gestureEvent(WebKit::WebInputEvent::Type, const CppArgumentList&);
 
     // Unimplemented stubs
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to