mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-09 09:18:42 +09:00
Import Tycho's Add-on Manager
This commit is contained in:
parent
d07bf4bba2
commit
a122115666
875 changed files with 111377 additions and 0 deletions
|
|
@ -0,0 +1,185 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||
*/
|
||||
|
||||
const Ci = Components.interfaces;
|
||||
|
||||
// This verifies that duplicate plugins are coalesced and maintain their ID
|
||||
// across restarts.
|
||||
|
||||
var PLUGINS = [{
|
||||
name: "Duplicate Plugin 1",
|
||||
description: "A duplicate plugin",
|
||||
version: "1",
|
||||
blocklisted: false,
|
||||
enabledState: Ci.nsIPluginTag.STATE_ENABLED,
|
||||
get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
|
||||
filename: "/home/mozilla/.plugins/dupplugin1.so"
|
||||
}, {
|
||||
name: "Duplicate Plugin 1",
|
||||
description: "A duplicate plugin",
|
||||
version: "1",
|
||||
blocklisted: false,
|
||||
enabledState: Ci.nsIPluginTag.STATE_ENABLED,
|
||||
get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
|
||||
filename: "",
|
||||
filename: "/usr/lib/plugins/dupplugin1.so"
|
||||
}, {
|
||||
name: "Duplicate Plugin 2",
|
||||
description: "Another duplicate plugin",
|
||||
version: "1",
|
||||
blocklisted: false,
|
||||
enabledState: Ci.nsIPluginTag.STATE_ENABLED,
|
||||
get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
|
||||
filename: "/home/mozilla/.plugins/dupplugin2.so"
|
||||
}, {
|
||||
name: "Duplicate Plugin 2",
|
||||
description: "Another duplicate plugin",
|
||||
version: "1",
|
||||
blocklisted: false,
|
||||
enabledState: Ci.nsIPluginTag.STATE_ENABLED,
|
||||
get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
|
||||
filename: "",
|
||||
filename: "/usr/lib/plugins/dupplugin2.so"
|
||||
}, {
|
||||
name: "Non-duplicate Plugin", // 3
|
||||
description: "Not a duplicate plugin",
|
||||
version: "1",
|
||||
blocklisted: false,
|
||||
enabledState: Ci.nsIPluginTag.STATE_ENABLED,
|
||||
get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
|
||||
filename: "/home/mozilla/.plugins/dupplugin3.so"
|
||||
}, {
|
||||
name: "Non-duplicate Plugin", // 4
|
||||
description: "Not a duplicate because the descriptions are different",
|
||||
version: "1",
|
||||
blocklisted: false,
|
||||
enabledState: Ci.nsIPluginTag.STATE_ENABLED,
|
||||
get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
|
||||
filename: "",
|
||||
filename: "/usr/lib/plugins/dupplugin4.so"
|
||||
}, {
|
||||
name: "Another Non-duplicate Plugin", // 5
|
||||
description: "Not a duplicate plugin",
|
||||
version: "1",
|
||||
blocklisted: false,
|
||||
enabledState: Ci.nsIPluginTag.STATE_ENABLED,
|
||||
get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
|
||||
filename: "/home/mozilla/.plugins/dupplugin5.so"
|
||||
}];
|
||||
|
||||
// A fake plugin host to return the plugins defined above
|
||||
var PluginHost = {
|
||||
getPluginTags: function(countRef) {
|
||||
countRef.value = PLUGINS.length;
|
||||
return PLUGINS;
|
||||
},
|
||||
|
||||
QueryInterface: function(iid) {
|
||||
if (iid.equals(Components.interfaces.nsIPluginHost)
|
||||
|| iid.equals(Components.interfaces.nsISupports))
|
||||
return this;
|
||||
|
||||
throw Components.results.NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
}
|
||||
|
||||
var PluginHostFactory = {
|
||||
createInstance: function (outer, iid) {
|
||||
if (outer != null)
|
||||
throw Components.results.NS_ERROR_NO_AGGREGATION;
|
||||
return PluginHost.QueryInterface(iid);
|
||||
}
|
||||
};
|
||||
|
||||
var registrar = Components.manager.QueryInterface(Components.interfaces.nsIComponentRegistrar);
|
||||
registrar.registerFactory(Components.ID("{721c3e73-969e-474b-a6dc-059fd288c428}"),
|
||||
"Fake Plugin Host",
|
||||
"@mozilla.org/plugin/host;1", PluginHostFactory);
|
||||
|
||||
var gPluginIDs = [null, null, null, null, null];
|
||||
|
||||
function run_test() {
|
||||
do_test_pending();
|
||||
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
|
||||
Services.prefs.setBoolPref("media.gmp-provider.enabled", false);
|
||||
|
||||
startupManager();
|
||||
|
||||
run_test_1();
|
||||
}
|
||||
|
||||
function found_plugin(aNum, aId) {
|
||||
if (gPluginIDs[aNum])
|
||||
do_throw("Found duplicate of plugin " + aNum);
|
||||
gPluginIDs[aNum] = aId;
|
||||
}
|
||||
|
||||
// Test that the plugins were coalesced and all appear in the returned list
|
||||
function run_test_1() {
|
||||
AddonManager.getAddonsByTypes(["plugin"], function(aAddons) {
|
||||
do_check_eq(aAddons.length, 5);
|
||||
aAddons.forEach(function(aAddon) {
|
||||
if (aAddon.name == "Duplicate Plugin 1") {
|
||||
found_plugin(0, aAddon.id);
|
||||
do_check_eq(aAddon.description, "A duplicate plugin");
|
||||
}
|
||||
else if (aAddon.name == "Duplicate Plugin 2") {
|
||||
found_plugin(1, aAddon.id);
|
||||
do_check_eq(aAddon.description, "Another duplicate plugin");
|
||||
}
|
||||
else if (aAddon.name == "Another Non-duplicate Plugin") {
|
||||
found_plugin(5, aAddon.id);
|
||||
do_check_eq(aAddon.description, "Not a duplicate plugin");
|
||||
}
|
||||
else if (aAddon.name == "Non-duplicate Plugin") {
|
||||
if (aAddon.description == "Not a duplicate plugin")
|
||||
found_plugin(3, aAddon.id);
|
||||
else if (aAddon.description == "Not a duplicate because the descriptions are different")
|
||||
found_plugin(4, aAddon.id);
|
||||
else
|
||||
do_throw("Found unexpected plugin with description " + aAddon.description);
|
||||
}
|
||||
else {
|
||||
do_throw("Found unexpected plugin " + aAddon.name);
|
||||
}
|
||||
});
|
||||
|
||||
run_test_2();
|
||||
});
|
||||
}
|
||||
|
||||
// Test that disabling a coalesced plugin disables all its tags
|
||||
function run_test_2() {
|
||||
AddonManager.getAddonByID(gPluginIDs[0], function(p) {
|
||||
do_check_false(p.userDisabled);
|
||||
p.userDisabled = true;
|
||||
do_check_true(PLUGINS[0].disabled);
|
||||
do_check_true(PLUGINS[1].disabled);
|
||||
|
||||
do_execute_soon(run_test_3);
|
||||
});
|
||||
}
|
||||
|
||||
// Test that IDs persist across restart
|
||||
function run_test_3() {
|
||||
restartManager();
|
||||
|
||||
AddonManager.getAddonByID(gPluginIDs[0], callback_soon(function(p) {
|
||||
do_check_neq(p, null);
|
||||
do_check_eq(p.name, "Duplicate Plugin 1");
|
||||
do_check_eq(p.description, "A duplicate plugin");
|
||||
|
||||
// Reorder the plugins and restart again
|
||||
[PLUGINS[0], PLUGINS[1]] = [PLUGINS[1], PLUGINS[0]];
|
||||
restartManager();
|
||||
|
||||
AddonManager.getAddonByID(gPluginIDs[0], function(p) {
|
||||
do_check_neq(p, null);
|
||||
do_check_eq(p.name, "Duplicate Plugin 1");
|
||||
do_check_eq(p.description, "A duplicate plugin");
|
||||
|
||||
do_execute_soon(do_test_finished);
|
||||
});
|
||||
}));
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue