Index: LayoutTests/plugins/overlay-scrollbar-mouse-capture.html |
diff --git a/LayoutTests/plugins/overlay-scrollbar-mouse-capture.html b/LayoutTests/plugins/overlay-scrollbar-mouse-capture.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..03553149a73025ebe539525251379b9f18e26447 |
--- /dev/null |
+++ b/LayoutTests/plugins/overlay-scrollbar-mouse-capture.html |
@@ -0,0 +1,69 @@ |
+<!DOCTYPE html> |
+<html> |
ojan
2014/06/06 02:02:55
ditto
ojan
2014/06/06 02:02:55
ditto
raymes
2014/06/06 04:47:40
Done.
|
+<head> |
+ <script src="../resources/js-test.js"></script> |
+ <style> |
+ body { |
+ /* Hide the horizontal-scrollbar so that clicking right at the |
+ bottom of the vertical scrollbar will trigger a scroll */ |
+ overflow-x: hidden; |
+ } |
+ #container { |
+ /* The plugin is guaranteed not to be in the margin. */ |
+ margin-left: 10px; |
+ } |
+ </style> |
+</head> |
+<body> |
+ <div id="container"></div> |
+ <pre id="console"></pre> |
+</body> |
+<script> |
+ description('This tests whether scrolling still works correctly when an overlay scrollbar is over a plugin. The plugin should still receive mouse down/up events when clicking an overlay scrollbar. Scrolling should still work correctly too. However mouse capture should not be started on the plugin as this would interfere with events going to the scrollbar.'); |
+ if (window.testRunner) |
+ testRunner.dumpAsText(); |
+ if (window.internals) |
+ window.internals.settings.setOverlayScrollbarsEnabled(true); |
+ |
+ window.startLogging = false; |
ojan
2014/06/06 02:02:55
Here and elsewhere: We don't usually prefix global
raymes
2014/06/06 04:47:40
These don't even need to be globals actually.
|
+ window.eventHistory = []; |
+ |
+ var d = document.getElementById('container'); |
+ var plugin = document.createElement('object'); |
+ plugin.type = 'application/x-webkit-test-netscape'; |
+ plugin.width = window.innerWidth * 2; |
+ plugin.height = window.innerHeight * 2; |
+ plugin.addEventListener('mousedown', function(e) { |
+ startLogging = true; |
+ eventHistory.push('plugin.mousedown'); |
+ }); |
+ plugin.addEventListener('mouseup', function(e) { |
+ if (startLogging) |
+ eventHistory.push('plugin.mouseup'); |
+ }); |
+ plugin.addEventListener('mousemove', function(e) { |
+ if (startLogging) |
+ eventHistory.push('plugin.mousemove'); |
+ }); |
+ d.appendChild(plugin); |
+ |
+ if (window.eventSender) { |
+ // Mouse down on the scrollbar which is over the plugin. |
+ eventSender.mouseMoveTo(window.innerWidth - 1, |
+ window.innerHeight - 1); |
+ eventSender.mouseDown(); |
+ // Move outside the plugin, it shouldn't receive any events |
+ // because there shouldn't be any mouse capture. |
+ eventSender.mouseMoveTo(5, 5); |
+ // A mouse up will be received because when dragging off a |
+ // scrollbar and releasing, it dispatches an event to the last |
+ // element under the mouse. |
+ eventSender.mouseUp(); |
+ } |
+ |
+ shouldBe('window.eventHistory.length', '2'); |
+ shouldBe('window.eventHistory[0]', '"plugin.mousedown"'); |
+ shouldBe('window.eventHistory[1]', '"plugin.mouseup"'); |
+ shouldNotBe('window.scrollY', '0'); |
+</script> |
+</html> |