Title: [189400] trunk
Revision
189400
Author
[email protected]
Date
2015-09-04 16:48:58 -0700 (Fri, 04 Sep 2015)

Log Message

Should have a test to make sure links don't navigate after a cancelled force 
click
https://bugs.webkit.org/show_bug.cgi?id=148846

Reviewed by Tim Horton.

Tools:

New EventSender function for a started then cancelled force click.
* WebKitTestRunner/EventSenderProxy.h:
* WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
* WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
(WTR::EventSendingController::mouseForceClick):
(WTR::EventSendingController::startAndCancelMouseForceClick):
(WTR::EventSendingController::mouseForceDown):
* WebKitTestRunner/InjectedBundle/EventSendingController.h:
* WebKitTestRunner/TestController.cpp:
(WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
* WebKitTestRunner/mac/EventSenderProxy.mm:
(WTR::EventSenderProxy::mouseForceClick):
(WTR::EventSenderProxy::startAndCancelMouseForceClick):
(WTR::EventSenderProxy::mouseForceDown):
(WTR::EventSenderProxy::mouseMoveTo):

LayoutTests:

* fast/events/cancelled-force-click-link-navigation-expected.txt: Added.
* fast/events/cancelled-force-click-link-navigation.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (189399 => 189400)


--- trunk/LayoutTests/ChangeLog	2015-09-04 23:35:30 UTC (rev 189399)
+++ trunk/LayoutTests/ChangeLog	2015-09-04 23:48:58 UTC (rev 189400)
@@ -1,3 +1,14 @@
+2015-09-04  Beth Dakin  <[email protected]>
+
+        Should have a test to make sure links don't navigate after a cancelled force 
+        click
+        https://bugs.webkit.org/show_bug.cgi?id=148846
+
+        Reviewed by Tim Horton.
+
+        * fast/events/cancelled-force-click-link-navigation-expected.txt: Added.
+        * fast/events/cancelled-force-click-link-navigation.html: Added.
+
 2015-09-04  Chris Dumez  <[email protected]>
 
         Unreviewed, add bug number for http/tests/w3c/html/semantics/text-level-semantics/the-wbr-element/wbr-element.html

Added: trunk/LayoutTests/fast/events/cancelled-force-click-link-navigation-expected.txt (0 => 189400)


--- trunk/LayoutTests/fast/events/cancelled-force-click-link-navigation-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/cancelled-force-click-link-navigation-expected.txt	2015-09-04 23:48:58 UTC (rev 189400)
@@ -0,0 +1,2 @@
+Link
+SUCCESS! We did not navigate to the link after starting a force click.

Added: trunk/LayoutTests/fast/events/cancelled-force-click-link-navigation.html (0 => 189400)


--- trunk/LayoutTests/fast/events/cancelled-force-click-link-navigation.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/cancelled-force-click-link-navigation.html	2015-09-04 23:48:58 UTC (rev 189400)
@@ -0,0 +1,49 @@
+<html>
+<head>
+<script>
+
+var didNavigate = false;
+
+window._onbeforeunload_ = function () {
+    didNavigate = true;
+};
+
+function checkForDone()
+{
+    if (!didNavigate) {
+        var console = document.getElementById("console");
+        console.innerHTML = "SUCCESS! We did not navigate to the link after starting a force click.";
+    }
+
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+
+function spinRunLoop()
+{
+    window.setTimeout(checkForDone, 0);
+}
+
+function startTest()
+{
+    if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+
+    if (window.eventSender) {
+        eventSender.mouseMoveTo(16, 16);
+        eventSender.startAndCancelMouseForceClick();
+        window.setTimeout(spinRunLoop, 0);
+    }
+}
+</script>
+</head>
+
+<body _onload_="startTest()">
+
+<a href=""
+<pre id="console">Failed. This test must be run in the test harness. To run the test manually, start force clicking on the link, but don't click hard enough to pop open the preview. Then make sure that the original document does not navigate anywhere.</pre>
+
+</body>
+</html>

Modified: trunk/Tools/ChangeLog (189399 => 189400)


--- trunk/Tools/ChangeLog	2015-09-04 23:35:30 UTC (rev 189399)
+++ trunk/Tools/ChangeLog	2015-09-04 23:48:58 UTC (rev 189400)
@@ -1,3 +1,27 @@
+2015-09-04  Beth Dakin  <[email protected]>
+
+        Should have a test to make sure links don't navigate after a cancelled force 
+        click
+        https://bugs.webkit.org/show_bug.cgi?id=148846
+
+        Reviewed by Tim Horton.
+
+        New EventSender function for a started then cancelled force click.
+        * WebKitTestRunner/EventSenderProxy.h:
+        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
+        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
+        (WTR::EventSendingController::mouseForceClick):
+        (WTR::EventSendingController::startAndCancelMouseForceClick):
+        (WTR::EventSendingController::mouseForceDown):
+        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
+        * WebKitTestRunner/TestController.cpp:
+        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
+        * WebKitTestRunner/mac/EventSenderProxy.mm:
+        (WTR::EventSenderProxy::mouseForceClick):
+        (WTR::EventSenderProxy::startAndCancelMouseForceClick):
+        (WTR::EventSenderProxy::mouseForceDown):
+        (WTR::EventSenderProxy::mouseMoveTo):
+
 2015-09-04  Tim Horton  <[email protected]>
 
         Add a test for r179736 (programmatic navigation during swipe causing a crash)

Modified: trunk/Tools/WebKitTestRunner/EventSenderProxy.h (189399 => 189400)


--- trunk/Tools/WebKitTestRunner/EventSenderProxy.h	2015-09-04 23:35:30 UTC (rev 189399)
+++ trunk/Tools/WebKitTestRunner/EventSenderProxy.h	2015-09-04 23:48:58 UTC (rev 189400)
@@ -67,6 +67,7 @@
     void mouseForceUp();
     void mouseForceChanged(float);
     void mouseForceClick();
+    void startAndCancelMouseForceClick();
     void mouseMoveTo(double x, double y);
     void mouseScrollBy(int x, int y);
     void mouseScrollByWithWheelAndMomentumPhases(int x, int y, int phase, int momentum);

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl (189399 => 189400)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl	2015-09-04 23:35:30 UTC (rev 189399)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl	2015-09-04 23:48:58 UTC (rev 189400)
@@ -28,6 +28,7 @@
     void mouseUp(long buttonNumber, object modifierArray);
     void mouseMoveTo(long x, long y);
     void mouseForceClick();
+    void startAndCancelMouseForceClick();
     void mouseForceDown();
     void mouseForceUp();
     void mouseForceChanged(double force);

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp (189399 => 189400)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp	2015-09-04 23:35:30 UTC (rev 189399)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp	2015-09-04 23:48:58 UTC (rev 189400)
@@ -267,6 +267,18 @@
     WKBundlePagePostSynchronousMessageForTesting(InjectedBundle::singleton().page()->page(), EventSenderMessageName.get(), EventSenderMessageBody.get(), 0);
 }
 
+void EventSendingController::startAndCancelMouseForceClick()
+{
+    WKRetainPtr<WKStringRef> EventSenderMessageName(AdoptWK, WKStringCreateWithUTF8CString("EventSender"));
+    WKRetainPtr<WKMutableDictionaryRef> EventSenderMessageBody(AdoptWK, WKMutableDictionaryCreate());
+
+    WKRetainPtr<WKStringRef> subMessageKey(AdoptWK, WKStringCreateWithUTF8CString("SubMessage"));
+    WKRetainPtr<WKStringRef> subMessageName(AdoptWK, WKStringCreateWithUTF8CString("StartAndCancelMouseForceClick"));
+    WKDictionarySetItem(EventSenderMessageBody.get(), subMessageKey.get(), subMessageName.get());
+
+    WKBundlePagePostSynchronousMessageForTesting(InjectedBundle::singleton().page()->page(), EventSenderMessageName.get(), EventSenderMessageBody.get(), 0);
+}
+
 void EventSendingController::mouseForceDown()
 {
     WKRetainPtr<WKStringRef> EventSenderMessageName(AdoptWK, WKStringCreateWithUTF8CString("EventSender"));

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.h (189399 => 189400)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.h	2015-09-04 23:35:30 UTC (rev 189399)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.h	2015-09-04 23:48:58 UTC (rev 189400)
@@ -47,6 +47,7 @@
     void mouseUp(int button, JSValueRef modifierArray);
     void mouseMoveTo(int x, int y);
     void mouseForceClick();
+    void startAndCancelMouseForceClick();
     void mouseForceDown();
     void mouseForceUp();
     void mouseForceChanged(double force);

Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (189399 => 189400)


--- trunk/Tools/WebKitTestRunner/TestController.cpp	2015-09-04 23:35:30 UTC (rev 189399)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp	2015-09-04 23:48:58 UTC (rev 189400)
@@ -1216,6 +1216,11 @@
             return 0;
         }
 
+        if (WKStringIsEqualToUTF8CString(subMessageName, "StartAndCancelMouseForceClick")) {
+            m_eventSenderProxy->startAndCancelMouseForceClick();
+            return 0;
+        }
+
         if (WKStringIsEqualToUTF8CString(subMessageName, "MouseForceDown")) {
             m_eventSenderProxy->mouseForceDown();
             return 0;

Modified: trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm (189399 => 189400)


--- trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm	2015-09-04 23:35:30 UTC (rev 189399)
+++ trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm	2015-09-04 23:48:58 UTC (rev 189400)
@@ -467,6 +467,42 @@
 #pragma clang diagnostic pop
 }
 
+void EventSenderProxy::startAndCancelMouseForceClick()
+{
+    sendMouseDownToStartPressureEvents();
+
+    RetainPtr<NSEvent> beginPressure = beginPressureEvent(1);
+    RetainPtr<NSEvent> increasingPressure = pressureChangeEvent(1, PressureChangeDirection::Increasing);
+    RetainPtr<NSEvent> releasingPressure = pressureChangeEvent(1, PressureChangeDirection::Decreasing);
+    NSEvent *mouseUp = [NSEvent mouseEventWithType:NSLeftMouseUp
+        location:NSMakePoint(m_position.x, m_position.y)
+        modifierFlags:0
+        timestamp:absoluteTimeForEventTime(currentEventTime())
+        windowNumber:[m_testController->mainWebView()->platformWindow() windowNumber]
+        context:[NSGraphicsContext currentContext]
+        eventNumber:++eventNumber
+        clickCount:m_clickCount
+        pressure:0.0];
+
+    NSView *targetView = [m_testController->mainWebView()->platformView() hitTest:[beginPressure.get() locationInWindow]];
+    targetView = targetView ? targetView : m_testController->mainWebView()->platformView();
+    ASSERT(targetView);
+
+    // Since AppKit does not implement forceup/down as mouse events, we need to send two pressure events to detect
+    // the change in stage that marks those moments.
+    handleForceEventSynchronously(beginPressure.get());
+    handleForceEventSynchronously(increasingPressure.get());
+    handleForceEventSynchronously(releasingPressure.get());
+    [NSApp sendEvent:mouseUp];
+
+    [NSApp _setCurrentEvent:nil];
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wnonnull"
+    // WKView caches the most recent pressure event, so send it a nil event to clear the cache.
+    [targetView pressureChangeWithEvent:nil];
+#pragma clang diagnostic pop
+}
+
 void EventSenderProxy::mouseForceDown()
 {
     sendMouseDownToStartPressureEvents();
@@ -576,6 +612,10 @@
 void EventSenderProxy::mouseForceClick()
 {
 }
+
+void EventSenderProxy::startAndCancelMouseForceClick()
+{
+}
 #endif // defined(__LP64__) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101003
 
 void EventSenderProxy::mouseMoveTo(double x, double y)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to