Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

"use strict";
// Make sure that we won't trigger events for a private window.
add_task(async function test_no_show_hide_for_private_window() {
function background() {
let events = [];
browser.menus.onShown.addListener(data => events.push(data));
browser.menus.onHidden.addListener(() => events.push("onHidden"));
browser.test.onMessage.addListener(async (name, data) => {
if (name == "check-events") {
browser.test.sendMessage("events", events);
events = [];
}
if (name == "create-menu") {
let id = await new Promise(resolve => {
let mid = browser.menus.create(data, () => resolve(mid));
});
browser.test.sendMessage("menu-id", id);
}
});
}
let pb_extension = ExtensionTestUtils.loadExtension({
background,
manifest: {
browser_specific_settings: {
gecko: { id: "@private-allowed" },
},
permissions: ["menus", "tabs"],
},
incognitoOverride: "spanning",
});
let extension = ExtensionTestUtils.loadExtension({
background,
manifest: {
browser_specific_settings: {
gecko: { id: "@not-allowed" },
},
permissions: ["menus", "tabs"],
},
});
async function testEvents(ext, expected) {
ext.sendMessage("check-events");
let events = await ext.awaitMessage("events");
Assert.deepEqual(
expected,
events,
`expected events received for ${ext.id}.`
);
}
await pb_extension.startup();
await extension.startup();
extension.sendMessage("create-menu", {
title: "not_allowed",
contexts: ["all", "tools_menu"],
});
let id1 = await extension.awaitMessage("menu-id");
let extMenuId = `${makeWidgetId(extension.id)}-menuitem-${id1}`;
pb_extension.sendMessage("create-menu", {
title: "spanning_allowed",
contexts: ["all", "tools_menu"],
});
let id2 = await pb_extension.awaitMessage("menu-id");
let pb_extMenuId = `${makeWidgetId(pb_extension.id)}-menuitem-${id2}`;
// Expected menu events
let baseShownEvent = {
contexts: ["page", "all"],
viewType: "tab",
frameId: 0,
editable: false,
};
let publicShown = { menuIds: [id1], ...baseShownEvent };
let privateShown = { menuIds: [id2], ...baseShownEvent };
baseShownEvent = {
contexts: ["tools_menu"],
viewType: undefined,
editable: false,
};
let toolsShown = { menuIds: [id1], ...baseShownEvent };
let privateToolsShown = { menuIds: [id2], ...baseShownEvent };
// Run tests in non-private window
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
"about:robots"
);
// Open and close a menu on the public window.
await openContextMenu("body");
// We naturally expect both extensions here.
ok(document.getElementById(extMenuId), `menu exists ${extMenuId}`);
ok(document.getElementById(pb_extMenuId), `menu exists ${pb_extMenuId}`);
await closeContextMenu();
await testEvents(extension, [publicShown, "onHidden"]);
await testEvents(pb_extension, [privateShown, "onHidden"]);
await openToolsMenu();
ok(document.getElementById(extMenuId), `menu exists ${extMenuId}`);
ok(document.getElementById(pb_extMenuId), `menu exists ${pb_extMenuId}`);
await closeToolsMenu();
await testEvents(extension, [toolsShown, "onHidden"]);
await testEvents(pb_extension, [privateToolsShown, "onHidden"]);
// Run tests on private window
let privateWindow = await BrowserTestUtils.openNewBrowserWindow({
private: true,
});
// Open and close a menu on the private window.
let menu = await openContextMenu("body div", privateWindow);
// We should not see the "not_allowed" extension here.
ok(
!privateWindow.document.getElementById(extMenuId),
`menu does not exist ${extMenuId} in private window`
);
ok(
privateWindow.document.getElementById(pb_extMenuId),
`menu exists ${pb_extMenuId} in private window`
);
await closeContextMenu(menu);
await testEvents(extension, []);
await testEvents(pb_extension, [privateShown, "onHidden"]);
await openToolsMenu(privateWindow);
// We should not see the "not_allowed" extension here.
ok(
!privateWindow.document.getElementById(extMenuId),
`menu does not exist ${extMenuId} in private window`
);
ok(
privateWindow.document.getElementById(pb_extMenuId),
`menu exists ${pb_extMenuId} in private window`
);
await closeToolsMenu(undefined, privateWindow);
await testEvents(extension, []);
await testEvents(pb_extension, [privateToolsShown, "onHidden"]);
await extension.unload();
await pb_extension.unload();
BrowserTestUtils.removeTab(tab);
await BrowserTestUtils.closeWindow(privateWindow);
});