<head>
<link rel="stylesheet" href="../fast/js/resources/js-test-style.css">
<script src="../fast/js/resources/js-test-pre.js"></script>
</head>
<body onload="runTest()">
<p id="description"></p>
<div id="console"></div>
<script>
function runTest() 
{
    if (!window.layoutTestController) {
        debug("This test can only run from within DumpRenderTree because it requires TestNetscapePlugin.\n");
        return;
    }
    
    plugin1 = document.createElement("embed");
    plugin1.type = "application/x-webkit-test-netscape";
    document.body.appendChild(plugin1);
    
    shouldBe("plugin1.privateBrowsingEnabled", "false");

    // Now enable private browsing
    layoutTestController.setPrivateBrowsingEnabled(true);

    shouldBe("plugin1.privateBrowsingEnabled", "true");
    
    plugin2 = document.createElement("embed");
    plugin2.type = "application/x-webkit-test-netscape";
    document.body.appendChild(plugin2);
    
    shouldBe("plugin2.privateBrowsingEnabled", "true");
    layoutTestController.setPrivateBrowsingEnabled(false);
    shouldBe("plugin1.privateBrowsingEnabled", "false");
    shouldBe("plugin2.privateBrowsingEnabled", "false");
}
</script>

<script>
description("Tests that NPNVprivateModeBool is supported by the WebKit plugin view. \n This test is for WebKit platforms that wish to support NPNVprivateModeBool but do not wish to implement the preference change listener required to support a cachedPrivateBrowsingEnabled property similar to the one provided by Safari and tested for in private-browsing-mode.html");


successfullyParsed = true;
</script>
