116 lines
4.8 KiB
HTML
116 lines
4.8 KiB
HTML
<!DOCTYPE html>
|
|
<head>
|
|
<script src="../resources/js-test.js"></script>
|
|
</head>
|
|
<body>
|
|
|
|
<p id="description"></p>
|
|
|
|
<div style='border: 1px solid #000; height: 5000px;'>5000-pixel box</div>
|
|
|
|
<iframe id="frame" src="data:text/html,<body><button id='upper_target'>Upper Target</button><div style='border: 1px solid %23000; height: 5000px;'>5000-pixel box</div><button id='lower_target'>Lower Target</button></body>"></iframe>
|
|
|
|
<br>
|
|
<iframe id="frame2" src="./resources/iframe.html"></iframe>
|
|
|
|
<div id="console"></div>
|
|
|
|
<script>
|
|
description("This tests that scrolling to make an element visible works properly when there's an iframe off screen.");
|
|
|
|
window.jsTestIsAsync = true;
|
|
|
|
function runTest() {
|
|
|
|
window.frame = document.getElementById("frame");
|
|
window.frameWindow = frame.contentWindow;
|
|
|
|
var upperTarget = frameWindow.document.getElementById("upper_target");
|
|
var lowerTarget = frameWindow.document.getElementById("lower_target");
|
|
|
|
var lowerTargetAccessibleObject;
|
|
var upperTargetAccessibleObject;
|
|
if (frameWindow.accessibilityController) {
|
|
lowerTargetAccessibleObject = frameWindow.accessibilityController.accessibleElementById("lower_target");
|
|
upperTargetAccessibleObject = frameWindow.accessibilityController.accessibleElementById("upper_target");
|
|
}
|
|
|
|
// Initial state
|
|
debug("Test scrolling an offscreen iframe.");
|
|
window.scrollTo(0, 0);
|
|
shouldBeZero("window.pageYOffset");
|
|
|
|
// Scroll to make lower target visible and check.
|
|
debug("\nScroll lower target to visible.");
|
|
if (frameWindow.accessibilityController)
|
|
lowerTargetAccessibleObject.scrollToMakeVisible();
|
|
// The iframe should be scrolled into view.
|
|
debug("The iframe should be scrolled into view");
|
|
window.scrolledYOffset = window.pageYOffset;
|
|
shouldBeTrue("scrolledYOffset > 0");
|
|
// The content inside the iframe should be scrolled into view too
|
|
testScrolledIntoView(lowerTarget, frameWindow, "Test the lower target should be scrolled into view.")
|
|
|
|
// Scroll to make upper target visible and check.
|
|
debug("\nScroll upper target to visible.");
|
|
if (frameWindow.accessibilityController)
|
|
upperTargetAccessibleObject.scrollToMakeVisible();
|
|
// The iframe should be visible already
|
|
debug("The main window shouldn't scroll.");
|
|
shouldBeTrue("window.pageYOffset == scrolledYOffset");
|
|
// The content inside the iframe should be scrolled into view too
|
|
testScrolledIntoView(upperTarget, frameWindow, "Test the upper target should be scrolled into view.")
|
|
|
|
// Reset and test iframe inside iframe
|
|
debug("\nReset scrolling. Test scrolling in nested iframes.");
|
|
window.scrollTo(0, 0);
|
|
shouldBeZero("window.pageYOffset");
|
|
|
|
window.innerFrame = document.getElementById("frame2").contentWindow.document.getElementById("iframe");
|
|
window.innerFrameWindow = innerFrame.contentWindow;
|
|
var button = innerFrameWindow.document.getElementById("button");
|
|
var buttonAccessibleObject;
|
|
debug("\nScroll inner button to visible.");
|
|
if (innerFrameWindow.accessibilityController) {
|
|
buttonAccessibleObject = innerFrameWindow.accessibilityController.accessibleElementById("button");
|
|
buttonAccessibleObject.scrollToMakeVisible();
|
|
}
|
|
// The content inside the inner iframe should be scrolled into view too
|
|
testScrolledIntoView(button, innerFrameWindow, "Test the button inside the inner frame should be scrolled into view");
|
|
// Use outter frame to determine the inner frame is scrolled into view.
|
|
window.outterFrame = document.getElementById("frame2");
|
|
window.outterFrameWindow = outterFrame.contentWindow;
|
|
debug("The inner iframe should be scrolled into view");
|
|
shouldBeTrue("outterFrameWindow.pageYOffset > 0");
|
|
|
|
// Now make sure we can scroll back to the outter text above the inner iframe
|
|
var text = outterFrameWindow.document.getElementById("box").firstChild;
|
|
var textAccessibleObject;
|
|
debug("\nScroll outter text element to visible.");
|
|
if (outterFrameWindow.accessibilityController) {
|
|
textAccessibleObject = outterFrameWindow.accessibilityController.accessibleElementById("box").childAtIndex(0);
|
|
textAccessibleObject.scrollToMakeVisible();
|
|
}
|
|
debug("The Y offset of the outter iframe should be reset.")
|
|
shouldBeZero("outterFrameWindow.pageYOffset");
|
|
|
|
finishJSTest();
|
|
}
|
|
|
|
function testScrolledIntoView(object, testWindow, description) {
|
|
debug(description);
|
|
window.frameMinYOffset = object.offsetTop + object.offsetHeight - testWindow.innerHeight;
|
|
window.frameMaxYOffset = object.offsetTop;
|
|
window.scrolledIntoView = testWindow.pageYOffset >= frameMinYOffset && testWindow.pageYOffset <= frameMaxYOffset;
|
|
shouldBeTrue("scrolledIntoView");
|
|
}
|
|
|
|
window.addEventListener("load", function() {
|
|
setTimeout(runTest, 0);
|
|
}, false);
|
|
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|