| <!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> |