Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
/**
* Test QuickActions.
*/
"use strict";
add_setup(async function setup() {
await SpecialPowers.pushPrefEnv({
set: [
["browser.urlbar.quickactions.enabled", true],
["browser.urlbar.secondaryActions.featureGate", true],
],
});
});
const LOAD_TYPE = {
CURRENT_TAB: 1,
NEW_TAB: 2,
PRE_LOADED: 3,
};
let COMMANDS_TESTS = [
{
cmd: "open view",
uri: "about:firefoxview",
loadType: LOAD_TYPE.PRE_LOADED,
testFun: async () => {
await BrowserTestUtils.waitForCondition(() => {
return (
window.gBrowser.selectedBrowser.currentURI.spec == "about:firefoxview"
);
});
return true;
},
},
{
cmd: "add-ons",
uri: "about:addons",
testFun: async () => isSelected("button[name=discover]"),
},
{
cmd: "extensions",
uri: "about:addons",
numTabPress: 2,
testFun: async () => isSelected("button[name=extension]"),
},
{
cmd: "themes",
uri: "about:addons",
numTabPress: 2,
testFun: async () => isSelected("button[name=theme]"),
},
{
cmd: "add-ons",
setup: async () => {
const onLoad = BrowserTestUtils.browserLoaded(
gBrowser.selectedBrowser,
false,
);
BrowserTestUtils.startLoadingURIString(
gBrowser.selectedBrowser,
);
await onLoad;
},
uri: "about:addons",
loadType: LOAD_TYPE.NEW_TAB,
testFun: async () => isSelected("button[name=discover]"),
},
{
cmd: "extensions",
setup: async () => {
const onLoad = BrowserTestUtils.browserLoaded(
gBrowser.selectedBrowser,
false,
);
BrowserTestUtils.startLoadingURIString(
gBrowser.selectedBrowser,
);
await onLoad;
},
uri: "about:addons",
loadType: LOAD_TYPE.NEW_TAB,
testFun: async () => isSelected("button[name=extension]"),
numTabPress: 2,
},
{
cmd: "themes",
setup: async () => {
const onLoad = BrowserTestUtils.browserLoaded(
gBrowser.selectedBrowser,
false,
);
BrowserTestUtils.startLoadingURIString(
gBrowser.selectedBrowser,
);
await onLoad;
},
uri: "about:addons",
loadType: LOAD_TYPE.NEW_TAB,
testFun: async () => isSelected("button[name=theme]"),
numTabPress: 2,
},
{
cmd: "library",
testFun: async () => {
await BrowserTestUtils.waitForCondition(() => {
return Services.wm.getMostRecentWindow("Places:Organizer");
});
const libraryWindow = Services.wm.getMostRecentWindow("Places:Organizer");
libraryWindow?.close();
return true;
},
},
];
let isSelected = async selector =>
SpecialPowers.spawn(gBrowser.selectedBrowser, [selector], arg => {
return ContentTaskUtils.waitForCondition(() =>
content.document.querySelector(arg)?.hasAttribute("selected")
);
});
add_task(async function test_pages() {
for (const {
cmd,
uri,
setup,
loadType,
testFun,
numTabPress = 1,
} of COMMANDS_TESTS) {
info(`Testing ${cmd} command is triggered`);
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
if (setup) {
info("Setup");
await setup();
}
let onLoad;
if (loadType == LOAD_TYPE.NEW_TAB) {
onLoad = BrowserTestUtils.waitForNewTab(gBrowser, uri, true);
} else if (uri) {
onLoad = BrowserTestUtils.browserLoaded(
gBrowser.selectedBrowser,
false,
uri
);
} else {
onLoad = null;
}
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: cmd,
});
for (let i = 0; i < numTabPress; i++) {
EventUtils.synthesizeKey("KEY_Tab", {}, window);
await flakyWaitForManyIdles();
}
EventUtils.synthesizeKey("KEY_Enter", {}, window);
let newTab;
if (loadType == LOAD_TYPE.PRE_LOADED) {
newTab = gBrowser.selectedTab;
} else if (onLoad) {
newTab = await onLoad;
} else {
newTab = null;
}
Assert.ok(
await testFun(),
`The command "${cmd}" passed completed its test`
);
if ([LOAD_TYPE.NEW_TAB, LOAD_TYPE.PRE_LOADED].includes(loadType)) {
await BrowserTestUtils.removeTab(newTab);
}
await BrowserTestUtils.removeTab(tab);
}
});