gecko/content/base/test/test_bug391728.html

177 lines
6.1 KiB
HTML

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=391728
-->
<head>
<title>Test for Bug 391728</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=391728">Mozilla Bug 391728</a>
<p id="display"></p>
<div id="content">
<iframe id="testframe" width="150" height="250" src="about:blank"></iframe>
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
/** Test for Bug 391728 **/
// Plugins that should dispatch error events and have the pseudo classes set
const PLUGIN_COUNT = 14;
// Plugins that should neither dispatch error events or have the pseudo classes set
const FALLBACK_COUNT = 4;
var gNextTest = null;
var gUnknown = [];
var gBlocked = [];
var gDisabled = [];
function get_test_plugin() {
var ph = Components.classes["@mozilla.org/plugin/host;1"]
.getService(Components.interfaces.nsIPluginHost);
var tags = ph.getPluginTags({});
// Find the test plugin
for (var i = 0; i < tags.length; i++) {
if (tags[i].name == "Test Plug-in")
return tags[i];
}
}
function disabled_plugin_detected(event) {
gDisabled.push(event.target.id);
}
function blocked_plugin_detected(event) {
gBlocked.push(event.target.id);
}
function unknown_plugin_detected(event) {
gUnknown.push(event.target.id);
}
function init_test() {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
// Make sure the blocklist is off for the duration of this test
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
prefs.setBoolPref("extensions.blocklist.enabled", false);
var plugin = get_test_plugin();
ok(plugin, "Test plugin was not found");
is(plugin.description, "Plug-in for testing purposes.", "Test plugin had an incorrect description");
is(plugin.version, "1.0.0.0", "Test plugin had an incorrect version");
ok(!plugin.disabled, "Test plugin should not be disabled");
ok(!plugin.blocklisted, "Test plugin should not be blocklisted");
var frame = document.getElementById("testframe");
frame.addEventListener("load", frame_loaded, true);
load_frame(test_normal, "file_bug391728");
}
function finish_test() {
var plugin = get_test_plugin();
plugin.disabled = false;
plugin.blocklisted = false;
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
prefs.clearUserPref("extensions.blocklist.enabled");
SimpleTest.finish();
}
function load_frame(nextTest, file) {
gNextTest = nextTest;
gDisabled = [];
gUnknown = [];
gBlocked = [];
var frame = document.getElementById("testframe");
frame.src = file + ".html?" + Math.random();
}
function frame_loaded() {
// We must delay to wait for the plugin sources to be loaded :(
setTimeout(gNextTest, 500);
}
function test_style(expected) {
var frame = document.getElementById("testframe");
for (var i = 1; i <= PLUGIN_COUNT; i++) {
var tag = frame.contentDocument.getElementById("plugin" + i);
ok(tag, "Plugin " + i + " did not exist");
var style = frame.contentWindow.getComputedStyle(tag, null);
is(style.borderTopStyle, expected, "Plugin " + i + " had an incorrect border style");
}
for (i = 1; i <= FALLBACK_COUNT; i++) {
var tag = frame.contentDocument.getElementById("fallback" + i);
ok(tag, "Fallback plugin " + i + " did not exist");
var style = frame.contentWindow.getComputedStyle(tag, null);
is(style.borderTopStyle, "solid", "Fallback plugin " + i + " had an incorrect border style");
}
}
function test_list(list) {
for (var i = 1; i <= PLUGIN_COUNT; i++) {
ok(list.indexOf("plugin" + i) >= 0, "Plugin " + i + " did not send the event");
}
for (i = 1; i <= FALLBACK_COUNT; i++) {
ok(list.indexOf("fallback" + i) < 0, "Fallback plugin " + i + " should not have sent the event");
}
}
function test_normal() {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
is(gUnknown.length, 0, "Should not have been any unknown plugins");
is(gDisabled.length, 0, "Should not have been any disabled plugins");
is(gBlocked.length, 0, "Should not have been any blocked plugins");
test_style("solid");
var plugin = get_test_plugin();
plugin.disabled = true;
load_frame(test_disabled, "file_bug391728");
}
function test_disabled() {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
is(gUnknown.length, 0, "Should not have been any unknown plugins");
is(gDisabled.length, PLUGIN_COUNT, "Should have been disabled plugins");
test_list(gDisabled);
is(gBlocked.length, 0, "Should not have been any blocked plugins");
test_style("dotted");
var plugin = get_test_plugin();
ok(plugin.disabled, "Plugin lost its disabled status");
plugin.disabled = false;
plugin.blocklisted = true;
load_frame(test_blocked, "file_bug391728");
}
function test_blocked() {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
is(gUnknown.length, 0, "Should not have been any unknown plugins");
is(gDisabled.length, 0, "Should not have been any disabled plugins");
is(gBlocked.length, PLUGIN_COUNT, "Should have been blocked plugins");
test_list(gBlocked);
test_style("dashed");
var plugin = get_test_plugin();
ok(plugin.blocklisted, "Plugin lost its blocklist status");
load_frame(test_unknown, "file_bug391728_2");
}
function test_unknown() {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
is(gUnknown.length, PLUGIN_COUNT, "Should have been unknown plugins");
test_list(gUnknown);
is(gDisabled.length, 0, "Should not have been any disabled plugins");
is(gBlocked.length, 0, "Should not have been any blocked plugins");
test_style("none");
finish_test();
}
SimpleTest.waitForExplicitFinish();
window.addEventListener("load", init_test, false);
</script>
</pre>
</body>
</html>