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)