<html>
  <head>
    <script src="../../resources/js-test-pre.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.setSpatialNavigationEnabled(true);
      testRunner.overridePreference("WebKitTabToLinksPreferenceKey", 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>
    <script src="../resources/js-test-post.js"></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=0 height=0  src="data:text/html,
        <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> an iframe with size 0.<br>
     <p>This is <a id="end" href="a">link_2</a>.</p>
    <div id="console"></div>
    <p>This test is to test that an iframe with size 0 does not get focus, and neither do its descendants.
  </body>
</html>
