Mypal68/devtools/client/aboutdebugging/test/browser_addons_debug_info.js
2022-04-16 07:41:55 +03:00

177 lines
5.0 KiB
JavaScript

"use strict";
const { Preferences } = ChromeUtils.import(
"resource://gre/modules/Preferences.jsm"
);
const UUID_REGEX = /^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;
const SHOW_SYSTEM_ADDONS_PREF = "devtools.aboutdebugging.showHiddenAddons";
function testFilePath(container, expectedFilePath) {
// Verify that the path to the install location is shown next to its label.
const filePath = container.querySelector(".file-path");
ok(filePath, "file path is in DOM");
ok(
filePath.textContent.endsWith(expectedFilePath),
"file path is set correctly"
);
is(
filePath.previousElementSibling.textContent,
"Location",
"file path has label"
);
}
add_task(async function testWebExtension() {
const addonId = "test-devtools-webextension-nobg@mozilla.org";
const addonName = "test-devtools-webextension-nobg";
const { tab, document } = await openAboutDebugging("addons");
await waitForInitialAddonList(document);
const addonFile = ExtensionTestCommon.generateXPI({
manifest: {
name: addonName,
applications: {
gecko: { id: addonId },
},
},
});
registerCleanupFunction(() => addonFile.remove(false));
await installAddon({
document,
file: addonFile,
name: addonName,
});
const container = document.querySelector(`[data-addon-id="${addonId}"]`);
testFilePath(container, addonFile.leafName);
const extensionID = container.querySelector(".extension-id span");
ok(extensionID.textContent === "test-devtools-webextension-nobg@mozilla.org");
const internalUUID = container.querySelector(".internal-uuid span");
ok(internalUUID.textContent.match(UUID_REGEX), "internalUUID is correct");
const manifestURL = container.querySelector(".manifest-url");
ok(
manifestURL.href.startsWith("moz-extension://"),
"href for manifestURL exists"
);
await uninstallAddon({ document, id: addonId, name: addonName });
await closeAboutDebugging(tab);
});
add_task(async function testTemporaryWebExtension() {
const addonName = "test-devtools-webextension-noid";
const { tab, document } = await openAboutDebugging("addons");
await waitForInitialAddonList(document);
const addonFile = ExtensionTestCommon.generateXPI({
manifest: {
name: addonName,
},
});
registerCleanupFunction(() => addonFile.remove(false));
await installAddon({
document,
file: addonFile,
name: addonName,
});
const addons = document.querySelectorAll(
"#temporary-extensions .addon-target-container"
);
// Assuming that our temporary add-on is now at the top.
const container = addons[addons.length - 1];
const addonId = container.dataset.addonId;
const extensionID = container.querySelector(".extension-id span");
ok(extensionID.textContent.endsWith("@temporary-addon"));
const temporaryID = container.querySelector(".temporary-id-url");
ok(temporaryID, "Temporary ID message does appear");
await uninstallAddon({ document, id: addonId, name: addonName });
await closeAboutDebugging(tab);
});
add_task(async function testUnknownManifestProperty() {
const addonId = "test-devtools-webextension-unknown-prop@mozilla.org";
const addonName = "test-devtools-webextension-unknown-prop";
const { tab, document } = await openAboutDebugging("addons");
await waitForInitialAddonList(document);
const addonFile = ExtensionTestCommon.generateXPI({
manifest: {
name: addonName,
applications: {
gecko: { id: addonId },
},
wrong_manifest_property_name: {},
},
});
registerCleanupFunction(() => addonFile.remove(false));
await installAddon({
document,
file: addonFile,
name: addonName,
});
info("Wait until the addon appears in about:debugging");
const container = await waitUntilAddonContainer(addonName, document);
info("Wait until the installation message appears for the new addon");
await waitUntilElement(".addon-target-messages", container);
const messages = container.querySelectorAll(".addon-target-message");
ok(messages.length === 1, "there is one message");
ok(
messages[0].textContent.match(
/Error processing wrong_manifest_property_name/
),
"the message is helpful"
);
ok(
messages[0].classList.contains("addon-target-warning-message"),
"the message is a warning"
);
await uninstallAddon({ document, id: addonId, name: addonName });
await closeAboutDebugging(tab);
});
add_task(async function testSystemAddonsHidden() {
await pushPref(SHOW_SYSTEM_ADDONS_PREF, false);
const { document } = await openAboutDebugging("addons");
const systemAddonsShown = () =>
!!document.getElementById("system-extensions");
await waitForInitialAddonList(document);
ok(!systemAddonsShown(), "System extensions are hidden");
Preferences.set(SHOW_SYSTEM_ADDONS_PREF, true);
await waitUntil(systemAddonsShown);
ok(systemAddonsShown(), "System extensions are now shown");
Preferences.set(SHOW_SYSTEM_ADDONS_PREF, false);
await waitUntil(() => !systemAddonsShown());
ok(!systemAddonsShown(), "System extensions are hidden again");
});