<html>
<script>

if (window.testRunner)
        testRunner.dumpAsText();

var plugins = new Array;
for (var i = 0; i < navigator.plugins.length; ++i) {
    plugins.push(navigator.plugins[i]);
}

var mimeTypes = new Array;
for (var i = 0; i < navigator.mimeTypes.length; ++i) {
    mimeTypes.push(navigator.mimeTypes[i]);
}

navigator.plugins.refresh();

var output = "<pre>";

for (var i = 0; i < plugins.length; ++i) {
    output += plugins[i].name;
    output += "\n";
}

for (var i = 0; i < mimeTypes.length; ++i) {
    output += mimeTypes[i].type;
    output += "\n";
}

output += "</pre>";

//document.writeln(output);
document.writeln("Tests access to previously received arrays from navigator.plugins and mimetypes after calling plugins.refresh(). If this text appears and there is no crash, then the test succeeded.");

</script>
<body>
</body></html>
