fune/browser/base/content/test/sync/browser_contextmenu_sendpage.js
Edouard Oger 25db2f7ed6 Bug 1434706 - Add identity.fxaccounts.enabled pref to disable Sync and FxA. r=markh
MozReview-Commit-ID: 4UuppJyOi5s

--HG--
extra : rebase_source : 706d6a9a1187e9b666074d0dd68d03eda3fb448b
2018-02-15 11:24:44 +08:00

248 lines
10 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const remoteClientsFixture = [ { id: 1, name: "Foo"}, { id: 2, name: "Bar"} ];
add_task(async function setup() {
await promiseSyncReady();
// gSync.init() is called in a requestIdleCallback. Force its initialization.
gSync.init();
await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
});
add_task(async function test_page_contextmenu() {
const sandbox = setupSendTabMocks({ syncReady: true, clientsSynced: true, remoteClients: remoteClientsFixture,
state: UIState.STATUS_SIGNED_IN, isSendableURI: true });
await openContentContextMenu("#moztext", "context-sendpagetodevice");
is(document.getElementById("context-sendpagetodevice").hidden, false, "Send tab to device is shown");
is(document.getElementById("context-sendpagetodevice").disabled, false, "Send tab to device is enabled");
checkPopup([
{ label: "Foo" },
{ label: "Bar" },
"----",
{ label: "Send to All Devices" }
]);
await hideContentContextMenu();
sandbox.restore();
});
add_task(async function test_page_contextmenu_no_remote_clients() {
const sandbox = setupSendTabMocks({ syncReady: true, clientsSynced: true, remoteClients: [],
state: UIState.STATUS_SIGNED_IN, isSendableURI: true });
await openContentContextMenu("#moztext", "context-sendpagetodevice");
is(document.getElementById("context-sendpagetodevice").hidden, false, "Send tab to device is shown");
is(document.getElementById("context-sendpagetodevice").disabled, false, "Send tab to device is enabled");
checkPopup([
{ label: "No Devices Connected", disabled: true },
"----",
{ label: "Connect Another Device..." },
{ label: "Learn About Sending Tabs..." }
]);
await hideContentContextMenu();
sandbox.restore();
});
add_task(async function test_page_contextmenu_one_remote_client() {
const sandbox = setupSendTabMocks({ syncReady: true, clientsSynced: true, remoteClients: [{ id: 1, name: "Foo"}],
state: UIState.STATUS_SIGNED_IN, isSendableURI: true });
await openContentContextMenu("#moztext", "context-sendpagetodevice");
is(document.getElementById("context-sendpagetodevice").hidden, false, "Send tab to device is shown");
is(document.getElementById("context-sendpagetodevice").disabled, false, "Send tab to device is enabled");
checkPopup([
{ label: "Foo" }
]);
await hideContentContextMenu();
sandbox.restore();
});
add_task(async function test_page_contextmenu_not_sendable() {
const sandbox = setupSendTabMocks({ syncReady: true, clientsSynced: true, remoteClients: remoteClientsFixture,
state: UIState.STATUS_SIGNED_IN, isSendableURI: false });
await openContentContextMenu("#moztext");
is(document.getElementById("context-sendpagetodevice").hidden, false, "Send tab to device is shown");
is(document.getElementById("context-sendpagetodevice").disabled, true, "Send tab to device is disabled");
checkPopup();
await hideContentContextMenu();
sandbox.restore();
});
add_task(async function test_page_contextmenu_not_synced_yet() {
const sandbox = setupSendTabMocks({ syncReady: true, clientsSynced: false, remoteClients: [],
state: UIState.STATUS_SIGNED_IN, isSendableURI: true });
await openContentContextMenu("#moztext");
is(document.getElementById("context-sendpagetodevice").hidden, false, "Send tab to device is shown");
is(document.getElementById("context-sendpagetodevice").disabled, true, "Send tab to device is disabled");
checkPopup();
await hideContentContextMenu();
sandbox.restore();
});
add_task(async function test_page_contextmenu_sync_not_ready_configured() {
const sandbox = setupSendTabMocks({ syncReady: false, clientsSynced: false, remoteClients: null,
state: UIState.STATUS_SIGNED_IN, isSendableURI: true });
await openContentContextMenu("#moztext");
is(document.getElementById("context-sendpagetodevice").hidden, false, "Send tab to device is shown");
is(document.getElementById("context-sendpagetodevice").disabled, true, "Send tab to device is disabled");
checkPopup();
await hideContentContextMenu();
sandbox.restore();
});
add_task(async function test_page_contextmenu_sync_not_ready_other_state() {
const sandbox = setupSendTabMocks({ syncReady: false, clientsSynced: false, remoteClients: null,
state: UIState.STATUS_NOT_VERIFIED, isSendableURI: true });
await openContentContextMenu("#moztext", "context-sendpagetodevice");
is(document.getElementById("context-sendpagetodevice").hidden, false, "Send tab to device is shown");
is(document.getElementById("context-sendpagetodevice").disabled, false, "Send tab to device is enabled");
checkPopup([
{ label: "Account Not Verified", disabled: true },
"----",
{ label: "Verify Your Account..." }
]);
await hideContentContextMenu();
sandbox.restore();
});
add_task(async function test_page_contextmenu_unconfigured() {
const sandbox = setupSendTabMocks({ syncReady: true, clientsSynced: true, remoteClients: null,
state: UIState.STATUS_NOT_CONFIGURED, isSendableURI: true });
await openContentContextMenu("#moztext", "context-sendpagetodevice");
is(document.getElementById("context-sendpagetodevice").hidden, false, "Send tab to device is shown");
is(document.getElementById("context-sendpagetodevice").disabled, false, "Send tab to device is enabled");
checkPopup([
{ label: "Not Connected to Sync", disabled: true },
"----",
{ label: "Sign in to Sync..." },
{ label: "Learn About Sending Tabs..." }
]);
await hideContentContextMenu();
sandbox.restore();
});
add_task(async function test_page_contextmenu_not_verified() {
const sandbox = setupSendTabMocks({ syncReady: true, clientsSynced: true, remoteClients: null,
state: UIState.STATUS_NOT_VERIFIED, isSendableURI: true });
await openContentContextMenu("#moztext", "context-sendpagetodevice");
is(document.getElementById("context-sendpagetodevice").hidden, false, "Send tab to device is shown");
is(document.getElementById("context-sendpagetodevice").disabled, false, "Send tab to device is enabled");
checkPopup([
{ label: "Account Not Verified", disabled: true },
"----",
{ label: "Verify Your Account..." }
]);
await hideContentContextMenu();
sandbox.restore();
});
add_task(async function test_page_contextmenu_login_failed() {
const syncReady = sinon.stub(gSync, "syncReady").get(() => true);
const getState = sinon.stub(UIState, "get").returns({ status: UIState.STATUS_LOGIN_FAILED });
const isSendableURI = sinon.stub(gSync, "isSendableURI").returns(true);
await openContentContextMenu("#moztext", "context-sendpagetodevice");
is(document.getElementById("context-sendpagetodevice").hidden, false, "Send tab to device is shown");
is(document.getElementById("context-sendpagetodevice").disabled, false, "Send tab to device is enabled");
checkPopup([
{ label: "Account Not Verified", disabled: true },
"----",
{ label: "Verify Your Account..." }
]);
await hideContentContextMenu();
syncReady.restore();
getState.restore();
isSendableURI.restore();
});
add_task(async function test_page_contextmenu_fxa_disabled() {
const getter = sinon.stub(gSync, "SYNC_ENABLED").get(() => false);
gSync.onSyncDisabled(); // Would have been called on gSync initialization if SYNC_ENABLED had been set.
await openContentContextMenu("#moztext");
is(document.getElementById("context-sendpagetodevice").hidden, true, "Send tab to device is hidden");
is(document.getElementById("context-sep-sendpagetodevice").hidden, true, "Separator is also hidden");
await hideContentContextMenu();
getter.restore();
[...document.querySelectorAll(".sync-ui-item")].forEach(e => e.hidden = false);
});
// We are not going to bother testing the visibility of context-sendlinktodevice
// since it uses the exact same code.
// However, browser_contextmenu.js contains tests that verify its presence.
add_task(async function teardown() {
gBrowser.removeCurrentTab();
});
function checkPopup(expectedItems = null) {
const popup = document.getElementById("context-sendpagetodevice-popup");
if (!expectedItems) {
is(popup.state, "closed", "Popup should be hidden.");
return;
}
const menuItems = popup.children;
is(menuItems.length, expectedItems.length, "Popup has the expected children count.");
for (let i = 0; i < menuItems.length; i++) {
const menuItem = menuItems[i];
const expectedItem = expectedItems[i];
if (expectedItem === "----") {
is(menuItem.nodeName, "menuseparator", "Found a separator");
continue;
}
is(menuItem.nodeName, "menuitem", "Found a menu item");
// Bug workaround, menuItem.label "…" encoding is different than ours.
is(menuItem.label.normalize("NFKC"), expectedItem.label, "Correct menu item label");
is(menuItem.disabled, !!expectedItem.disabled, "Correct menu item disabled state");
}
}
async function openContentContextMenu(selector, openSubmenuId = null) {
const contextMenu = document.getElementById("contentAreaContextMenu");
is(contextMenu.state, "closed", "checking if popup is closed");
const awaitPopupShown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
await BrowserTestUtils.synthesizeMouse(selector, 0, 0, {
type: "contextmenu",
button: 2,
shiftkey: false,
centered: true
},
gBrowser.selectedBrowser);
await awaitPopupShown;
if (openSubmenuId) {
const menuPopup = document.getElementById(openSubmenuId).menupopup;
const menuPopupPromise = BrowserTestUtils.waitForEvent(menuPopup, "popupshown");
menuPopup.showPopup();
await menuPopupPromise;
}
}
async function hideContentContextMenu() {
const contextMenu = document.getElementById("contentAreaContextMenu");
const awaitPopupHidden = BrowserTestUtils.waitForEvent(contextMenu, "popuphidden");
contextMenu.hidePopup();
await awaitPopupHidden;
}