<head>
<link rel="stylesheet" href="../fast/js/resources/js-test-style.css">
<script src="../fast/js/resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
function main() 
{
    if (!window.layoutTestController) {
        debug("This test can only run from within DumpRenderTree because it requires TestNetscapePlugin.\n");
        return;
    }

    layoutTestController.waitUntilDone();
}
main();

function runTest()
{
    debug("destroyStream() returns zero to indicate success, or a non-zero error code to indicate failure");

    shouldBe("document.getElementById('plugin').hasStream", "true");
    shouldBe("document.getElementById('plugin').destroyStream()", "2"); // we expect to fail because the stream should already have completed loading and destroyed itself
    shouldBe("document.getElementById('plugin').destroyStream()", "2"); // try again, just for good measure

    shouldBe("document.getElementById('plugin').destroyNullStream()", "2"); // Now try destroying a null stream

    debug("PASS: You didn't crash.\n");

    shouldBeTrue("successfullyParsed");
    debug('<br><span class="pass">TEST COMPLETE</span>');
    layoutTestController.notifyDone();
}
</script>
<embed id="plugin" 
       type="application/x-webkit-test-netscape"
       src="data:text/plain,"
       style="width:0; height:0"
       onstreamload="setTimeout(runTest, 0);">
</embed>

<script>
description("Test for http://bugs.webkit.org/show_bug.cgi?id=13203: REGRESSION: Repro crash in -[WebBaseNetscapePluginView(WebNPPCallbacks) destroyStream:reason:] navigating away from page with DivX movie plug-in");


successfullyParsed = true;
</script>
