forked from mirrors/gecko-dev
284 lines
11 KiB
JavaScript
284 lines
11 KiB
JavaScript
/*
|
|
* Test the Permissions section in the Control Center.
|
|
*/
|
|
|
|
const PERMISSIONS_PAGE = getRootDirectory(gTestPath).replace("chrome://mochitests/content", "https://example.com") + "permissions.html";
|
|
const kStrictKeyPressEvents =
|
|
SpecialPowers.getBoolPref("dom.keyboardevent.keypress.dispatch_non_printable_keys_only_system_group_in_content");
|
|
|
|
function openIdentityPopup() {
|
|
let promise = BrowserTestUtils.waitForEvent(gIdentityHandler._identityPopup, "popupshown");
|
|
gIdentityHandler._identityBox.click();
|
|
return promise;
|
|
}
|
|
|
|
function closeIdentityPopup() {
|
|
let promise = BrowserTestUtils.waitForEvent(gIdentityHandler._identityPopup, "popuphidden");
|
|
gIdentityHandler._identityPopup.hidePopup();
|
|
return promise;
|
|
}
|
|
|
|
add_task(async function testMainViewVisible() {
|
|
await BrowserTestUtils.withNewTab(PERMISSIONS_PAGE, async function() {
|
|
let permissionsList = document.getElementById("identity-popup-permission-list");
|
|
let emptyLabel = permissionsList.nextElementSibling.nextElementSibling;
|
|
|
|
await openIdentityPopup();
|
|
|
|
ok(!BrowserTestUtils.is_hidden(emptyLabel), "List of permissions is empty");
|
|
|
|
await closeIdentityPopup();
|
|
|
|
SitePermissions.set(gBrowser.currentURI, "camera", SitePermissions.ALLOW);
|
|
|
|
await openIdentityPopup();
|
|
|
|
ok(BrowserTestUtils.is_hidden(emptyLabel), "List of permissions is not empty");
|
|
|
|
let labelText = SitePermissions.getPermissionLabel("camera");
|
|
let labels = permissionsList.querySelectorAll(".identity-popup-permission-label");
|
|
is(labels.length, 1, "One permission visible in main view");
|
|
is(labels[0].textContent, labelText, "Correct value");
|
|
|
|
let img = permissionsList.querySelector("image.identity-popup-permission-icon");
|
|
ok(img, "There is an image for the permissions");
|
|
ok(img.classList.contains("camera-icon"), "proper class is in image class");
|
|
|
|
await closeIdentityPopup();
|
|
|
|
SitePermissions.remove(gBrowser.currentURI, "camera");
|
|
|
|
await openIdentityPopup();
|
|
|
|
ok(!BrowserTestUtils.is_hidden(emptyLabel), "List of permissions is empty");
|
|
|
|
await closeIdentityPopup();
|
|
});
|
|
});
|
|
|
|
add_task(async function testIdentityIcon() {
|
|
await BrowserTestUtils.withNewTab(PERMISSIONS_PAGE, function() {
|
|
SitePermissions.set(gBrowser.currentURI, "geo", SitePermissions.ALLOW);
|
|
|
|
ok(gIdentityHandler._identityBox.classList.contains("grantedPermissions"),
|
|
"identity-box signals granted permissions");
|
|
|
|
SitePermissions.remove(gBrowser.currentURI, "geo");
|
|
|
|
ok(!gIdentityHandler._identityBox.classList.contains("grantedPermissions"),
|
|
"identity-box doesn't signal granted permissions");
|
|
|
|
SitePermissions.set(gBrowser.currentURI, "camera", SitePermissions.BLOCK);
|
|
|
|
ok(!gIdentityHandler._identityBox.classList.contains("grantedPermissions"),
|
|
"identity-box doesn't signal granted permissions");
|
|
|
|
SitePermissions.set(gBrowser.currentURI, "cookie", SitePermissions.ALLOW_COOKIES_FOR_SESSION);
|
|
|
|
ok(gIdentityHandler._identityBox.classList.contains("grantedPermissions"),
|
|
"identity-box signals granted permissions");
|
|
|
|
SitePermissions.remove(gBrowser.currentURI, "geo");
|
|
SitePermissions.remove(gBrowser.currentURI, "camera");
|
|
SitePermissions.remove(gBrowser.currentURI, "cookie");
|
|
});
|
|
});
|
|
|
|
add_task(async function testCancelPermission() {
|
|
await BrowserTestUtils.withNewTab(PERMISSIONS_PAGE, async function() {
|
|
let permissionsList = document.getElementById("identity-popup-permission-list");
|
|
let emptyLabel = permissionsList.nextElementSibling.nextElementSibling;
|
|
|
|
SitePermissions.set(gBrowser.currentURI, "geo", SitePermissions.ALLOW);
|
|
SitePermissions.set(gBrowser.currentURI, "camera", SitePermissions.BLOCK);
|
|
|
|
await openIdentityPopup();
|
|
|
|
ok(BrowserTestUtils.is_hidden(emptyLabel), "List of permissions is not empty");
|
|
|
|
let cancelButtons = permissionsList
|
|
.querySelectorAll(".identity-popup-permission-remove-button");
|
|
|
|
cancelButtons[0].click();
|
|
let labels = permissionsList.querySelectorAll(".identity-popup-permission-label");
|
|
is(labels.length, 1, "One permission should be removed");
|
|
cancelButtons[1].click();
|
|
labels = permissionsList.querySelectorAll(".identity-popup-permission-label");
|
|
is(labels.length, 0, "One permission should be removed");
|
|
|
|
await closeIdentityPopup();
|
|
});
|
|
});
|
|
|
|
add_task(async function testPermissionHints() {
|
|
await BrowserTestUtils.withNewTab(PERMISSIONS_PAGE, async function(browser) {
|
|
let permissionsList = document.getElementById("identity-popup-permission-list");
|
|
let emptyHint = document.getElementById("identity-popup-permission-empty-hint");
|
|
let reloadHint = document.getElementById("identity-popup-permission-reload-hint");
|
|
|
|
await openIdentityPopup();
|
|
|
|
ok(!BrowserTestUtils.is_hidden(emptyHint), "Empty hint is visible");
|
|
ok(BrowserTestUtils.is_hidden(reloadHint), "Reload hint is hidden");
|
|
|
|
await closeIdentityPopup();
|
|
|
|
SitePermissions.set(gBrowser.currentURI, "geo", SitePermissions.ALLOW);
|
|
SitePermissions.set(gBrowser.currentURI, "camera", SitePermissions.BLOCK);
|
|
|
|
await openIdentityPopup();
|
|
|
|
ok(BrowserTestUtils.is_hidden(emptyHint), "Empty hint is hidden");
|
|
ok(BrowserTestUtils.is_hidden(reloadHint), "Reload hint is hidden");
|
|
|
|
let cancelButtons = permissionsList
|
|
.querySelectorAll(".identity-popup-permission-remove-button");
|
|
SitePermissions.remove(gBrowser.currentURI, "camera");
|
|
|
|
cancelButtons[0].click();
|
|
ok(BrowserTestUtils.is_hidden(emptyHint), "Empty hint is hidden");
|
|
ok(!BrowserTestUtils.is_hidden(reloadHint), "Reload hint is visible");
|
|
|
|
cancelButtons[1].click();
|
|
ok(BrowserTestUtils.is_hidden(emptyHint), "Empty hint is hidden");
|
|
ok(!BrowserTestUtils.is_hidden(reloadHint), "Reload hint is visible");
|
|
|
|
await closeIdentityPopup();
|
|
let loaded = BrowserTestUtils.browserLoaded(browser);
|
|
BrowserTestUtils.loadURI(browser, PERMISSIONS_PAGE);
|
|
await loaded;
|
|
await openIdentityPopup();
|
|
|
|
ok(!BrowserTestUtils.is_hidden(emptyHint), "Empty hint is visible after reloading");
|
|
ok(BrowserTestUtils.is_hidden(reloadHint), "Reload hint is hidden after reloading");
|
|
|
|
await closeIdentityPopup();
|
|
});
|
|
});
|
|
|
|
add_task(async function testPermissionIcons() {
|
|
await BrowserTestUtils.withNewTab(PERMISSIONS_PAGE, function() {
|
|
SitePermissions.set(gBrowser.currentURI, "camera", SitePermissions.ALLOW);
|
|
SitePermissions.set(gBrowser.currentURI, "geo", SitePermissions.BLOCK);
|
|
|
|
let geoIcon = gIdentityHandler._identityBox
|
|
.querySelector(".blocked-permission-icon[data-permission-id='geo']");
|
|
ok(geoIcon.hasAttribute("showing"), "blocked permission icon is shown");
|
|
|
|
let cameraIcon = gIdentityHandler._identityBox
|
|
.querySelector(".blocked-permission-icon[data-permission-id='camera']");
|
|
ok(!cameraIcon.hasAttribute("showing"),
|
|
"allowed permission icon is not shown");
|
|
|
|
SitePermissions.remove(gBrowser.currentURI, "geo");
|
|
|
|
ok(!geoIcon.hasAttribute("showing"),
|
|
"blocked permission icon is not shown after reset");
|
|
|
|
SitePermissions.remove(gBrowser.currentURI, "camera");
|
|
});
|
|
});
|
|
|
|
add_task(async function testPermissionShortcuts() {
|
|
await BrowserTestUtils.withNewTab(PERMISSIONS_PAGE, async function(browser) {
|
|
browser.focus();
|
|
|
|
await new Promise(r => {
|
|
SpecialPowers.pushPrefEnv({"set": [["permissions.default.shortcuts", 0]]}, r);
|
|
});
|
|
|
|
async function tryKey(desc, expectedValue) {
|
|
await EventUtils.synthesizeAndWaitKey("c", { accelKey: true });
|
|
let result = await ContentTask.spawn(browser, null, function() {
|
|
return {keydowns: content.wrappedJSObject.gKeyDowns,
|
|
keypresses: content.wrappedJSObject.gKeyPresses};
|
|
});
|
|
is(result.keydowns, expectedValue, "keydown event was fired or not fired as expected, " + desc);
|
|
if (kStrictKeyPressEvents) {
|
|
is(result.keypresses, 0, "keypress event shouldn't be fired for shortcut key, " + desc);
|
|
} else {
|
|
is(result.keypresses, expectedValue, "keypress event should be fired even for shortcut key, " + desc);
|
|
}
|
|
}
|
|
|
|
await tryKey("pressed with default permissions", 1);
|
|
|
|
SitePermissions.set(gBrowser.currentURI, "shortcuts", SitePermissions.BLOCK);
|
|
await tryKey("pressed when site blocked", 1);
|
|
|
|
SitePermissions.set(gBrowser.currentURI, "shortcuts", SitePermissions.ALLOW);
|
|
await tryKey("pressed when site allowed", 2);
|
|
|
|
SitePermissions.remove(gBrowser.currentURI, "shortcuts");
|
|
await new Promise(r => {
|
|
SpecialPowers.pushPrefEnv({"set": [["permissions.default.shortcuts", 2]]}, r);
|
|
});
|
|
|
|
await tryKey("pressed when globally blocked", 2);
|
|
SitePermissions.set(gBrowser.currentURI, "shortcuts", SitePermissions.ALLOW);
|
|
await tryKey("pressed when globally blocked but site allowed", 3);
|
|
|
|
SitePermissions.set(gBrowser.currentURI, "shortcuts", SitePermissions.BLOCK);
|
|
await tryKey("pressed when globally blocked and site blocked", 3);
|
|
|
|
SitePermissions.remove(gBrowser.currentURI, "shortcuts");
|
|
});
|
|
});
|
|
|
|
// Test the control center UI when policy permissions are set.
|
|
add_task(async function testPolicyPermission() {
|
|
await BrowserTestUtils.withNewTab(PERMISSIONS_PAGE, async function() {
|
|
await SpecialPowers.pushPrefEnv({set: [
|
|
["dom.disable_open_during_load", true],
|
|
]});
|
|
|
|
let permissionsList = document.getElementById("identity-popup-permission-list");
|
|
SitePermissions.set(gBrowser.currentURI, "popup", SitePermissions.ALLOW, SitePermissions.SCOPE_POLICY);
|
|
|
|
await openIdentityPopup();
|
|
|
|
// Check if the icon, nameLabel and stateLabel are visible.
|
|
let img, labelText, labels;
|
|
|
|
img = permissionsList.querySelector("image.identity-popup-permission-icon");
|
|
ok(img, "There is an image for the popup permission");
|
|
ok(img.classList.contains("popup-icon"), "proper class is in image class");
|
|
|
|
labelText = SitePermissions.getPermissionLabel("popup");
|
|
labels = permissionsList.querySelectorAll(".identity-popup-permission-label");
|
|
is(labels.length, 1, "One permission visible in main view");
|
|
is(labels[0].textContent, labelText, "Correct name label value");
|
|
|
|
labelText = SitePermissions.getCurrentStateLabel(SitePermissions.ALLOW, SitePermissions.SCOPE_POLICY);
|
|
labels = permissionsList.querySelectorAll(".identity-popup-permission-state-label");
|
|
is(labels[0].textContent, labelText, "Correct state label value");
|
|
|
|
// Check if the menulist and the remove button are hidden.
|
|
// The menulist is specific to the "popup" permission.
|
|
let menulist = document.getElementById("identity-popup-popup-menulist");
|
|
ok(menulist == null, "The popup permission menulist is not visible");
|
|
|
|
let removeButton = permissionsList.querySelector(".identity-popup-permission-remove-button");
|
|
ok(removeButton == null, "The permission remove button is not visible");
|
|
|
|
Services.perms.removeAll();
|
|
await closeIdentityPopup();
|
|
});
|
|
});
|
|
|
|
add_task(async function testHiddenAfterRefresh() {
|
|
await BrowserTestUtils.withNewTab(PERMISSIONS_PAGE, async function(browser) {
|
|
|
|
ok(BrowserTestUtils.is_hidden(gIdentityHandler._identityPopup), "Popup is hidden");
|
|
|
|
await openIdentityPopup();
|
|
|
|
ok(!BrowserTestUtils.is_hidden(gIdentityHandler._identityPopup), "Popup is shown");
|
|
|
|
let reloaded = BrowserTestUtils.browserLoaded(browser, false, PERMISSIONS_PAGE);
|
|
EventUtils.synthesizeKey("VK_F5", {}, browser.ownerGlobal);
|
|
await reloaded;
|
|
|
|
ok(BrowserTestUtils.is_hidden(gIdentityHandler._identityPopup), "Popup is hidden");
|
|
});
|
|
});
|