summaryrefslogtreecommitdiffstats
path: root/third_party
diff options
context:
space:
mode:
Diffstat (limited to 'third_party')
-rw-r--r--third_party/WebKit/LayoutTests/ChangeLog22
-rw-r--r--third_party/WebKit/LayoutTests/fast/events/touch/gesture/context-menu-on-long-tap.html34
-rw-r--r--third_party/WebKit/LayoutTests/fast/events/touch/gesture/long-press-on-draggable-element-triggers-drag.html39
-rw-r--r--third_party/WebKit/LayoutTests/platform/chromium/fast/events/touch/gesture/context-menu-on-long-tap-expected.txt4
-rw-r--r--third_party/WebKit/LayoutTests/platform/chromium/fast/events/touch/gesture/long-press-on-draggable-element-triggers-drag-expected.txt5
-rw-r--r--third_party/WebKit/LayoutTests/touchadjustment/touch-links-longpress-expected.txt2
-rw-r--r--third_party/WebKit/LayoutTests/touchadjustment/touch-links-longpress.html7
-rw-r--r--third_party/WebKit/Source/WebCore/ChangeLog33
-rw-r--r--third_party/WebKit/Source/WebCore/page/EventHandler.cpp44
-rw-r--r--third_party/WebKit/Source/WebCore/page/EventHandler.h6
-rw-r--r--third_party/WebKit/Source/WebCore/page/Settings.in4
-rw-r--r--third_party/WebKit/Source/WebKit/chromium/ChangeLog22
-rw-r--r--third_party/WebKit/Source/WebKit/chromium/public/WebSettings.h1
-rw-r--r--third_party/WebKit/Source/WebKit/chromium/src/WebSettingsImpl.cpp5
-rw-r--r--third_party/WebKit/Source/WebKit/chromium/src/WebSettingsImpl.h1
-rw-r--r--third_party/WebKit/Tools/ChangeLog29
-rw-r--r--third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp19
-rw-r--r--third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h1
-rw-r--r--third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp10
-rw-r--r--third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h1
20 files changed, 277 insertions, 12 deletions
diff --git a/third_party/WebKit/LayoutTests/ChangeLog b/third_party/WebKit/LayoutTests/ChangeLog
index 6f8726b..98e9668 100644
--- a/third_party/WebKit/LayoutTests/ChangeLog
+++ b/third_party/WebKit/LayoutTests/ChangeLog
@@ -1,3 +1,25 @@
+2012-11-26 Varun Jain <varunjain@chromium.org>
+
+ LongPress and LongTap gestures should start drag/drop and open context menu respectively.
+ https://bugs.webkit.org/show_bug.cgi?id=101545
+
+ Reviewed by Antonio Gomes.
+
+ For LongPress, we simulate drag by sending a mouse down and mouse drag
+ events. If a drag is not started (because maybe there is no draggable
+ element), then we show context menu instead (which is the current
+ behavior for LongPress). For LongTap, we use the existing functions that
+ LongPress uses to summon the context menu. LongPress initiated drag and
+ drop can be enabled/disabled by the platform using the Setting
+ touchDragDropEnabled which is disabled by default.
+
+ * fast/events/touch/gesture/context-menu-on-long-tap.html: Added.
+ * fast/events/touch/gesture/long-press-on-draggable-element-triggers-drag.html: Added.
+ * platform/chromium/fast/events/touch/gesture/context-menu-on-long-tap-expected.txt: Added.
+ * platform/chromium/fast/events/touch/gesture/long-press-on-draggable-element-triggers-drag-expected.txt: Added.
+ * touchadjustment/touch-links-longpress-expected.txt:
+ * touchadjustment/touch-links-longpress.html:
+
2012-11-26 Roger Fong <roger_fong@apple.com>
Unreviewed. Skipping some compositing/tiling tests on Windows because tiled backing is not supported.
diff --git a/third_party/WebKit/LayoutTests/fast/events/touch/gesture/context-menu-on-long-tap.html b/third_party/WebKit/LayoutTests/fast/events/touch/gesture/context-menu-on-long-tap.html
new file mode 100644
index 0000000..48b62bd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/events/touch/gesture/context-menu-on-long-tap.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../../../js/resources/js-test-pre.js"></script>
+</head>
+<body onload="test()">
+<p>This test checks that the context menu is shown on long tap gesture.</p>
+<div id="text">Testing</div>
+<div id="result">FAIL</div>
+<script>
+function test()
+{
+ if (window.testRunner)
+ testRunner.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.gestureLongTap) {
+ eventSender.gestureLongTap(x, y);
+ } else {
+ debug("gestureLongTap not implemented by this platform");
+ return;
+ }
+}
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/fast/events/touch/gesture/long-press-on-draggable-element-triggers-drag.html b/third_party/WebKit/LayoutTests/fast/events/touch/gesture/long-press-on-draggable-element-triggers-drag.html
new file mode 100644
index 0000000..6a4433c4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/events/touch/gesture/long-press-on-draggable-element-triggers-drag.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../../../js/resources/js-test-pre.js"></script>
+</head>
+<body onload="test()">
+<p>This test checks that a long press gesture on a draggable element starts a drag/drop session.</p>
+<div id="text">Testing</div>
+<div id="result">FAIL</div>
+<div id="draggableDiv" draggable='true'>Drag me</div>
+<script>
+function test()
+{
+ if (window.testRunner)
+ testRunner.dumpAsText();
+
+ if (testRunner.setTouchDragDropEnabled)
+ testRunner.setTouchDragDropEnabled(true);
+
+ document.ondragstart = function() { document.getElementById("result").innerHTML = "PASS"; }
+
+ var dragableDiv = document.getElementById("draggableDiv");
+
+ var x = draggableDiv.offsetParent.offsetLeft + draggableDiv.offsetLeft + 4;
+ var y = draggableDiv.offsetParent.offsetTop + draggableDiv.offsetTop + draggableDiv.offsetHeight / 2;
+
+ if (!window.eventSender)
+ return;
+ if (eventSender.gestureLongPress) {
+ eventSender.gestureLongPress(x, y);
+ eventSender.mouseUp();
+ } else {
+ debug("gestureLongPress not implemented by this platform");
+ return;
+ }
+}
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/platform/chromium/fast/events/touch/gesture/context-menu-on-long-tap-expected.txt b/third_party/WebKit/LayoutTests/platform/chromium/fast/events/touch/gesture/context-menu-on-long-tap-expected.txt
new file mode 100644
index 0000000..d75735f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/chromium/fast/events/touch/gesture/context-menu-on-long-tap-expected.txt
@@ -0,0 +1,4 @@
+This test checks that the context menu is shown on long tap gesture.
+
+Testing
+PASS
diff --git a/third_party/WebKit/LayoutTests/platform/chromium/fast/events/touch/gesture/long-press-on-draggable-element-triggers-drag-expected.txt b/third_party/WebKit/LayoutTests/platform/chromium/fast/events/touch/gesture/long-press-on-draggable-element-triggers-drag-expected.txt
new file mode 100644
index 0000000..c52a45e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/chromium/fast/events/touch/gesture/long-press-on-draggable-element-triggers-drag-expected.txt
@@ -0,0 +1,5 @@
+This test checks that a long press gesture on a draggable element starts a drag/drop session.
+
+Testing
+PASS
+Drag me
diff --git a/third_party/WebKit/LayoutTests/touchadjustment/touch-links-longpress-expected.txt b/third_party/WebKit/LayoutTests/touchadjustment/touch-links-longpress-expected.txt
index 1951f97..c22036c 100644
--- a/third_party/WebKit/LayoutTests/touchadjustment/touch-links-longpress-expected.txt
+++ b/third_party/WebKit/LayoutTests/touchadjustment/touch-links-longpress-expected.txt
@@ -1,4 +1,4 @@
-Tests if a long press gesture on links will trigger a context menu when touch adjustment is used.
+Tests if a long press gesture on links will trigger a drag/drop when touch adjustment is used.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/touchadjustment/touch-links-longpress.html b/third_party/WebKit/LayoutTests/touchadjustment/touch-links-longpress.html
index dca907b..fda9c66 100644
--- a/third_party/WebKit/LayoutTests/touchadjustment/touch-links-longpress.html
+++ b/third_party/WebKit/LayoutTests/touchadjustment/touch-links-longpress.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
- <title>Touch Adjustment : Testing that a context menu will appear on a long press - bug 92914</title>
+ <title>Touch Adjustment : Testing that a drag/drop will start on a long press - bug 92914</title>
<script src="../fast/js/resources/js-test-pre.js"></script>
<script src="resources/touchadjustment.js"></script>
<style>
@@ -31,7 +31,7 @@
e[a] = document.getElementById(a);
});
- document.oncontextmenu = function() { debug("PASS"); }
+ document.ondragstart = function(e) { debug("PASS"); e.preventDefault();}
function testLongPress(touchpoint)
{
@@ -89,7 +89,8 @@
function runTests()
{
if (window.testRunner && window.internals && internals.touchNodeAdjustedToBestClickableNode) {
- description('Tests if a long press gesture on links will trigger a context menu when touch adjustment is used.');
+ testRunner.setTouchDragDropEnabled(true);
+ description('Tests if a long press gesture on links will trigger a drag/drop when touch adjustment is used.');
testDirectTouches();
testIndirectTouches();
e.sandbox.style.display = 'none';
diff --git a/third_party/WebKit/Source/WebCore/ChangeLog b/third_party/WebKit/Source/WebCore/ChangeLog
index d325ab2..931fd6c 100644
--- a/third_party/WebKit/Source/WebCore/ChangeLog
+++ b/third_party/WebKit/Source/WebCore/ChangeLog
@@ -1,3 +1,36 @@
+2012-11-26 Varun Jain <varunjain@chromium.org>
+
+ LongPress and LongTap gestures should start drag/drop and open context menu respectively.
+ https://bugs.webkit.org/show_bug.cgi?id=101545
+
+ Reviewed by Antonio Gomes.
+
+ For LongPress, we simulate drag by sending a mouse down and mouse drag
+ events. If a drag is not started (because maybe there is no draggable
+ element), then we show context menu instead (which is the current
+ behavior for LongPress). For LongTap, we use the existing functions that
+ LongPress uses to summon the context menu. LongPress initiated drag and
+ drop can be enabled/disabled by the platform using the Setting
+ touchDragDropEnabled which is disabled by default.
+
+ Tests: fast/events/touch/gesture/context-menu-on-long-tap.html
+ fast/events/touch/gesture/long-press-on-draggable-element-triggers-drag.html
+
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::EventHandler):
+ (WebCore::EventHandler::clear):
+ (WebCore::EventHandler::handleMouseDraggedEvent):
+ (WebCore::EventHandler::handleGestureEvent):
+ (WebCore::EventHandler::handleGestureLongPress):
+ (WebCore::EventHandler::handleGestureLongTap):
+ (WebCore):
+ (WebCore::EventHandler::handleGestureForTextSelectionOrContextMenu):
+ (WebCore::EventHandler::adjustGesturePosition):
+ (WebCore::EventHandler::handleDrag):
+ * page/EventHandler.h:
+ (EventHandler):
+ * page/Settings.in:
+
2012-11-26 Andreas Kling <akling@apple.com>
RenderStyle: Move 'list-style-image' to rare inherited data.
diff --git a/third_party/WebKit/Source/WebCore/page/EventHandler.cpp b/third_party/WebKit/Source/WebCore/page/EventHandler.cpp
index 8705af6..a213178 100644
--- a/third_party/WebKit/Source/WebCore/page/EventHandler.cpp
+++ b/third_party/WebKit/Source/WebCore/page/EventHandler.cpp
@@ -348,6 +348,8 @@ EventHandler::EventHandler(Frame* frame)
#endif
, m_mouseMovedDurationRunningAverage(0)
, m_baseEventType(PlatformEvent::NoType)
+ , m_didStartDrag(false)
+ , m_didLongPressInvokeContextMenu(false)
{
}
@@ -401,6 +403,8 @@ void EventHandler::clear()
#endif
m_mouseMovedDurationRunningAverage = 0;
m_baseEventType = PlatformEvent::NoType;
+ m_didStartDrag = false;
+ m_didLongPressInvokeContextMenu = false;
}
void EventHandler::nodeWillBeRemoved(Node* nodeToBeRemoved)
@@ -711,7 +715,7 @@ static bool canAutoscroll(RenderObject* renderer)
#if ENABLE(DRAG_SUPPORT)
bool EventHandler::handleMouseDraggedEvent(const MouseEventWithHitTestResults& event)
{
- if (handleDrag(event))
+ if (handleDrag(event, ShouldCheckDragHysteresis))
return true;
if (!m_mousePressed)
@@ -2596,6 +2600,8 @@ bool EventHandler::handleGestureEvent(const PlatformGestureEvent& gestureEvent)
return handleGestureTapDown();
case PlatformEvent::GestureLongPress:
return handleGestureLongPress(gestureEvent);
+ case PlatformEvent::GestureLongTap:
+ return handleGestureLongTap(gestureEvent);
case PlatformEvent::GestureTwoFingerTap:
return handleGestureTwoFingerTap(gestureEvent);
case PlatformEvent::GestureScrollEnd:
@@ -2647,9 +2653,35 @@ bool EventHandler::handleGestureTap(const PlatformGestureEvent& gestureEvent)
bool EventHandler::handleGestureLongPress(const PlatformGestureEvent& gestureEvent)
{
+#if ENABLE(DRAG_SUPPORT)
+ if (m_frame->settings() && m_frame->settings()->touchDragDropEnabled()) {
+ IntPoint adjustedPoint = gestureEvent.position();
+#if ENABLE(TOUCH_ADJUSTMENT)
+ adjustGesturePosition(gestureEvent, adjustedPoint);
+#endif
+ PlatformMouseEvent mouseDownEvent(adjustedPoint, gestureEvent.globalPosition(), LeftButton, PlatformEvent::MousePressed, 0, false, false, false, false, WTF::currentTime());
+ handleMousePressEvent(mouseDownEvent);
+ PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosition(), LeftButton, PlatformEvent::MouseMoved, 0, false, false, false, false, WTF::currentTime());
+ HitTestRequest request(HitTestRequest::ReadOnly);
+ MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragEvent);
+ m_didStartDrag = false;
+ handleDrag(mev, DontCheckDragHysteresis);
+ if (m_didStartDrag)
+ return true;
+ }
+#endif
return handleGestureForTextSelectionOrContextMenu(gestureEvent);
}
+bool EventHandler::handleGestureLongTap(const PlatformGestureEvent& gestureEvent)
+{
+#if ENABLE(CONTEXT_MENUS) && !OS(ANDROID)
+ if (!m_didLongPressInvokeContextMenu)
+ return sendContextMenuEventForGesture(gestureEvent);
+#endif
+ return false;
+}
+
bool EventHandler::handleGestureForTextSelectionOrContextMenu(const PlatformGestureEvent& gestureEvent)
{
#if OS(ANDROID)
@@ -2663,6 +2695,7 @@ bool EventHandler::handleGestureForTextSelectionOrContextMenu(const PlatformGest
}
#endif
#if ENABLE(CONTEXT_MENUS)
+ m_didLongPressInvokeContextMenu = (gestureEvent.type() == PlatformEvent::GestureLongPress);
return sendContextMenuEventForGesture(gestureEvent);
#else
return false;
@@ -2760,6 +2793,7 @@ bool EventHandler::adjustGesturePosition(const PlatformGestureEvent& gestureEven
bestClickableNodeForTouchPoint(gestureEvent.position(), IntSize(gestureEvent.area().width() / 2, gestureEvent.area().height() / 2), adjustedPoint, targetNode);
break;
case PlatformEvent::GestureLongPress:
+ case PlatformEvent::GestureLongTap:
case PlatformEvent::GestureTwoFingerTap:
bestContextMenuNodeForTouchPoint(gestureEvent.position(), IntSize(gestureEvent.area().width() / 2, gestureEvent.area().height() / 2), adjustedPoint, targetNode);
break;
@@ -3330,7 +3364,7 @@ static bool ExactlyOneBitSet(DragSourceAction n)
return n && !(n & (n - 1));
}
-bool EventHandler::handleDrag(const MouseEventWithHitTestResults& event)
+bool EventHandler::handleDrag(const MouseEventWithHitTestResults& event, CheckDragHysteresis checkDragHysteresis)
{
if (event.event().button() != LeftButton || event.event().type() != PlatformEvent::MouseMoved) {
// If we allowed the other side of the bridge to handle a drag
@@ -3409,7 +3443,7 @@ bool EventHandler::handleDrag(const MouseEventWithHitTestResults& event)
view->setCursor(pointerCursor());
}
- if (!dragHysteresisExceeded(event.event().position()))
+ if (checkDragHysteresis == ShouldCheckDragHysteresis && !dragHysteresisExceeded(event.event().position()))
return true;
// Once we're past the hysteresis point, we don't want to treat this gesture as a click
@@ -3460,11 +3494,11 @@ bool EventHandler::handleDrag(const MouseEventWithHitTestResults& event)
if (m_mouseDownMayStartDrag) {
Page* page = m_frame->page();
DragController* dragController = page ? page->dragController() : 0;
- bool startedDrag = dragController && dragController->startDrag(m_frame, dragState(), srcOp, event.event(), m_mouseDownPos);
+ m_didStartDrag = dragController && dragController->startDrag(m_frame, dragState(), srcOp, event.event(), m_mouseDownPos);
// In WebKit2 we could reenter this code and start another drag.
// On OS X this causes problems with the ownership of the pasteboard
// and the promised types.
- if (startedDrag) {
+ if (m_didStartDrag) {
m_mouseDownMayStartDrag = false;
return true;
}
diff --git a/third_party/WebKit/Source/WebCore/page/EventHandler.h b/third_party/WebKit/Source/WebCore/page/EventHandler.h
index fcbcd61..c15898a 100644
--- a/third_party/WebKit/Source/WebCore/page/EventHandler.h
+++ b/third_party/WebKit/Source/WebCore/page/EventHandler.h
@@ -91,6 +91,7 @@ extern const int GeneralDragHysteresis;
enum HitTestScrollbars { ShouldHitTestScrollbars, DontHitTestScrollbars };
enum AppendTrailingWhitespace { ShouldAppendTrailingWhitespace, DontAppendTrailingWhitespace };
+enum CheckDragHysteresis { ShouldCheckDragHysteresis, DontCheckDragHysteresis };
class EventHandler {
WTF_MAKE_NONCOPYABLE(EventHandler);
@@ -170,6 +171,7 @@ public:
bool handleGestureEvent(const PlatformGestureEvent&);
bool handleGestureTap(const PlatformGestureEvent&);
bool handleGestureLongPress(const PlatformGestureEvent&);
+ bool handleGestureLongTap(const PlatformGestureEvent&);
bool handleGestureTwoFingerTap(const PlatformGestureEvent&);
bool handleGestureScrollUpdate(const PlatformGestureEvent&);
bool isScrollbarHandlingGestures() const;
@@ -307,7 +309,7 @@ private:
void freeClipboard();
- bool handleDrag(const MouseEventWithHitTestResults&);
+ bool handleDrag(const MouseEventWithHitTestResults&, CheckDragHysteresis);
#endif
bool handleMouseUp(const MouseEventWithHitTestResults&);
#if ENABLE(DRAG_SUPPORT)
@@ -468,6 +470,8 @@ private:
double m_mouseMovedDurationRunningAverage;
PlatformEvent::Type m_baseEventType;
+ bool m_didStartDrag;
+ bool m_didLongPressInvokeContextMenu;
};
} // namespace WebCore
diff --git a/third_party/WebKit/Source/WebCore/page/Settings.in b/third_party/WebKit/Source/WebCore/page/Settings.in
index 88d51c4..126630c 100644
--- a/third_party/WebKit/Source/WebCore/page/Settings.in
+++ b/third_party/WebKit/Source/WebCore/page/Settings.in
@@ -164,3 +164,7 @@ frameFlatteningEnabled initial=false
allowCustomScrollbarInMainFrame initial=true
webSecurityEnabled initial=true
spatialNavigationEnabled initial=false
+
+# This setting adds a means to enable/disable touch initiated drag & drop. If
+# enabled, the user can initiate drag using long press.
+touchDragDropEnabled initial=false
diff --git a/third_party/WebKit/Source/WebKit/chromium/ChangeLog b/third_party/WebKit/Source/WebKit/chromium/ChangeLog
index 677e0b9..8496fca 100644
--- a/third_party/WebKit/Source/WebKit/chromium/ChangeLog
+++ b/third_party/WebKit/Source/WebKit/chromium/ChangeLog
@@ -1,3 +1,25 @@
+2012-11-26 Varun Jain <varunjain@chromium.org>
+
+ LongPress and LongTap gestures should start drag/drop and open context menu respectively.
+ https://bugs.webkit.org/show_bug.cgi?id=101545
+
+ Reviewed by Antonio Gomes.
+
+ For LongPress, we simulate drag by sending a mouse down and mouse drag
+ events. If a drag is not started (because maybe there is no draggable
+ element), then we show context menu instead (which is the current
+ behavior for LongPress). For LongTap, we use the existing functions that
+ LongPress uses to summon the context menu. LongPress initiated drag and
+ drop can be enabled/disabled by the platform using the Setting
+ touchDragDropEnabled which is disabled by default.
+
+ * public/WebSettings.h:
+ * src/WebSettingsImpl.cpp:
+ (WebKit::WebSettingsImpl::setTouchDragDropEnabled):
+ (WebKit):
+ * src/WebSettingsImpl.h:
+ (WebSettingsImpl):
+
2012-11-26 Yusuf Ozuysal <yusufo@google.com>
Add hasTouchEventhandlersAt to WebView API
diff --git a/third_party/WebKit/Source/WebKit/chromium/public/WebSettings.h b/third_party/WebKit/Source/WebKit/chromium/public/WebSettings.h
index 2d356fa..4c9d0cc 100644
--- a/third_party/WebKit/Source/WebKit/chromium/public/WebSettings.h
+++ b/third_party/WebKit/Source/WebKit/chromium/public/WebSettings.h
@@ -158,6 +158,7 @@ public:
virtual void setTextAutosizingEnabled(bool) = 0;
virtual void setTextAutosizingFontScaleFactor(float) = 0;
virtual void setTextDirectionSubmenuInclusionBehaviorNeverIncluded() = 0;
+ virtual void setTouchDragDropEnabled(bool) = 0;
virtual void setUnifiedTextCheckerEnabled(bool) = 0;
virtual void setUserStyleSheetLocation(const WebURL&) = 0;
virtual void setUsesEncodingDetector(bool) = 0;
diff --git a/third_party/WebKit/Source/WebKit/chromium/src/WebSettingsImpl.cpp b/third_party/WebKit/Source/WebKit/chromium/src/WebSettingsImpl.cpp
index 20fcc1b..164880a 100644
--- a/third_party/WebKit/Source/WebKit/chromium/src/WebSettingsImpl.cpp
+++ b/third_party/WebKit/Source/WebKit/chromium/src/WebSettingsImpl.cpp
@@ -346,6 +346,11 @@ void WebSettingsImpl::setTextDirectionSubmenuInclusionBehaviorNeverIncluded()
m_settings->setTextDirectionSubmenuInclusionBehavior(WebCore::TextDirectionSubmenuNeverIncluded);
}
+void WebSettingsImpl::setTouchDragDropEnabled(bool enabled)
+{
+ m_settings->setTouchDragDropEnabled(enabled);
+}
+
void WebSettingsImpl::setOfflineWebApplicationCacheEnabled(bool enabled)
{
m_settings->setOfflineWebApplicationCacheEnabled(enabled);
diff --git a/third_party/WebKit/Source/WebKit/chromium/src/WebSettingsImpl.h b/third_party/WebKit/Source/WebKit/chromium/src/WebSettingsImpl.h
index 98520ea..ab92562 100644
--- a/third_party/WebKit/Source/WebKit/chromium/src/WebSettingsImpl.h
+++ b/third_party/WebKit/Source/WebKit/chromium/src/WebSettingsImpl.h
@@ -153,6 +153,7 @@ public:
virtual void setTextAutosizingEnabled(bool);
virtual void setTextAutosizingFontScaleFactor(float);
virtual void setTextDirectionSubmenuInclusionBehaviorNeverIncluded();
+ virtual void setTouchDragDropEnabled(bool);
virtual void setUnifiedTextCheckerEnabled(bool);
virtual void setUserStyleSheetLocation(const WebURL&);
virtual void setUsesEncodingDetector(bool);
diff --git a/third_party/WebKit/Tools/ChangeLog b/third_party/WebKit/Tools/ChangeLog
index 76cf78b..4ed0253 100644
--- a/third_party/WebKit/Tools/ChangeLog
+++ b/third_party/WebKit/Tools/ChangeLog
@@ -1,3 +1,32 @@
+2012-11-26 Varun Jain <varunjain@chromium.org>
+
+ LongPress and LongTap gestures should start drag/drop and open context menu respectively.
+ https://bugs.webkit.org/show_bug.cgi?id=101545
+
+ Reviewed by Antonio Gomes.
+
+ For LongPress, we simulate drag by sending a mouse down and mouse drag
+ events. If a drag is not started (because maybe there is no draggable
+ element), then we show context menu instead (which is the current
+ behavior for LongPress). For LongTap, we use the existing functions that
+ LongPress uses to summon the context menu. LongPress initiated drag and
+ drop can be enabled/disabled by the platform using the Setting
+ touchDragDropEnabled which is disabled by default.
+
+ * DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
+ (WebTestRunner):
+ (WebTestRunner::EventSender::EventSender):
+ (WebTestRunner::EventSender::gestureLongTap):
+ (WebTestRunner::EventSender::gestureEvent):
+ * DumpRenderTree/chromium/TestRunner/src/EventSender.h:
+ (EventSender):
+ * DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
+ (WebTestRunner::TestRunner::TestRunner):
+ (WebTestRunner::TestRunner::setTouchDragDropEnabled):
+ (WebTestRunner):
+ * DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
+ (TestRunner):
+
2012-11-26 Christophe Dumez <christophe.dumez@intel.com>
[EFL][WK2] Add setting to enable / disable HTML5 local storage functionality
diff --git a/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp b/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp
index 171e25d..773a56b 100644
--- a/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp
+++ b/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp
@@ -296,6 +296,7 @@ EventSender::EventSender()
bindMethod("gestureTapDown", &EventSender::gestureTapDown);
bindMethod("gestureTapCancel", &EventSender::gestureTapCancel);
bindMethod("gestureLongPress", &EventSender::gestureLongPress);
+ bindMethod("gestureLongTap", &EventSender::gestureLongTap);
bindMethod("gestureTwoFingerTap", &EventSender::gestureTwoFingerTap);
bindMethod("zoomPageIn", &EventSender::zoomPageIn);
bindMethod("zoomPageOut", &EventSender::zoomPageOut);
@@ -1137,6 +1138,12 @@ void EventSender::gestureLongPress(const CppArgumentList& arguments, CppVariant*
gestureEvent(WebInputEvent::GestureLongPress, arguments);
}
+void EventSender::gestureLongTap(const CppArgumentList& arguments, CppVariant* result)
+{
+ result->setNull();
+ gestureEvent(WebInputEvent::GestureLongTap, arguments);
+}
+
void EventSender::gestureTwoFingerTap(const CppArgumentList& arguments, CppVariant* result)
{
result->setNull();
@@ -1206,8 +1213,16 @@ void EventSender::gestureEvent(WebInputEvent::Type type, const CppArgumentList&
event.x = point.x;
event.y = point.y;
if (arguments.size() >= 4) {
- event.data.tapDown.width = static_cast<float>(arguments[2].toDouble());
- event.data.tapDown.height = static_cast<float>(arguments[3].toDouble());
+ event.data.longPress.width = static_cast<float>(arguments[2].toDouble());
+ event.data.longPress.height = static_cast<float>(arguments[3].toDouble());
+ }
+ break;
+ case WebInputEvent::GestureLongTap:
+ event.x = point.x;
+ event.y = point.y;
+ if (arguments.size() >= 4) {
+ event.data.longPress.width = static_cast<float>(arguments[2].toDouble());
+ event.data.longPress.height = static_cast<float>(arguments[3].toDouble());
}
break;
case WebInputEvent::GestureTwoFingerTap:
diff --git a/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h b/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h
index c5d742b..b1da684 100644
--- a/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h
+++ b/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h
@@ -111,6 +111,7 @@ public:
void gestureTapDown(const CppArgumentList&, CppVariant*);
void gestureTapCancel(const CppArgumentList&, CppVariant*);
void gestureLongPress(const CppArgumentList&, CppVariant*);
+ void gestureLongTap(const CppArgumentList&, CppVariant*);
void gestureTwoFingerTap(const CppArgumentList&, CppVariant*);
void gestureEvent(WebKit::WebInputEvent::Type, const CppArgumentList&);
diff --git a/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp b/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp
index 3707892..8aa817a 100644
--- a/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp
+++ b/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp
@@ -98,6 +98,7 @@ TestRunner::TestRunner()
bindMethod("setPageVisibility", &TestRunner::setPageVisibility);
bindMethod("setTextDirection", &TestRunner::setTextDirection);
bindMethod("textSurroundingNode", &TestRunner::textSurroundingNode);
+ bindMethod("setTouchDragDropEnabled", &TestRunner::setTouchDragDropEnabled);
// Properties.
bindProperty("workerThreadCount", &TestRunner::workerThreadCount);
@@ -664,6 +665,15 @@ void TestRunner::textSurroundingNode(const CppArgumentList& arguments, CppVarian
result->set(surroundingText.textContent().utf8());
}
+void TestRunner::setTouchDragDropEnabled(const CppArgumentList& arguments, CppVariant* result)
+{
+ result->setNull();
+ if (arguments.size() != 1 || !arguments[0].isBool())
+ return;
+
+ m_webView->settings()->setTouchDragDropEnabled(arguments[0].toBoolean());
+}
+
void TestRunner::workerThreadCount(CppVariant* result)
{
result->set(static_cast<int>(WebWorkerInfo::dedicatedWorkerCount()));
diff --git a/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h b/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h
index f9e9f7a..4691e55 100644
--- a/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h
+++ b/third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h
@@ -147,6 +147,7 @@ private:
// point coordinates relative to the node and the fourth the maximum text
// length to retrieve.
void textSurroundingNode(const CppArgumentList&, CppVariant*);
+ void setTouchDragDropEnabled(const CppArgumentList&, CppVariant*);
///////////////////////////////////////////////////////////////////////////
// Properties