<html>
<head>
<script src="../fast/js/resources/js-test-pre.js"></script>

<script>

if (window.testRunner)
  testRunner.waitUntilDone();

function buildAccessibilityTree(accessibilityObject, indent) {
    var count = accessibilityObject.childrenCount;
    for (var i = 0; i < count; ++i) {
         if (!buildAccessibilityTree(accessibilityObject.childAtIndex(i), indent + 1))
            return false;
    }

    return true;
}

function runAXTest() {


   description("This tests that an image map's hold on it's parent will be cleared if the parent goes away.");

   // First access all children using AX
   buildAccessibilityTree(accessibilityController.rootElement, 0);

   var child = document.getElementById('img'); child.parentNode.removeChild(child);
 
   // Now verify we haven't crashed.
   buildAccessibilityTree(accessibilityController.rootElement, 0);

   if (window.testRunner)
       testRunner.notifyDone();
}
</script>

</head>
<body>

<map name="map">
<div id="o7"></div>
<area id="o20" href="#"></area></map>

<img id="img" usemap="#map"><span></span> 

<script>setTimeout("runAXTest();", 1);</script> 

<p id="description"></p>
<div id="console"></div>

</body>
</html>
