<!DOCTYPE html><!-- webkit-test-runner [ TabsToLinks=true SpatialNavigationEnabled=true ] -->
<html>
  <!--
    This test ensures that overflowed content can be focused by Spatial Navigation.

    * Pre-conditions:
    1) DRT support for SNav enable/disable.

    * Navigation steps:
    1) Loads this page, focus goes to "start" automatically.
    3) Try to traverse the links on page down.
       and then back up.

    * Expected results: After 'start' gets the focus, tapping down arrow should scroll its
      enclosing scrollable container (<div>) down, and *not* move focus to the link whose id is '2'.
  -->
  <head>
    <style type="text/css">
      div.scroll {
        height: 200px;
        width: 300px;
        overflow: auto;
        border: 1px solid #666;
        background-color: #ccc;
        padding: 8px;
      }
    </style>

    <script src="../../resources/js-test-pre.js"></script>
    <script src="resources/spatial-navigation-utils.js"></script>
    <script type="application/javascript">

    var resultMap = [
      ["Down", "start"],
      ["DONE", "DONE"]
    ];

    if (window.testRunner) {
      testRunner.dumpAsText();
      testRunner.waitUntilDone();
    }

    function runTest()
    {
      // starting the test itself: get to a known place.
      document.getElementById("start").focus();

      initTest(resultMap, testCompleted);
    }

    function testCompleted()
    {
      if (window.testRunner)
        testRunner.notifyDone();
    }

    window.onload = runTest;

    </script>
    <script src="../resources/js-test-post.js"></script>
  </head>

  <body id="some-content" xmlns="http://www.w3.org/1999/xhtml">
    <div class="scroll">
      <p>It has a visible <a id="start" href="a">link_1</a>.</p>
      <br><br><br><br><br><br><br><br><br>
      <p>... and an overflowed link like <a id="1" href="a">this</a>.</p>
    </div>
    <br><br><br><br><br><br><br>
    <p>This link should NOT get <a id="start" href="a">focused</a>.</p>
    <div id="console"></div>
  </body>
</html>
