forked from mirrors/gecko-dev
166 lines
5.6 KiB
JavaScript
166 lines
5.6 KiB
JavaScript
"use strict";
|
|
|
|
var gTestTab;
|
|
var gContentAPI;
|
|
var gContentWindow;
|
|
|
|
var hasPocket = Services.prefs.getBoolPref("extensions.pocket.enabled");
|
|
var hasQuit = AppConstants.platform != "macosx";
|
|
|
|
requestLongerTimeout(2);
|
|
|
|
function getExpectedTargets() {
|
|
return [
|
|
"accountStatus",
|
|
"addons",
|
|
"appMenu",
|
|
"backForward",
|
|
"customize",
|
|
"devtools",
|
|
"help",
|
|
"home",
|
|
"library",
|
|
"pageActionButton",
|
|
"pageAction-bookmark",
|
|
"pageAction-copyURL",
|
|
"pageAction-emailLink",
|
|
"pageAction-sendToDevice",
|
|
...(hasPocket ? ["pocket"] : []),
|
|
"privateWindow",
|
|
...(hasQuit ? ["quit"] : []),
|
|
"readerMode-urlBar",
|
|
"screenshots",
|
|
"trackingProtection",
|
|
"urlbar",
|
|
];
|
|
}
|
|
|
|
add_task(setup_UITourTest);
|
|
|
|
add_UITour_task(async function test_availableTargets() {
|
|
await ensureScreenshotsEnabled();
|
|
let data = await getConfigurationPromise("availableTargets");
|
|
let expecteds = getExpectedTargets();
|
|
ok_targets(data, expecteds);
|
|
ok(UITour.availableTargetsCache.has(window),
|
|
"Targets should now be cached");
|
|
});
|
|
|
|
add_UITour_task(async function test_availableTargets_changeWidgets() {
|
|
CustomizableUI.addWidgetToArea("bookmarks-menu-button", CustomizableUI.AREA_NAVBAR, 0);
|
|
ok(!UITour.availableTargetsCache.has(window),
|
|
"Targets should be evicted from cache after widget change");
|
|
let data = await getConfigurationPromise("availableTargets");
|
|
let expecteds = getExpectedTargets();
|
|
expecteds = ["bookmarks", ...expecteds];
|
|
ok_targets(data, expecteds);
|
|
|
|
ok(UITour.availableTargetsCache.has(window),
|
|
"Targets should now be cached again");
|
|
CustomizableUI.reset();
|
|
ok(!UITour.availableTargetsCache.has(window),
|
|
"Targets should not be cached after reset");
|
|
});
|
|
|
|
add_UITour_task(async function test_availableTargets_search() {
|
|
Services.prefs.setBoolPref("browser.search.widget.inNavBar", true);
|
|
try {
|
|
let data = await getConfigurationPromise("availableTargets");
|
|
let expecteds = getExpectedTargets();
|
|
expecteds = ["search", "searchIcon", ...expecteds];
|
|
ok_targets(data, expecteds);
|
|
} finally {
|
|
Services.prefs.clearUserPref("browser.search.widget.inNavBar");
|
|
}
|
|
});
|
|
|
|
add_UITour_task(async function test_availableTargets_removeUrlbarPageActionsAll() {
|
|
pageActionsHelper.setActionsUrlbarState(false);
|
|
UITour.clearAvailableTargetsCache();
|
|
let data = await getConfigurationPromise("availableTargets");
|
|
let expecteds = getExpectedTargets();
|
|
ok_targets(data, expecteds);
|
|
let expectedActions = [
|
|
[ "pocket", "pageAction-panel-pocket" ],
|
|
[ "screenshots", "pageAction-panel-screenshots" ],
|
|
[ "pageAction-bookmark", "pageAction-panel-bookmark" ],
|
|
[ "pageAction-copyURL", "pageAction-panel-copyURL" ],
|
|
[ "pageAction-emailLink", "pageAction-panel-emailLink" ],
|
|
[ "pageAction-sendToDevice", "pageAction-panel-sendToDevice" ],
|
|
];
|
|
for (let [ targetName, expectedNodeId ] of expectedActions) {
|
|
await assertTargetNode(targetName, expectedNodeId);
|
|
}
|
|
pageActionsHelper.restoreActionsUrlbarState();
|
|
});
|
|
|
|
add_UITour_task(async function test_availableTargets_addUrlbarPageActionsAll() {
|
|
pageActionsHelper.setActionsUrlbarState(true);
|
|
UITour.clearAvailableTargetsCache();
|
|
let data = await getConfigurationPromise("availableTargets");
|
|
let expecteds = getExpectedTargets();
|
|
ok_targets(data, expecteds);
|
|
let expectedActions = [
|
|
[ "pocket", "pocket-button-box" ],
|
|
[ "screenshots", "pageAction-urlbar-screenshots" ],
|
|
[ "pageAction-bookmark", "star-button-box" ],
|
|
[ "pageAction-copyURL", "pageAction-urlbar-copyURL" ],
|
|
[ "pageAction-emailLink", "pageAction-urlbar-emailLink" ],
|
|
[ "pageAction-sendToDevice", "pageAction-urlbar-sendToDevice" ],
|
|
];
|
|
for (let [ targetName, expectedNodeId ] of expectedActions) {
|
|
await assertTargetNode(targetName, expectedNodeId);
|
|
}
|
|
pageActionsHelper.restoreActionsUrlbarState();
|
|
});
|
|
|
|
function ok_targets(actualData, expectedTargets) {
|
|
// Depending on how soon after page load this is called, the selected tab icon
|
|
// may or may not be showing the loading throbber. Check for its presence and
|
|
// insert it into expectedTargets if it's visible.
|
|
let selectedTabIcon =
|
|
document.getAnonymousElementByAttribute(gBrowser.selectedTab,
|
|
"anonid",
|
|
"tab-icon-image");
|
|
if (selectedTabIcon && UITour.isElementVisible(selectedTabIcon))
|
|
expectedTargets.push("selectedTabIcon");
|
|
|
|
ok(Array.isArray(actualData.targets), "data.targets should be an array");
|
|
is(actualData.targets.sort().toString(), expectedTargets.sort().toString(),
|
|
"Targets should be as expected");
|
|
}
|
|
|
|
async function assertTargetNode(targetName, expectedNodeId) {
|
|
let target = await UITour.getTarget(window, targetName);
|
|
is(target.node.id, expectedNodeId, "UITour should get the right target node");
|
|
}
|
|
|
|
var pageActionsHelper = {
|
|
setActionsUrlbarState(inUrlbar) {
|
|
this._originalStates = [];
|
|
PageActions._actionsByID.forEach(action => {
|
|
this._originalStates.push([ action, action.shownInUrlbar ]);
|
|
action.shownInUrlbar = inUrlbar;
|
|
});
|
|
},
|
|
|
|
restoreActionsUrlbarState() {
|
|
if (!this._originalStates) {
|
|
return;
|
|
}
|
|
for (let [ action, originalState] of this._originalStates) {
|
|
action.shownInUrlbar = originalState;
|
|
}
|
|
this._originalStates = null;
|
|
}
|
|
};
|
|
|
|
function ensureScreenshotsEnabled() {
|
|
SpecialPowers.pushPrefEnv({ set: [
|
|
[ "extensions.screenshots.disabled", false ],
|
|
[ "extensions.screenshots.system-disabled", false ]
|
|
]});
|
|
return BrowserTestUtils.waitForCondition(() => {
|
|
return PageActions.actionForID("screenshots");
|
|
}, "Should enable Screenshots");
|
|
}
|