115 lines
2.8 KiB
JavaScript
115 lines
2.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
function promiseLayout() {
|
|
// Wait for layout to have happened.
|
|
return new Promise(resolve =>
|
|
requestAnimationFrame(() => requestAnimationFrame(resolve))
|
|
);
|
|
}
|
|
|
|
add_setup(async function () {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["identity.fxaccounts.enabled", true]],
|
|
});
|
|
|
|
registerCleanupFunction(() => CustomizableUI.reset());
|
|
});
|
|
|
|
async function withOpenSendTabToolbarMenu(callback) {
|
|
const button = document.getElementById("send-tab-button");
|
|
const popup = button.querySelector("menupopup");
|
|
|
|
const popupShownPromise = BrowserTestUtils.waitForEvent(popup, "popupshown");
|
|
|
|
try {
|
|
button.click();
|
|
await popupShownPromise;
|
|
await callback(popup);
|
|
} finally {
|
|
popup.hidePopup();
|
|
}
|
|
}
|
|
|
|
function checkPopup(expectedItems, popup) {
|
|
is(popup.state, "open", "Popup should be open.");
|
|
const menuItems = popup.children;
|
|
for (let i = 0; i < menuItems.length; i++) {
|
|
const menuItem = menuItems[i];
|
|
const expectedItem = expectedItems[i];
|
|
if (expectedItem.isSeparator) {
|
|
is(menuItem.nodeName, "menuseparator", "Should have found a separator");
|
|
continue;
|
|
}
|
|
is(menuItem.nodeName, "menuitem", "Should have found a menu item");
|
|
is(
|
|
menuItem.label,
|
|
expectedItem.label,
|
|
"Should have menu item label: " + expectedItem.label
|
|
);
|
|
is(
|
|
menuItem.disabled,
|
|
!!expectedItem.disabled,
|
|
"Should have correct menu item disabled state"
|
|
);
|
|
}
|
|
is(
|
|
menuItems.length,
|
|
expectedItems.length,
|
|
"Popup has the expected child count"
|
|
);
|
|
}
|
|
|
|
add_task(async function test_toolbar_button_signed_in() {
|
|
const sandbox = setupSendTabMocks({
|
|
fxaDevices: [
|
|
{
|
|
id: 1,
|
|
name: "Foo",
|
|
availableCommands: {
|
|
"https://identity.mozilla.com/cmd/open-uri": "baz",
|
|
},
|
|
lastAccessTime: Date.now(),
|
|
},
|
|
{
|
|
id: 2,
|
|
name: "Bar",
|
|
availableCommands: {
|
|
"https://identity.mozilla.com/cmd/open-uri": "qux",
|
|
},
|
|
lastAccessTime: Date.now() + 60000,
|
|
},
|
|
],
|
|
});
|
|
|
|
await BrowserTestUtils.openNewForegroundTab(gBrowser, "https://example.com/");
|
|
|
|
CustomizableUI.addWidgetToArea(
|
|
"send-tab-button",
|
|
CustomizableUI.AREA_NAVBAR,
|
|
0
|
|
);
|
|
await promiseLayout();
|
|
|
|
const [allDevicesLabel, manageDevicesLabel] =
|
|
gSync.fluentStrings.formatValuesSync([
|
|
"account-send-to-all-devices-titlecase",
|
|
"account-manage-devices-titlecase",
|
|
]);
|
|
|
|
await withOpenSendTabToolbarMenu(
|
|
checkPopup.bind(null, [
|
|
{ label: "Bar" },
|
|
{ label: "Foo" },
|
|
{ isSeparator: true },
|
|
{ label: allDevicesLabel },
|
|
{ label: manageDevicesLabel },
|
|
])
|
|
);
|
|
|
|
sandbox.restore();
|
|
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
|
});
|