Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
const PERMISSIONS_URL =
"chrome://browser/content/preferences/dialogs/permissions.xhtml";
const _checkAndOpenCookiesDialog = async doc => {
let cookieExceptionsButton = doc.getElementById("cookieExceptions");
ok(cookieExceptionsButton, "cookieExceptionsButton found");
let dialogPromise = promiseLoadSubDialog(PERMISSIONS_URL);
cookieExceptionsButton.click();
let dialog = await dialogPromise;
return dialog;
};
const _checkCookiesDialog = (dialog, buttonIds) => {
ok(dialog, "dialog loaded");
let urlLabel = dialog.document.getElementById("urlLabel");
ok(!urlLabel.hidden, "urlLabel should be visible");
let url = dialog.document.getElementById("url");
ok(!url.hidden, "url should be visible");
for (let buttonId of buttonIds) {
let buttonDialog = dialog.document.getElementById(buttonId);
ok(buttonDialog, "blockButtonDialog found");
is(
buttonDialog.hasAttribute("disabled"),
true,
"If the user hasn't added an url the button shouldn't be clickable"
);
}
return dialog;
};
const _addWebsiteAddressToPermissionBox = (
websiteAddress,
dialog,
buttonId,
expectError
) => {
let url = dialog.document.getElementById("url");
let buttonDialog = dialog.document.getElementById(buttonId);
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();
let permissionsBox = dialog.document.getElementById("permissionsBox");
let children = permissionsBox.getElementsByAttribute("origin", "*");
is(
!!children.length,
!expectError,
"Website added in url should be in the list"
);
};
const _checkIfPermissionsWereAdded = (dialog, expectedResult) => {
let permissionsBox = dialog.document.getElementById("permissionsBox");
for (let website of expectedResult) {
let elements = permissionsBox.getElementsByAttribute("origin", website);
is(elements.length, 1, "It should find only one coincidence");
}
};
const _removesAllSitesInPermissionBox = (dialog, shouldBePossible) => {
let removeAllWebsitesButton = dialog.document.getElementById(
"removeAllPermissions"
);
ok(removeAllWebsitesButton, "removeAllWebsitesButton found");
const isDisabled = removeAllWebsitesButton.hasAttribute("disabled");
is(
!removeAllWebsitesButton.hasAttribute("disabled"),
shouldBePossible,
"There should be websites in the list"
);
if (!isDisabled) {
removeAllWebsitesButton.click();
}
};
add_task(async function checkCookiePermissions() {
await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
leaveOpen: true,
});
let win = gBrowser.selectedBrowser.contentWindow;
let doc = win.document;
let buttonIds = ["btnBlock", "btnCookieSession", "btnAllow"];
let dialog = await _checkAndOpenCookiesDialog(doc);
_checkCookiesDialog(dialog, buttonIds);
let tests = [
{
inputWebsite: "google.com",
expectedResult: ["http://google.com", "https://google.com"],
},
{
inputWebsite: "https://google.com",
expectedResult: ["https://google.com"],
},
{
inputWebsite: "s3.eu-central-1.amazonaws.com",
expectedResult: [
],
},
{
inputWebsite: "file://",
expectedResult: ["file:///"],
},
{
inputWebsite: "about:config",
expectedResult: ["about:config"],
},
// Invalid inputs, expected to not be added
{
inputWebsite: "http://",
expectedResult: [],
},
{
inputWebsite: "*.example.com",
expectedResult: [],
},
{
inputWebsite: "http://*.example.com",
expectedResult: [],
},
];
for (let buttonId of buttonIds) {
for (let test of tests) {
_addWebsiteAddressToPermissionBox(
test.inputWebsite,
dialog,
buttonId,
test.expectedResult.length === 0
);
_checkIfPermissionsWereAdded(dialog, test.expectedResult);
_removesAllSitesInPermissionBox(dialog, !!test.expectedResult.length);
}
}
gBrowser.removeCurrentTab();
});