blob: 5024a38fcb0e39652c7a6da4d477d2813d07a42e [file] [log] [blame]
<!DOCTYPE html>
<script src="../../resources/js-test-pre.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>
if (window.testRunner)
testRunner.dumpAsText();
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);
}
function test(name, fn)
{
debug("<br>" + name);
fn();
}
description("This tests clicking scrollbars, which should only move the focus if an ancestor is mouse focusable.");
test("Focus should remain in the input", function() {
document.querySelector("input").focus();
clickVerticalScrollbar("section");
clickHorizontalScrollbar("section");
shouldBeEqualToString("document.activeElement.tagName", "INPUT");
});
test("Focus should move if ancestor is mouse focusable", function() {
document.querySelector("input").focus();
clickVerticalScrollbar("header");
shouldBeEqualToString("document.activeElement.tagName", "DIV");
document.querySelector("input").focus();
clickHorizontalScrollbar("header");
shouldBeEqualToString("document.activeElement.tagName", "DIV");
});
test("Focus should move if ancestor is content editable", function() {
document.querySelector("input").focus();
clickVerticalScrollbar("u");
shouldBeEqualToString("document.activeElement.tagName", "SPAN");
document.querySelector("input").focus();
clickHorizontalScrollbar("u");
shouldBeEqualToString("document.activeElement.tagName", "SPAN");
});
test("Form controls should move the focus", function() {
clickVerticalScrollbar("textarea");
shouldBeEqualToString("document.activeElement.tagName", "TEXTAREA");
clickVerticalScrollbar("select");
shouldBeEqualToString("document.activeElement.tagName", "SELECT");
});
test("Disabled form controls should not move the focus", function() {
document.querySelector("input").focus();
document.querySelector("select").disabled = true;
clickVerticalScrollbar("select");
shouldBeEqualToString("document.activeElement.tagName", "INPUT");
});
</script>
<script src="../../resources/js-test-post.js"></script>