<html>
    <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>
            var destroyStreamCalled = false;

            function main() {
                if (!window.layoutTestController) {
                    debug("This test can only run from within DumpRenderTree, because it requires TestNetscapePlugin.\n");
                    return;
                }
                layoutTestController.waitUntilDone();
            }

            main();

            function streamStarted() {
                testFailed("TestNetscapePlugin should have returned an error from NewStream.");
            }

            function streamDestroyed() { destroyStreamCalled = true; }

            function requestCompleted() {
                shouldBeFalse("destroyStreamCalled");

                debug('<br><span class="pass">TEST COMPLETE</span>');

                layoutTestController.notifyDone();
            }
        </script>

        <embed
            type="application/x-webkit-test-netscape"
            onStreamLoad="streamStarted()"
            onStreamDestroy="streamDestroyed()"
            onURLNotify="requestCompleted()"
            id="plugin">
    </body>
    <script>
        description("This tests that NPP_DestroyStream is not called if a plug-in returns an error from its NPP_NewStream callback.");

        var plugin = document.getElementById("plugin");

        plugin.returnErrorFromNewStream = true;
        shouldBeTrue("plugin.returnErrorFromNewStream");

        plugin.getURLNotify("data:,", null, "callback");
    </script>
</html>

