299 lines
7.6 KiB
JavaScript
299 lines
7.6 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
if (AppConstants.TSAN || AppConstants.DEBUG) {
|
|
requestLongerTimeout(2);
|
|
}
|
|
|
|
const PERMISSIONS_URL =
|
|
"chrome://browser/content/preferences/dialogs/permissions.xhtml";
|
|
|
|
async function openCookiesDialog(doc) {
|
|
let cookieExceptionsButton = doc.getElementById("cookieExceptions");
|
|
ok(cookieExceptionsButton, "cookieExceptionsButton found");
|
|
let dialogPromise = promiseLoadSubDialog(PERMISSIONS_URL);
|
|
cookieExceptionsButton.click();
|
|
let dialog = await dialogPromise;
|
|
return dialog;
|
|
}
|
|
|
|
function checkCookiesDialog(dialog) {
|
|
ok(dialog, "dialog loaded");
|
|
let buttonIds = ["removePermission", "removeAllPermissions"];
|
|
|
|
for (let buttonId of buttonIds) {
|
|
let button = dialog.document.getElementById(buttonId);
|
|
ok(button, `${buttonId} found`);
|
|
}
|
|
|
|
let dialogEl = dialog.document.querySelector("dialog");
|
|
let acceptBtn = dialogEl.getButton("accept");
|
|
let cancelBtn = dialogEl.getButton("cancel");
|
|
|
|
ok(!acceptBtn.hidden, "acceptButton found");
|
|
ok(!cancelBtn.hidden, "cancelButton found");
|
|
}
|
|
|
|
function addNewPermission(websiteAddress, dialog) {
|
|
let url = dialog.document.getElementById("url");
|
|
let buttonDialog = dialog.document.getElementById("btnBlock");
|
|
let permissionsBox = dialog.document.getElementById("permissionsBox");
|
|
let currentPermissions = permissionsBox.itemCount;
|
|
|
|
url.value = websiteAddress;
|
|
url.dispatchEvent(new Event("input", { bubbles: true }));
|
|
is(
|
|
buttonDialog.hasAttribute("disabled"),
|
|
false,
|
|
"When the user add an url the button should be clickable"
|
|
);
|
|
buttonDialog.click();
|
|
|
|
is(
|
|
permissionsBox.itemCount,
|
|
currentPermissions + 1,
|
|
"Website added in url should be in the list"
|
|
);
|
|
}
|
|
|
|
async function cleanList(dialog) {
|
|
let removeAllButton = dialog.document.getElementById("removeAllPermissions");
|
|
if (!removeAllButton.hasAttribute("disabled")) {
|
|
removeAllButton.click();
|
|
}
|
|
}
|
|
|
|
function addData(websites, dialog) {
|
|
for (let website of websites) {
|
|
addNewPermission(website, dialog);
|
|
}
|
|
}
|
|
|
|
function deletePermission(permission, dialog) {
|
|
let permissionsBox = dialog.document.getElementById("permissionsBox");
|
|
let elements = permissionsBox.getElementsByAttribute("origin", permission);
|
|
is(elements.length, 1, "It should find only one entry");
|
|
permissionsBox.selectItem(elements[0]);
|
|
let removePermissionButton =
|
|
dialog.document.getElementById("removePermission");
|
|
is(
|
|
removePermissionButton.hasAttribute("disabled"),
|
|
false,
|
|
"The button should be clickable to remove selected item"
|
|
);
|
|
removePermissionButton.click();
|
|
}
|
|
|
|
function save(dialog) {
|
|
let saveButton = dialog.document.querySelector("dialog").getButton("accept");
|
|
saveButton.click();
|
|
}
|
|
|
|
function cancel(dialog) {
|
|
let cancelButton = dialog.document
|
|
.querySelector("dialog")
|
|
.getButton("cancel");
|
|
ok(!cancelButton.hidden, "cancelButton found");
|
|
cancelButton.click();
|
|
}
|
|
|
|
async function checkExpected(expected, doc) {
|
|
let dialog = await openCookiesDialog(doc);
|
|
let permissionsBox = dialog.document.getElementById("permissionsBox");
|
|
|
|
is(
|
|
permissionsBox.itemCount,
|
|
expected.length,
|
|
`There should be ${expected.length} elements in the list`
|
|
);
|
|
|
|
for (let website of expected) {
|
|
let elements = permissionsBox.getElementsByAttribute("origin", website);
|
|
is(elements.length, 1, "It should find only one entry");
|
|
}
|
|
return dialog;
|
|
}
|
|
|
|
async function runTest(test, websites, doc) {
|
|
let dialog = await openCookiesDialog(doc);
|
|
checkCookiesDialog(dialog);
|
|
|
|
if (test.needPreviousData) {
|
|
addData(websites, dialog);
|
|
save(dialog);
|
|
dialog = await openCookiesDialog(doc);
|
|
}
|
|
|
|
for (let step of test.steps) {
|
|
switch (step) {
|
|
case "addNewPermission":
|
|
addNewPermission(test.newData, dialog);
|
|
break;
|
|
case "deletePermission":
|
|
deletePermission(test.newData, dialog);
|
|
break;
|
|
case "deleteAllPermission":
|
|
await cleanList(dialog);
|
|
break;
|
|
case "save":
|
|
save(dialog);
|
|
break;
|
|
case "cancel":
|
|
cancel(dialog);
|
|
break;
|
|
case "openPane":
|
|
dialog = await openCookiesDialog(doc);
|
|
break;
|
|
default:
|
|
// code block
|
|
}
|
|
}
|
|
dialog = await checkExpected(test.expected, doc);
|
|
await cleanList(dialog);
|
|
save(dialog);
|
|
}
|
|
|
|
add_task(async function checkPermissions() {
|
|
await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
|
|
leaveOpen: true,
|
|
});
|
|
let win = gBrowser.selectedBrowser.contentWindow;
|
|
let doc = win.document;
|
|
let websites = ["http://test1.com", "http://test2.com"];
|
|
|
|
let tests = [
|
|
{
|
|
needPreviousData: false,
|
|
newData: "https://mytest.com",
|
|
steps: ["addNewPermission", "save"],
|
|
expected: ["https://mytest.com"], // when open the pane again it should find this in the list
|
|
},
|
|
{
|
|
needPreviousData: false,
|
|
newData: "https://mytest.com",
|
|
steps: ["addNewPermission", "cancel"],
|
|
expected: [],
|
|
},
|
|
{
|
|
needPreviousData: false,
|
|
newData: "https://mytest.com",
|
|
steps: ["addNewPermission", "deletePermission", "save"],
|
|
expected: [],
|
|
},
|
|
{
|
|
needPreviousData: false,
|
|
newData: "https://mytest.com",
|
|
steps: ["addNewPermission", "deletePermission", "cancel"],
|
|
expected: [],
|
|
},
|
|
{
|
|
needPreviousData: false,
|
|
newData: "https://mytest.com",
|
|
steps: [
|
|
"addNewPermission",
|
|
"save",
|
|
"openPane",
|
|
"deletePermission",
|
|
"save",
|
|
],
|
|
expected: [],
|
|
},
|
|
{
|
|
needPreviousData: false,
|
|
newData: "https://mytest.com",
|
|
steps: [
|
|
"addNewPermission",
|
|
"save",
|
|
"openPane",
|
|
"deletePermission",
|
|
"cancel",
|
|
],
|
|
expected: ["https://mytest.com"],
|
|
},
|
|
{
|
|
needPreviousData: false,
|
|
newData: "https://mytest.com",
|
|
steps: ["addNewPermission", "deleteAllPermission", "save"],
|
|
expected: [],
|
|
},
|
|
{
|
|
needPreviousData: false,
|
|
newData: "https://mytest.com",
|
|
steps: ["addNewPermission", "deleteAllPermission", "cancel"],
|
|
expected: [],
|
|
},
|
|
{
|
|
needPreviousData: false,
|
|
newData: "https://mytest.com",
|
|
steps: [
|
|
"addNewPermission",
|
|
"save",
|
|
"openPane",
|
|
"deleteAllPermission",
|
|
"save",
|
|
],
|
|
expected: [],
|
|
},
|
|
{
|
|
needPreviousData: false,
|
|
newData: "https://mytest.com",
|
|
steps: [
|
|
"addNewPermission",
|
|
"save",
|
|
"openPane",
|
|
"deleteAllPermission",
|
|
"cancel",
|
|
],
|
|
expected: ["https://mytest.com"],
|
|
},
|
|
{
|
|
needPreviousData: true,
|
|
newData: "https://mytest.com",
|
|
steps: ["deleteAllPermission", "save"],
|
|
expected: [],
|
|
},
|
|
{
|
|
needPreviousData: true,
|
|
newData: "https://mytest.com",
|
|
steps: ["deleteAllPermission", "cancel"],
|
|
expected: websites,
|
|
},
|
|
{
|
|
needPreviousData: true,
|
|
newData: "https://mytest.com",
|
|
steps: ["addNewPermission", "save"],
|
|
expected: (function () {
|
|
let result = websites.slice();
|
|
result.push("https://mytest.com");
|
|
return result;
|
|
})(),
|
|
},
|
|
{
|
|
needPreviousData: true,
|
|
newData: "https://mytest.com",
|
|
steps: ["addNewPermission", "cancel"],
|
|
expected: websites,
|
|
},
|
|
{
|
|
needPreviousData: false,
|
|
newData: "https://mytest.com",
|
|
steps: [
|
|
"addNewPermission",
|
|
"save",
|
|
"openPane",
|
|
"deleteAllPermission",
|
|
"addNewPermission",
|
|
"save",
|
|
],
|
|
expected: ["https://mytest.com"],
|
|
},
|
|
];
|
|
|
|
for (let test of tests) {
|
|
await runTest(test, websites, doc);
|
|
}
|
|
|
|
gBrowser.removeCurrentTab();
|
|
});
|