blob: 44f2779156a3ddcd9de577e29f7e991ba4cb3360 [file] [log] [blame]
<!DOCTYPE html>
<head>
<script src="../resources/js-test.js"></script>
</head>
<body>
<p id="description"></p>
<div id="container" style="width: 100px; overflow: scroll">
<div style="border: 1px solid #000; width: 1000px; height: 5000px;">5000-pixel box</div>
<button id="target1">Target</button>
<button id="target2">Target</button>
<button id="target3">Target</button>
<div style="border: 1px solid #000; width: 1000px; height: 5000px;">5000-pixel box</div>
</div>
<div id="console"></div>
<script>
description("Tests that scrolling to make an element visible works when the inner scroll container doesn't need to be scrolled, but the other one does.");
function runTest() {
window.container = document.getElementById("container");
window.target1 = document.getElementById("target1");
window.target2 = document.getElementById("target2");
window.target3 = document.getElementById("target3");
var target1AccessibleObject;
var target2AccessibleObject;
var target3AccessibleObject;
if (window.accessibilityController) {
target1.focus();
target1AccessibleObject = accessibilityController.focusedElement;
target2.focus();
target2AccessibleObject = accessibilityController.focusedElement;
target3.focus();
target3AccessibleObject = accessibilityController.focusedElement;
}
// Reset the initial scroll positions (since calling focus() can scroll the page too).
window.scrollTo(0, 0);
container.scrollTop = 0;
shouldBeZero("window.pageYOffset");
shouldBeZero("container.scrollTop");
shouldBeGreaterThanOrEqual("target1.getBoundingClientRect().top", "5000");
// Scroll to make the middle target visible.
if (window.accessibilityController)
target2AccessibleObject.scrollToMakeVisible();
// Instead of testing the exact scroll offsets of the two containers, just test that
// the new absolute position of the target is on-screen.
shouldBeGreaterThanOrEqual("window.innerHeight", "target2.getBoundingClientRect().bottom");
// Make sure that calling scrollToMakeVisible on target1 and target3 don't result in any
// scrolling, because they should already be within the viewport.
window.target2top = target2.getBoundingClientRect().top;
if (window.accessibilityController)
target1AccessibleObject.scrollToMakeVisible();
shouldBe("target2top", "target2.getBoundingClientRect().top");
if (window.accessibilityController)
target3AccessibleObject.scrollToMakeVisible();
shouldBe("target2top", "target2.getBoundingClientRect().top");
finishJSTest();
}
runTest();
</script>
</body>
</html>