| <!DOCTYPE html> |
| |
| <title> |
| This tests clicking scrollbars, which should only move the focus if an ancestor is mouse focusable. |
| </title> |
| |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| |
| <style> |
| /* Float everything so they fit inside the viewport for using eventSender to click */ |
| section, footer, span, textarea, select { float: left; } |
| </style> |
| |
| <footer> |
| <input> |
| </footer> |
| |
| <section style="height: 100px; width: 100px; overflow: scroll;"></section> |
| |
| <div tabindex="1"> |
| <header style="height: 100px; width: 100px; overflow: scroll;"></header> |
| </div> |
| |
| <span contenteditable> |
| <u style="height: 100px; width: 100px; overflow: scroll; display: block;"></u> |
| </span> |
| |
| <textarea rows="5"> |
| Text. |
| Text. |
| Text. |
| Text. |
| Text. |
| Text. |
| Text. |
| Text. |
| Text. |
| Text. |
| </textarea> |
| |
| <select multiple> |
| <option> Text. |
| <option> Text. |
| <option> Text. |
| <option> Text. |
| <option> Text. |
| <option> Text. |
| <option> Text. |
| </select> |
| |
| <script> |
| function click(x, y) |
| { |
| if (window.eventSender) { |
| eventSender.mouseMoveTo(x, y); |
| eventSender.mouseDown(); |
| eventSender.mouseUp(); |
| } |
| } |
| |
| function clickVerticalScrollbar(type) |
| { |
| var element = document.querySelector(type); |
| click(element.offsetLeft + element.offsetWidth - 5, element.offsetTop + 5); |
| } |
| |
| function clickHorizontalScrollbar(type) |
| { |
| var element = document.querySelector(type); |
| click(element.offsetLeft + 5, element.offsetTop + element.offsetHeight - 5); |
| } |
| |
| test(function() { |
| document.querySelector("input").focus(); |
| clickVerticalScrollbar("section"); |
| clickHorizontalScrollbar("section"); |
| assert_equals(document.activeElement.tagName, "INPUT"); |
| }, "Focus should remain in the input"); |
| |
| test(function() { |
| document.querySelector("input").focus(); |
| clickVerticalScrollbar("header"); |
| assert_equals(document.activeElement.tagName, "DIV"); |
| document.querySelector("input").focus(); |
| clickHorizontalScrollbar("header"); |
| assert_equals(document.activeElement.tagName, "DIV"); |
| }, "Focus should move if ancestor is mouse focusable"); |
| |
| test(function() { |
| document.querySelector("input").focus(); |
| clickVerticalScrollbar("u"); |
| assert_equals(document.activeElement.tagName, "SPAN"); |
| document.querySelector("input").focus(); |
| clickHorizontalScrollbar("u"); |
| assert_equals(document.activeElement.tagName, "SPAN"); |
| }, "Focus should move if ancestor is content editable"); |
| |
| test(function() { |
| clickVerticalScrollbar("textarea"); |
| assert_equals(document.activeElement.tagName, "TEXTAREA"); |
| clickVerticalScrollbar("select"); |
| assert_equals(document.activeElement.tagName, "SELECT"); |
| }, "Form controls should move the focus"); |
| |
| test(function() { |
| document.querySelector("input").focus(); |
| document.querySelector("select").disabled = true; |
| clickVerticalScrollbar("select"); |
| assert_equals(document.activeElement.tagName, "INPUT"); |
| }, "Disabled form controls should not move the focus"); |
| </script> |
| |