gecko/content/base/test/chrome/test_bug391728.html

202 lines
7.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="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/ChromeUtils.js"></script>
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/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">
const gHttpTestRoot = location.toString().replace("chrome://mochitests/content/", "http://127.0.0.1:8888/").split(/\//).slice(0, -1).join('/') + '/';
Components.utils.import("resource://gre/modules/Services.jsm");
/** Test for Bug 391728 **/
// Plugins that should dispatch error events and have the pseudo classes set
const PLUGIN_COUNT = 11;
// Plugins that should neither dispatch error events or have the pseudo classes set
const FALLBACK_COUNT = 5;
const OBJLC = Components.interfaces.nsIObjectLoadingContent;
var gNextTest = null;
var gUnknown = [];
var gBlocked = [];
var gDisabled = [];
function plugin_binding_attached(event) {
var plugin = event.target;
plugin instanceof OBJLC;
switch (SpecialPowers.wrap(plugin).pluginFallbackType) {
case OBJLC.PLUGIN_DISABLED:
gDisabled.push(plugin.id);
break;
case OBJLC.PLUGIN_BLOCKLISTED:
gBlocked.push(plugin.id);
break;
case OBJLC.PLUGIN_UNSUPPORTED:
gUnknown.push(plugin.id);
break;
}
}
function init_test() {
if (!PluginUtils.withTestPlugin(start_test))
SimpleTest.finish();
}
function updateBlocklist(aCallback) {
var blocklistNotifier = Components.classes["@mozilla.org/extensions/blocklist;1"]
.getService(Components.interfaces.nsITimerCallback);
var observer = function() {
Services.obs.removeObserver(observer, "blocklist-updated");
SimpleTest.executeSoon(aCallback);
};
Services.obs.addObserver(observer, "blocklist-updated", false);
blocklistNotifier.notify(null);
}
var _originalBlocklistURL = null;
function setAndUpdateBlocklist(aURL, aCallback) {
info("Setting blocklist to " + aURL);
if (!_originalBlocklistURL) {
_originalBlocklistURL = Services.prefs.getCharPref("extensions.blocklist.url");
}
Services.prefs.setCharPref("extensions.blocklist.url", aURL);
updateBlocklist(aCallback);
}
function resetBlocklist() {
info("resetting blocklist URL to " + _originalBlocklistURL);
Services.prefs.setCharPref("extensions.blocklist.url", _originalBlocklistURL);
}
function start_test(plugin) {
Services.prefs.setBoolPref("extensions.blocklist.suppressUI", true);
is(plugin.description, "Plug-in for testing purposes.\u2122 " +
"(\u0939\u093f\u0928\u094d\u0926\u0940 " +
"\u4e2d\u6587 " +
"\u0627\u0644\u0639\u0631\u0628\u064a\u0629)",
"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(plugin) {
Services.prefs.clearUserPref("extensions.blocklist.suppressUI");
resetBlocklist();
plugin.enabledState = Components.interfaces.nsIPluginTag.STATE_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 next_text() {
PluginUtils.withTestPlugin(gNextTest);
}
function frame_loaded() {
// We must delay to wait for the plugin sources to be loaded :(
setTimeout(next_text, 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(plugin) {
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");
plugin.enabledState = Components.interfaces.nsIPluginTag.STATE_DISABLED;
load_frame(test_disabled, "file_bug391728");
}
function test_disabled(plugin) {
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");
ok(plugin.disabled, "Plugin lost its disabled status");
plugin.enabledState = Components.interfaces.nsIPluginTag.STATE_ENABLED;
setAndUpdateBlocklist(gHttpTestRoot + "blockPluginHard.xml",
function() {
load_frame(test_blocked, "file_bug391728");
});
}
function test_blocked(plugin) {
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");
ok(plugin.blocklisted, "Plugin lost its blocklist status");
load_frame(test_unknown, "file_bug391728_2");
}
function test_unknown(plugin) {
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");
setAndUpdateBlocklist(gHttpTestRoot + "blockNoPlugins.xml", function() {
ok(!plugin.blocklisted, "Plugin shouldn't remain blocklisted");
finish_test(plugin);
});
}
SimpleTest.waitForExplicitFinish();
window.addEventListener("load", init_test, false);
</script>
</pre>
</body>
</html>