Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
*/
// Bug 566194 - safe mode / security & compatibility check status are not exposed in new addon manager UI
async function loadDetail(win, id) {
let loaded = waitForViewLoad(win);
// Check the detail view.
let card = win.document.querySelector(`addon-card[addon-id="${id}"]`);
EventUtils.synthesizeMouseAtCenter(
card.querySelector(".addon-name-link"),
{},
win
);
await loaded;
}
function checkMessageShown(win, type, hasButton) {
let stack = win.document.querySelector("global-warnings");
is(stack.childElementCount, 1, "There is one message");
let messageBar = stack.firstElementChild;
ok(messageBar, "There is a message bar");
is(
messageBar.localName,
"moz-message-bar",
"The message bar is a moz-message-bar"
);
is_element_visible(messageBar, "Message bar is visible");
is(messageBar.getAttribute("warning-type"), type);
if (hasButton) {
let button = messageBar.querySelector("button");
is_element_visible(button, "Button is visible");
is(button.getAttribute("action"), type, "Button action is set");
}
}
function checkNoMessages(win) {
let stack = win.document.querySelector("global-warnings");
if (stack.childElementCount) {
// The safe mode message is hidden in CSS on the plugin list.
for (let child of stack.children) {
is_element_hidden(child, "The message is hidden");
}
} else {
is(stack.childElementCount, 0, "There are no message bars");
}
}
function clickMessageAction(win) {
let stack = win.document.querySelector("global-warnings");
let button = stack.firstElementChild.querySelector("button");
EventUtils.synthesizeMouseAtCenter(button, {}, win);
}
add_task(async function checkCompatibility() {
info("Testing compatibility checking warning");
info("Setting checkCompatibility to false");
AddonManager.checkCompatibility = false;
let id = "test@mochi.test";
let extension = ExtensionTestUtils.loadExtension({
manifest: { browser_specific_settings: { gecko: { id } } },
useAddonManager: "temporary",
});
await extension.startup();
let win = await loadInitialView("extension");
// Check the extension list view.
checkMessageShown(win, "check-compatibility", true);
// Check the detail view.
await loadDetail(win, id);
checkMessageShown(win, "check-compatibility", true);
// Check other views.
let views = ["plugin", "theme"];
for (let view of views) {
await switchView(win, view);
checkMessageShown(win, "check-compatibility", true);
}
// Check the button works.
info("Clicking 'Enable' button");
clickMessageAction(win);
is(
AddonManager.checkCompatibility,
true,
"Check Compatibility pref should be cleared"
);
checkNoMessages(win);
await closeView(win);
await extension.unload();
});
add_task(async function checkSecurity() {
info("Testing update security checking warning");
var pref = "extensions.checkUpdateSecurity";
info("Setting " + pref + " pref to false");
await SpecialPowers.pushPrefEnv({
set: [[pref, false]],
});
let id = "test-security@mochi.test";
let extension = ExtensionTestUtils.loadExtension({
manifest: { browser_specific_settings: { gecko: { id } } },
useAddonManager: "temporary",
});
await extension.startup();
let win = await loadInitialView("extension");
// Check extension list view.
checkMessageShown(win, "update-security", true);
// Check detail view.
await loadDetail(win, id);
checkMessageShown(win, "update-security", true);
// Check other views.
let views = ["plugin", "theme"];
for (let view of views) {
await switchView(win, view);
checkMessageShown(win, "update-security", true);
}
// Check the button works.
info("Clicking 'Enable' button");
clickMessageAction(win);
is(
Services.prefs.prefHasUserValue(pref),
false,
"Check Update Security pref should be cleared"
);
checkNoMessages(win);
await closeView(win);
await extension.unload();
});
add_task(async function checkSafeMode() {
info("Testing safe mode warning");
let id = "test-safemode@mochi.test";
let extension = ExtensionTestUtils.loadExtension({
manifest: { browser_specific_settings: { gecko: { id } } },
useAddonManager: "temporary",
});
await extension.startup();
let win = await loadInitialView("extension");
// Check extension list view hidden.
checkNoMessages(win);
let globalWarnings = win.document.querySelector("global-warnings");
globalWarnings.inSafeMode = true;
globalWarnings.refresh();
// Check detail view.
await loadDetail(win, id);
checkMessageShown(win, "safe-mode");
// Check other views.
await switchView(win, "theme");
checkMessageShown(win, "safe-mode");
await switchView(win, "plugin");
checkNoMessages(win);
await closeView(win);
await extension.unload();
});