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

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

    if (window.testRunner) {
      testRunner.dumpAsText();
      testRunner.overridePreference("WebKitTabToLinksPreferenceKey", 1);
      testRunner.overridePreference("WebKitSpatialNavigationEnabled", 1);
      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>
  </head>

  <body id="some-content" xmlns="http://www.w3.org/1999/xhtml">
      <p>This is <a id="start" href="a">link_1</a>.</p>
      <br>This is <iframe id="1" width=100 height=100 style="display:none"  srcdoc="
        <body>
          <a id='11' href='http://a'>b</a>
          <a id='12' href='http://a'>c</a>
          <a id='13' href='http://a'>d</a>
        </body>
        "></iframe><br> hidden iframe.<br>
      <p>This is <a id="end" href="a">link_2</a>.</p>
    <div id="console"></div>
    <p>This test is to test that iframe with display:none does not get focus, and neither do its descendants</p>
  </body>
</html>
