Index: LayoutTests/fast/events/touch/gesture/gesture-tap-frame-scrollbar.html |
diff --git a/LayoutTests/fast/events/touch/gesture/gesture-tap-frame-scrollbar.html b/LayoutTests/fast/events/touch/gesture/gesture-tap-frame-scrollbar.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f8826183de6078ebeb6b91ed496549ebf7eb1d8b |
--- /dev/null |
+++ b/LayoutTests/fast/events/touch/gesture/gesture-tap-frame-scrollbar.html |
@@ -0,0 +1,77 @@ |
+<!DOCTYPE HTML> |
+<script src="../../../../resources/js-test.js"></script> |
+<style> |
+#target { |
+ width: 50px; |
+ height: 50px; |
+} |
+</style> |
+<iframe id="target" src="resources/event-delegator.html"></iframe> |
+<div id=console></div> |
+<script> |
+var scrollbarEventType; |
+ |
+function onEventInFrame(e) { |
+ debug("Received " + e.type + " in child frame"); |
+ if (e.type == scrollbarEventType) { |
+ debug('Adding scrollbars to iframe'); |
+ target.contentDocument.body.style.height = "500px"; |
+ } |
+} |
+ |
+function eventLogger(e) { |
+ debug("Received " + e.type + " in main frame"); |
+} |
+ |
+document.addEventListener('mousemove', eventLogger); |
+document.addEventListener('mousedown', eventLogger); |
+document.addEventListener('mouseup', eventLogger); |
+document.addEventListener('click', eventLogger); |
+ |
+description("Taps at a point that becomes a scrollbar (i.e. hit test with innerNode=null) during the tap and verifies we don't crash."); |
+ |
+// Tap at the right edge of the frame, where its scrollbar would live. |
+var rect = target.getBoundingClientRect(); |
+var point = { |
+ x: rect.right - 4, |
+ y: rect.top + rect.height / 2 |
+}; |
+ |
+function doTap(type) |
+{ |
+ return new Promise(function(resolve, reject) { |
+ if (type) { |
+ debug('Test case: Add scrollbars during ' + type); |
+ scrollbarEventType = type; |
+ target.contentDocument.body.style.height = "0"; |
+ } else { |
+ debug('Test case: Tap on consistent scrollbar'); |
+ } |
+ |
+ eventSender.gestureTapDown(point.x, point.y); |
+ eventSender.gestureShowPress(point.x, point.y); |
+ debug("Sending GestureTap"); |
+ eventSender.gestureTap(point.x, point.y); |
+ |
+ setTimeout(function() { |
+ debug(''); |
+ resolve(); |
+ }, 0); |
+ }); |
+} |
+ |
+if (window.eventSender) { |
+ jsTestIsAsync = true; |
+ target.onload = function() { |
+ doTap() |
+ .then(function() { return doTap('mousemove'); }) |
+ .then(function() { return doTap('mousedown'); }) |
+ .then(function() { return doTap('mouseup'); }) |
+ .catch(function(err) { |
+ testFailed("Promise rejected: " + err.message); |
+ }).then(finishJSTest); |
+ } |
+} else { |
+ debug("This test requires eventSender"); |
+} |
+</script> |