mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 20:05:49 +00:00
Bug 1413322 Don't load old-style language packs r=gandalf,kmag
MozReview-Commit-ID: GnG6UznHFZR --HG-- extra : rebase_source : a687e51a7c087c639a202f29b87ae466cd3705b8
This commit is contained in:
parent
016a127546
commit
1bf7198d39
@ -157,32 +157,7 @@ class AddonIDTest(unittest.TestCase):
|
|||||||
Windmill Testing Framework client source</foobar:description>
|
Windmill Testing Framework client source</foobar:description>
|
||||||
<foobar:unpack>true</foobar:unpack>
|
<foobar:unpack>true</foobar:unpack>
|
||||||
</Description>
|
</Description>
|
||||||
</RDF>""",
|
</RDF>"""]
|
||||||
"""<?xml version="1.0"?>
|
|
||||||
<!--
|
|
||||||
|
|
||||||
-->
|
|
||||||
|
|
||||||
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
|
|
||||||
<Description about="urn:mozilla:install-manifest"
|
|
||||||
em:id="winning"
|
|
||||||
em:name="Language Pack"
|
|
||||||
em:version="42.0a2"
|
|
||||||
em:type="8"
|
|
||||||
em:creator="Some Contributor">
|
|
||||||
<em:contributor></em:contributor>
|
|
||||||
|
|
||||||
<em:targetApplication>
|
|
||||||
<Description>
|
|
||||||
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
|
|
||||||
<em:minVersion>42.0a2</em:minVersion>
|
|
||||||
<em:maxVersion>42.0a2</em:maxVersion>
|
|
||||||
</Description>
|
|
||||||
</em:targetApplication>
|
|
||||||
</Description>
|
|
||||||
</RDF>
|
|
||||||
"""]
|
|
||||||
return tests
|
return tests
|
||||||
|
|
||||||
|
|
||||||
|
@ -143,13 +143,13 @@ const PROP_LOCALE_SINGLE = ["name", "description", "creator", "homepageURL"];
|
|||||||
const PROP_LOCALE_MULTI = ["developers", "translators", "contributors"];
|
const PROP_LOCALE_MULTI = ["developers", "translators", "contributors"];
|
||||||
const PROP_TARGETAPP = ["id", "minVersion", "maxVersion"];
|
const PROP_TARGETAPP = ["id", "minVersion", "maxVersion"];
|
||||||
|
|
||||||
// Map new string type identifiers to old style nsIUpdateItem types
|
// Map new string type identifiers to old style nsIUpdateItem types.
|
||||||
// Type 32 was previously used for multipackage xpi files so it should
|
// Retired values:
|
||||||
// not be re-used since old files with that type may be floating around.
|
// 32 = multipackage xpi file
|
||||||
|
// 8 = locale
|
||||||
const TYPES = {
|
const TYPES = {
|
||||||
extension: 2,
|
extension: 2,
|
||||||
theme: 4,
|
theme: 4,
|
||||||
locale: 8,
|
|
||||||
dictionary: 64,
|
dictionary: 64,
|
||||||
experiment: 128,
|
experiment: 128,
|
||||||
apiextension: 256,
|
apiextension: 256,
|
||||||
@ -164,7 +164,6 @@ const RESTARTLESS_TYPES = new Set([
|
|||||||
"apiextension",
|
"apiextension",
|
||||||
"dictionary",
|
"dictionary",
|
||||||
"experiment",
|
"experiment",
|
||||||
"locale",
|
|
||||||
"webextension",
|
"webextension",
|
||||||
"webextension-theme",
|
"webextension-theme",
|
||||||
]);
|
]);
|
||||||
|
@ -212,7 +212,6 @@ const TYPE_ALIASES = {
|
|||||||
|
|
||||||
const CHROME_TYPES = new Set([
|
const CHROME_TYPES = new Set([
|
||||||
"extension",
|
"extension",
|
||||||
"locale",
|
|
||||||
"experiment",
|
"experiment",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -4211,11 +4210,6 @@ this.XPIProvider = {
|
|||||||
|
|
||||||
let activeAddon = this.activeAddons.get(aId);
|
let activeAddon = this.activeAddons.get(aId);
|
||||||
|
|
||||||
// Locales only contain chrome and can't have bootstrap scripts
|
|
||||||
if (aType == "locale") {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.debug("Loading bootstrap scope from " + aFile.path);
|
logger.debug("Loading bootstrap scope from " + aFile.path);
|
||||||
|
|
||||||
let principal = Cc["@mozilla.org/systemprincipal;1"].
|
let principal = Cc["@mozilla.org/systemprincipal;1"].
|
||||||
@ -4347,10 +4341,6 @@ this.XPIProvider = {
|
|||||||
aExtraParams.instanceID = this.activeAddons.get(aAddon.id).instanceID;
|
aExtraParams.instanceID = this.activeAddons.get(aAddon.id).instanceID;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nothing to call for locales
|
|
||||||
if (aAddon.type == "locale")
|
|
||||||
return;
|
|
||||||
|
|
||||||
let method = undefined;
|
let method = undefined;
|
||||||
let scope = activeAddon.bootstrapScope;
|
let scope = activeAddon.bootstrapScope;
|
||||||
try {
|
try {
|
||||||
|
@ -1 +0,0 @@
|
|||||||
locale test-langpack x-testing locale/x-testing
|
|
@ -1,23 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
|
|
||||||
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
|
|
||||||
|
|
||||||
<Description about="urn:mozilla:install-manifest">
|
|
||||||
<em:id>langpack-x-testing@tests.mozilla.org</em:id>
|
|
||||||
<em:type>8</em:type>
|
|
||||||
<em:version>1.0</em:version>
|
|
||||||
|
|
||||||
<!-- Front End MetaData -->
|
|
||||||
<em:name>Language Pack x-testing</em:name>
|
|
||||||
|
|
||||||
<em:targetApplication>
|
|
||||||
<Description>
|
|
||||||
<em:id>xpcshell@tests.mozilla.org</em:id>
|
|
||||||
<em:minVersion>1</em:minVersion>
|
|
||||||
<em:maxVersion>2</em:maxVersion>
|
|
||||||
</Description>
|
|
||||||
</em:targetApplication>
|
|
||||||
|
|
||||||
</Description>
|
|
||||||
</RDF>
|
|
@ -1,337 +0,0 @@
|
|||||||
/* Any copyright is dedicated to the Public Domain.
|
|
||||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
||||||
*/
|
|
||||||
|
|
||||||
// This verifies that language packs can be used without restarts.
|
|
||||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
|
||||||
|
|
||||||
// Enable loading extensions from the user scopes
|
|
||||||
Services.prefs.setIntPref("extensions.enabledScopes",
|
|
||||||
AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_USER);
|
|
||||||
// Enable installing distribution add-ons
|
|
||||||
Services.prefs.setBoolPref("extensions.installDistroAddons", true);
|
|
||||||
|
|
||||||
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
|
|
||||||
|
|
||||||
const profileDir = gProfD.clone();
|
|
||||||
profileDir.append("extensions");
|
|
||||||
const userExtDir = gProfD.clone();
|
|
||||||
userExtDir.append("extensions2");
|
|
||||||
userExtDir.append(gAppInfo.ID);
|
|
||||||
registerDirectory("XREUSysExt", userExtDir.parent);
|
|
||||||
const distroDir = gProfD.clone();
|
|
||||||
distroDir.append("distribution");
|
|
||||||
distroDir.append("extensions");
|
|
||||||
registerDirectory("XREAppDist", distroDir.parent);
|
|
||||||
|
|
||||||
var chrome = Components.classes["@mozilla.org/chrome/chrome-registry;1"]
|
|
||||||
.getService(Components.interfaces.nsIXULChromeRegistry);
|
|
||||||
|
|
||||||
function do_unregister_manifest() {
|
|
||||||
let path = getFileForAddon(profileDir, "langpack-x-testing@tests.mozilla.org");
|
|
||||||
Components.manager.removeBootstrappedManifestLocation(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
function do_check_locale_not_registered(provider) {
|
|
||||||
let didThrow = false;
|
|
||||||
try {
|
|
||||||
chrome.getSelectedLocale(provider);
|
|
||||||
} catch (e) {
|
|
||||||
didThrow = true;
|
|
||||||
}
|
|
||||||
do_check_true(didThrow);
|
|
||||||
}
|
|
||||||
|
|
||||||
function run_test() {
|
|
||||||
do_test_pending();
|
|
||||||
|
|
||||||
startupManager();
|
|
||||||
|
|
||||||
run_test_1();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tests that installing doesn't require a restart
|
|
||||||
function run_test_1() {
|
|
||||||
do_check_locale_not_registered("test-langpack");
|
|
||||||
|
|
||||||
prepare_test({ }, [
|
|
||||||
"onNewInstall"
|
|
||||||
]);
|
|
||||||
|
|
||||||
AddonManager.getInstallForFile(do_get_addon("test_langpack"), function(install) {
|
|
||||||
ensure_test_completed();
|
|
||||||
|
|
||||||
do_check_neq(install, null);
|
|
||||||
do_check_eq(install.type, "locale");
|
|
||||||
do_check_eq(install.version, "1.0");
|
|
||||||
do_check_eq(install.name, "Language Pack x-testing");
|
|
||||||
do_check_eq(install.state, AddonManager.STATE_DOWNLOADED);
|
|
||||||
do_check_true(install.addon.hasResource("install.rdf"));
|
|
||||||
do_check_false(install.addon.hasResource("bootstrap.js"));
|
|
||||||
do_check_eq(install.addon.operationsRequiringRestart &
|
|
||||||
AddonManager.OP_NEEDS_RESTART_INSTALL, 0);
|
|
||||||
|
|
||||||
let addon = install.addon;
|
|
||||||
prepare_test({
|
|
||||||
"langpack-x-testing@tests.mozilla.org": [
|
|
||||||
["onInstalling", false],
|
|
||||||
"onInstalled"
|
|
||||||
]
|
|
||||||
}, [
|
|
||||||
"onInstallStarted",
|
|
||||||
"onInstallEnded",
|
|
||||||
], function() {
|
|
||||||
do_check_true(addon.hasResource("install.rdf"));
|
|
||||||
// spin to let the startup complete
|
|
||||||
do_execute_soon(check_test_1);
|
|
||||||
});
|
|
||||||
install.install();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function check_test_1() {
|
|
||||||
AddonManager.getAllInstalls(function(installs) {
|
|
||||||
// There should be no active installs now since the install completed and
|
|
||||||
// doesn't require a restart.
|
|
||||||
do_check_eq(installs.length, 0);
|
|
||||||
|
|
||||||
AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) {
|
|
||||||
do_check_neq(b1, null);
|
|
||||||
do_check_eq(b1.version, "1.0");
|
|
||||||
do_check_false(b1.appDisabled);
|
|
||||||
do_check_false(b1.userDisabled);
|
|
||||||
do_check_true(b1.isActive);
|
|
||||||
// check chrome reg that language pack is registered
|
|
||||||
do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing");
|
|
||||||
do_check_true(b1.hasResource("install.rdf"));
|
|
||||||
do_check_false(b1.hasResource("bootstrap.js"));
|
|
||||||
|
|
||||||
AddonManager.getAddonsWithOperationsByTypes(null, function(list) {
|
|
||||||
do_check_eq(list.length, 0);
|
|
||||||
|
|
||||||
run_test_2();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tests that disabling doesn't require a restart
|
|
||||||
function run_test_2() {
|
|
||||||
AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) {
|
|
||||||
prepare_test({
|
|
||||||
"langpack-x-testing@tests.mozilla.org": [
|
|
||||||
["onDisabling", false],
|
|
||||||
"onDisabled"
|
|
||||||
]
|
|
||||||
});
|
|
||||||
|
|
||||||
do_check_eq(b1.operationsRequiringRestart &
|
|
||||||
AddonManager.OP_NEEDS_RESTART_DISABLE, 0);
|
|
||||||
b1.userDisabled = true;
|
|
||||||
ensure_test_completed();
|
|
||||||
|
|
||||||
do_check_neq(b1, null);
|
|
||||||
do_check_eq(b1.version, "1.0");
|
|
||||||
do_check_false(b1.appDisabled);
|
|
||||||
do_check_true(b1.userDisabled);
|
|
||||||
do_check_false(b1.isActive);
|
|
||||||
// check chrome reg that language pack is not registered
|
|
||||||
do_check_locale_not_registered("test-langpack");
|
|
||||||
|
|
||||||
AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) {
|
|
||||||
do_check_neq(newb1, null);
|
|
||||||
do_check_eq(newb1.version, "1.0");
|
|
||||||
do_check_false(newb1.appDisabled);
|
|
||||||
do_check_true(newb1.userDisabled);
|
|
||||||
do_check_false(newb1.isActive);
|
|
||||||
|
|
||||||
do_execute_soon(run_test_3);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test that restarting doesn't accidentally re-enable
|
|
||||||
function run_test_3() {
|
|
||||||
shutdownManager();
|
|
||||||
startupManager(false);
|
|
||||||
// check chrome reg that language pack is not registered
|
|
||||||
do_check_locale_not_registered("test-langpack");
|
|
||||||
|
|
||||||
AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) {
|
|
||||||
do_check_neq(b1, null);
|
|
||||||
do_check_eq(b1.version, "1.0");
|
|
||||||
do_check_false(b1.appDisabled);
|
|
||||||
do_check_true(b1.userDisabled);
|
|
||||||
do_check_false(b1.isActive);
|
|
||||||
|
|
||||||
run_test_4();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tests that enabling doesn't require a restart
|
|
||||||
function run_test_4() {
|
|
||||||
AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) {
|
|
||||||
prepare_test({
|
|
||||||
"langpack-x-testing@tests.mozilla.org": [
|
|
||||||
["onEnabling", false],
|
|
||||||
"onEnabled"
|
|
||||||
]
|
|
||||||
});
|
|
||||||
|
|
||||||
do_check_eq(b1.operationsRequiringRestart &
|
|
||||||
AddonManager.OP_NEEDS_RESTART_ENABLE, 0);
|
|
||||||
b1.userDisabled = false;
|
|
||||||
ensure_test_completed();
|
|
||||||
|
|
||||||
do_check_neq(b1, null);
|
|
||||||
do_check_eq(b1.version, "1.0");
|
|
||||||
do_check_false(b1.appDisabled);
|
|
||||||
do_check_false(b1.userDisabled);
|
|
||||||
do_check_true(b1.isActive);
|
|
||||||
// check chrome reg that language pack is registered
|
|
||||||
do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing");
|
|
||||||
|
|
||||||
AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) {
|
|
||||||
do_check_neq(newb1, null);
|
|
||||||
do_check_eq(newb1.version, "1.0");
|
|
||||||
do_check_false(newb1.appDisabled);
|
|
||||||
do_check_false(newb1.userDisabled);
|
|
||||||
do_check_true(newb1.isActive);
|
|
||||||
|
|
||||||
do_execute_soon(run_test_5);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tests that a restart shuts down and restarts the add-on
|
|
||||||
function run_test_5() {
|
|
||||||
shutdownManager();
|
|
||||||
do_unregister_manifest();
|
|
||||||
// check chrome reg that language pack is not registered
|
|
||||||
do_check_locale_not_registered("test-langpack");
|
|
||||||
startupManager(false);
|
|
||||||
// check chrome reg that language pack is registered
|
|
||||||
do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing");
|
|
||||||
|
|
||||||
AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) {
|
|
||||||
do_check_neq(b1, null);
|
|
||||||
do_check_eq(b1.version, "1.0");
|
|
||||||
do_check_false(b1.appDisabled);
|
|
||||||
do_check_false(b1.userDisabled);
|
|
||||||
do_check_true(b1.isActive);
|
|
||||||
do_check_false(isExtensionInAddonsList(profileDir, b1.id));
|
|
||||||
|
|
||||||
run_test_7();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tests that uninstalling doesn't require a restart
|
|
||||||
function run_test_7() {
|
|
||||||
AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) {
|
|
||||||
prepare_test({
|
|
||||||
"langpack-x-testing@tests.mozilla.org": [
|
|
||||||
["onUninstalling", false],
|
|
||||||
"onUninstalled"
|
|
||||||
]
|
|
||||||
});
|
|
||||||
|
|
||||||
do_check_eq(b1.operationsRequiringRestart &
|
|
||||||
AddonManager.OP_NEEDS_RESTART_UNINSTALL, 0);
|
|
||||||
b1.uninstall();
|
|
||||||
|
|
||||||
check_test_7();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function check_test_7() {
|
|
||||||
ensure_test_completed();
|
|
||||||
// check chrome reg that language pack is not registered
|
|
||||||
do_check_locale_not_registered("test-langpack");
|
|
||||||
|
|
||||||
AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org",
|
|
||||||
callback_soon(function(b1) {
|
|
||||||
do_check_eq(b1, null);
|
|
||||||
|
|
||||||
restartManager();
|
|
||||||
|
|
||||||
AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) {
|
|
||||||
do_check_eq(newb1, null);
|
|
||||||
|
|
||||||
do_execute_soon(run_test_8);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tests that a locale detected in the profile starts working immediately
|
|
||||||
function run_test_8() {
|
|
||||||
shutdownManager();
|
|
||||||
|
|
||||||
manuallyInstall(do_get_addon("test_langpack"), profileDir, "langpack-x-testing@tests.mozilla.org");
|
|
||||||
|
|
||||||
startupManager(false);
|
|
||||||
|
|
||||||
AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org",
|
|
||||||
callback_soon(function(b1) {
|
|
||||||
do_check_neq(b1, null);
|
|
||||||
do_check_eq(b1.version, "1.0");
|
|
||||||
do_check_false(b1.appDisabled);
|
|
||||||
do_check_false(b1.userDisabled);
|
|
||||||
do_check_true(b1.isActive);
|
|
||||||
// check chrome reg that language pack is registered
|
|
||||||
do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing");
|
|
||||||
do_check_true(b1.hasResource("install.rdf"));
|
|
||||||
do_check_false(b1.hasResource("bootstrap.js"));
|
|
||||||
|
|
||||||
shutdownManager();
|
|
||||||
do_unregister_manifest();
|
|
||||||
// check chrome reg that language pack is not registered
|
|
||||||
do_check_locale_not_registered("test-langpack");
|
|
||||||
startupManager(false);
|
|
||||||
// check chrome reg that language pack is registered
|
|
||||||
do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing");
|
|
||||||
|
|
||||||
AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b2) {
|
|
||||||
prepare_test({
|
|
||||||
"langpack-x-testing@tests.mozilla.org": [
|
|
||||||
["onUninstalling", false],
|
|
||||||
"onUninstalled"
|
|
||||||
]
|
|
||||||
});
|
|
||||||
|
|
||||||
b2.uninstall();
|
|
||||||
ensure_test_completed();
|
|
||||||
do_execute_soon(run_test_9);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tests that a locale from distribution/extensions gets installed and starts
|
|
||||||
// working immediately
|
|
||||||
function run_test_9() {
|
|
||||||
shutdownManager();
|
|
||||||
manuallyInstall(do_get_addon("test_langpack"), distroDir, "langpack-x-testing@tests.mozilla.org");
|
|
||||||
gAppInfo.version = "2.0";
|
|
||||||
startupManager(true);
|
|
||||||
|
|
||||||
AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", callback_soon(function(b1) {
|
|
||||||
do_check_neq(b1, null);
|
|
||||||
do_check_eq(b1.version, "1.0");
|
|
||||||
do_check_false(b1.appDisabled);
|
|
||||||
do_check_false(b1.userDisabled);
|
|
||||||
do_check_true(b1.isActive);
|
|
||||||
// check chrome reg that language pack is registered
|
|
||||||
do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing");
|
|
||||||
do_check_true(b1.hasResource("install.rdf"));
|
|
||||||
do_check_false(b1.hasResource("bootstrap.js"));
|
|
||||||
|
|
||||||
shutdownManager();
|
|
||||||
do_unregister_manifest();
|
|
||||||
// check chrome reg that language pack is not registered
|
|
||||||
do_check_locale_not_registered("test-langpack");
|
|
||||||
startupManager(false);
|
|
||||||
// check chrome reg that language pack is registered
|
|
||||||
do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing");
|
|
||||||
|
|
||||||
do_test_finished();
|
|
||||||
}));
|
|
||||||
}
|
|
@ -42,12 +42,6 @@ add_task(async function test_disable() {
|
|||||||
bootstrap: true,
|
bootstrap: true,
|
||||||
multiprocessCompatible: true,
|
multiprocessCompatible: true,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: "langpack@tests.mozilla.org",
|
|
||||||
name: "Test Langpack",
|
|
||||||
version: "1.0",
|
|
||||||
type: "8",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: "dictionary@tests.mozilla.org",
|
id: "dictionary@tests.mozilla.org",
|
||||||
name: "Test Dictionary",
|
name: "Test Dictionary",
|
||||||
|
@ -174,7 +174,6 @@ tags = blocklist
|
|||||||
[test_dataDirectory.js]
|
[test_dataDirectory.js]
|
||||||
[test_default_providers_pref.js]
|
[test_default_providers_pref.js]
|
||||||
[test_dictionary.js]
|
[test_dictionary.js]
|
||||||
[test_langpack.js]
|
|
||||||
[test_disable.js]
|
[test_disable.js]
|
||||||
[test_distribution.js]
|
[test_distribution.js]
|
||||||
[test_duplicateplugins.js]
|
[test_duplicateplugins.js]
|
||||||
|
Loading…
Reference in New Issue
Block a user