<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script>
    if (window.testRunner) {
        testRunner.waitUntilDone();
        testRunner.dumpAsText();
    }

    var dummyFilterCalled = false;
    var foundNode;

    function dummyFilter() {
        dummyFilterCalled = true;
        return NodeFilter.FILTER_ACCEPT;
    }

    function test() {
        var iframe = document.createElement("iframe");
        document.body.appendChild(iframe);
        var doc = iframe.contentWindow.document;
        document.body.removeChild(iframe);
        var iterator = doc.createNodeIterator(doc, NodeFilter.SHOW_ELEMENT, dummyFilter, false);
        foundNode = iterator.nextNode();
        testPassed("Did not crash.");
        shouldBeTrue("dummyFilterCalled");
        shouldBe("foundNode.toString()", "\"[object HTMLHtmlElement]\"");

        if (window.testRunner)
            testRunner.notifyDone();
    }
</script>
</head>
<body onload="test()">
<p>Ensure that using node filter with a detached iframe doesn't crash.</p>
<div id="console"></div>
</body>
</html>
