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

var startTime = new Date;

if (window.testRunner) {
    testRunner.overridePreference("WebKit2AsynchronousPluginInitializationEnabled", "1");
    testRunner.overridePreference("WebKit2AsynchronousPluginInitializationEnabledForAllPlugins", "1");
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function runTest() 
{
    if (!window.testRunner) {
        debug("This test can only run from within DumpRenderTree because it requires test runner internals.\n");
        return;
    }
    
    var pluginElement = document.getElementById("TestElement");
    var testProperty = pluginElement.fooBar;
    
    if (testProperty)
        testFailed("testProperty should not have returned anything, but it returned " + testProperty);

    var endTime = new Date;
    if (endTime - startTime > 549)
        testFailed("This test took over 549ms meaning the plug-in with a 550ms startup delay was actually initialized.  It never should've been initialized.");
    else
        testPassed("Accessing the property took less than 550ms, meaning the plug-in had not finished initializing after our call to the plug-in script object returned.");

    testRunner.notifyDone();
}
</script>

</head>
<body onload="setTimeout('runTest()', 0)">
<embed id="TestElement" type="application/x-webkit-test-netscape" test="slow-npp-new"></embed>
<p id="description"></p>
<div id="console"></div>
</body>

<script>
description("Tests that accessing the script object of a plug-in that hasn't been initialized fails instead of waiting for initialization to finish.");
var unused = document.body.offsetTop;
</script>
