Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
const URL =
"data:text/html;charset=utf8,test for dynamically registering " +
"and unregistering tools across multiple tabs";
let tab1, tab2, modifiedPref;
add_task(async function () {
tab1 = await openToolboxOptionsInNewTab();
tab2 = await openToolboxOptionsInNewTab();
await testToggleTools();
await cleanup();
});
async function openToolboxOptionsInNewTab() {
const tab = await addTab(URL);
const toolbox = await gDevTools.showToolboxForTab(tab);
const doc = toolbox.doc;
const panel = await toolbox.selectTool("options");
const { id } = panel.panelDoc.querySelector(
"#default-tools-box input[type=checkbox]:not([data-unsupported], [checked])"
);
return {
tab,
toolbox,
doc,
panelWin: panel.panelWin,
// This is a getter becuse toolbox tools list gets re-setup every time there
// is a tool-registered or tool-undregistered event.
get checkbox() {
return panel.panelDoc.getElementById(id);
},
};
}
async function testToggleTools() {
is(tab1.checkbox.id, tab2.checkbox.id, "Default tool box should be in sync.");
const toolId = tab1.checkbox.id;
const testTool = gDevTools.getDefaultTools().find(tool => tool.id === toolId);
// Store modified pref names so that they can be cleared on error.
modifiedPref = testTool.visibilityswitch;
info(`Registering tool ${toolId} in the first tab.`);
await toggleTool(tab1, toolId);
info(`Unregistering tool ${toolId} in the first tab.`);
await toggleTool(tab1, toolId);
info(`Registering tool ${toolId} in the second tab.`);
await toggleTool(tab2, toolId);
info(`Unregistering tool ${toolId} in the second tab.`);
await toggleTool(tab2, toolId);
info(`Registering tool ${toolId} in the first tab.`);
await toggleTool(tab1, toolId);
info(`Unregistering tool ${toolId} in the second tab.`);
await toggleTool(tab2, toolId);
}
async function toggleTool({ panelWin, checkbox }, toolId) {
const prevChecked = checkbox.checked;
(prevChecked ? checkRegistered : checkUnregistered)(toolId);
const onToggleTool = gDevTools.once(
`tool-${prevChecked ? "unregistered" : "registered"}`
);
EventUtils.sendMouseEvent({ type: "click" }, checkbox, panelWin);
const id = await onToggleTool;
is(id, toolId, `Correct event for ${toolId} was fired`);
// await new Promise(resolve => setTimeout(resolve, 60000));
(prevChecked ? checkUnregistered : checkRegistered)(toolId);
}
async function checkUnregistered(toolId) {
ok(
!getToolboxTab(tab1.doc, toolId),
`Tab for unregistered tool ${toolId} is not present in first toolbox`
);
ok(
!tab1.checkbox.checked,
`Checkbox for unregistered tool ${toolId} is not checked in first toolbox`
);
ok(
!getToolboxTab(tab2.doc, toolId),
`Tab for unregistered tool ${toolId} is not present in second toolbox`
);
ok(
!tab2.checkbox.checked,
`Checkbox for unregistered tool ${toolId} is not checked in second toolbox`
);
}
function checkRegistered(toolId) {
ok(
getToolboxTab(tab1.doc, toolId),
`Tab for registered tool ${toolId} is present in first toolbox`
);
ok(
tab1.checkbox.checked,
`Checkbox for registered tool ${toolId} is checked in first toolbox`
);
ok(
getToolboxTab(tab2.doc, toolId),
`Tab for registered tool ${toolId} is present in second toolbox`
);
ok(
tab2.checkbox.checked,
`Checkbox for registered tool ${toolId} is checked in second toolbox`
);
}
async function cleanup() {
await tab1.toolbox.destroy();
await tab2.toolbox.destroy();
gBrowser.removeCurrentTab();
gBrowser.removeCurrentTab();
Services.prefs.clearUserPref(modifiedPref);
tab1 = tab2 = modifiedPref = null;
}