113 lines
3.1 KiB
JavaScript
113 lines
3.1 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
const { XPIExports } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/addons/XPIExports.sys.mjs"
|
|
);
|
|
|
|
const UUID_PATTERN =
|
|
/^\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}$/i;
|
|
|
|
const ADDONS = [
|
|
{
|
|
id: "addon1@tests.mozilla.org",
|
|
name: "Test 1",
|
|
},
|
|
{
|
|
id: "addon2@tests.mozilla.org",
|
|
name: "Real Test 2",
|
|
},
|
|
];
|
|
|
|
let xpis;
|
|
|
|
add_task(async function setup() {
|
|
Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false);
|
|
|
|
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9");
|
|
await promiseStartupManager();
|
|
|
|
xpis = await Promise.all(
|
|
ADDONS.map(info =>
|
|
createTempWebExtensionFile({
|
|
manifest: {
|
|
name: info.name,
|
|
browser_specific_settings: { gecko: { id: info.id } },
|
|
},
|
|
})
|
|
)
|
|
);
|
|
});
|
|
|
|
add_task(async function test_getter_and_setter() {
|
|
await promiseInstallFile(xpis[0]);
|
|
|
|
let addon = await AddonManager.getAddonByID(ADDONS[0].id);
|
|
Assert.notEqual(addon, null);
|
|
Assert.notEqual(addon.syncGUID, null);
|
|
Assert.ok(UUID_PATTERN.test(addon.syncGUID));
|
|
|
|
let newGUID = "foo";
|
|
|
|
addon.syncGUID = newGUID;
|
|
Assert.equal(newGUID, addon.syncGUID);
|
|
|
|
// Verify change made it to DB.
|
|
let newAddon = await AddonManager.getAddonByID(ADDONS[0].id);
|
|
Assert.notEqual(newAddon, null);
|
|
Assert.equal(newGUID, newAddon.syncGUID);
|
|
});
|
|
|
|
add_task(async function test_fetch_by_guid_unknown_guid() {
|
|
let addon = await XPIExports.XPIProvider.getAddonBySyncGUID("XXXX");
|
|
Assert.equal(null, addon);
|
|
});
|
|
|
|
// Ensure setting an extension to an existing syncGUID results in error.
|
|
add_task(async function test_error_on_duplicate_syncguid_insert() {
|
|
await promiseInstallAllFiles(xpis);
|
|
|
|
let addons = await AddonManager.getAddonsByIDs(ADDONS.map(a => a.id));
|
|
let initialGUID = addons[1].syncGUID;
|
|
|
|
Assert.throws(
|
|
() => {
|
|
addons[1].syncGUID = addons[0].syncGUID;
|
|
},
|
|
/Addon sync GUID conflict/,
|
|
"Assigning conflicting sync guids throws"
|
|
);
|
|
|
|
await promiseRestartManager();
|
|
|
|
let addon = await AddonManager.getAddonByID(ADDONS[1].id);
|
|
Assert.equal(initialGUID, addon.syncGUID);
|
|
});
|
|
|
|
add_task(async function test_fetch_by_guid_known_guid() {
|
|
let addon = await AddonManager.getAddonByID(ADDONS[0].id);
|
|
Assert.notEqual(null, addon);
|
|
Assert.notEqual(null, addon.syncGUID);
|
|
|
|
let syncGUID = addon.syncGUID;
|
|
|
|
let newAddon = await XPIExports.XPIProvider.getAddonBySyncGUID(syncGUID);
|
|
Assert.notEqual(null, newAddon);
|
|
Assert.equal(syncGUID, newAddon.syncGUID);
|
|
});
|
|
|
|
add_task(async function test_addon_manager_get_by_sync_guid() {
|
|
let addon = await AddonManager.getAddonByID(ADDONS[0].id);
|
|
Assert.notEqual(null, addon.syncGUID);
|
|
|
|
let syncGUID = addon.syncGUID;
|
|
|
|
let newAddon = await AddonManager.getAddonBySyncGUID(syncGUID);
|
|
Assert.notEqual(null, newAddon);
|
|
Assert.equal(addon.id, newAddon.id);
|
|
Assert.equal(syncGUID, newAddon.syncGUID);
|
|
|
|
let missing = await AddonManager.getAddonBySyncGUID("DOES_NOT_EXIST");
|
|
Assert.equal(undefined, missing);
|
|
});
|