<!DOCTYPE html>

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

        function doTest()
        {
            var iframe = document.querySelector('iframe');

            var node = iframe.contentDocument.createElement('div');
            node.addEventListener('gesturestart', function() { }, false);
            node.addEventListener('gestureend', function() { }, false);
            node.textContent = 'test node';
            iframe.contentDocument.body.appendChild(node);

            document.body.appendChild(node);
            
            node.remove();
            
            window.setTimeout(removeFrameAndGC, 0)
        }
        
        function removeFrameAndGC()
        {
            var iframe = document.querySelector('iframe');
            iframe.remove();
            iframe = undefined;

            gc();
            if (window.testRunner)
                testRunner.notifyDone();
        }

        window.addEventListener('load', doTest, false);
    </script>
</head>
<body>
    This test should not crash or assert.
    <iframe srcdoc="<body></body>"></iframe>
</body>
</html>
