mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
202 lines
7.1 KiB
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>
|