fune/browser/components/preferences/in-content/tests/browser_cookies_exceptions.js
Jack Smith 50bf6ce556 Bug 1491676 - Moves permissions strings r=flod,Gijs,zbraniecki
Differential Revision: https://phabricator.services.mozilla.com/D9917

--HG--
extra : moz-landing-system : lando
2018-11-14 23:11:24 +00:00

326 lines
10 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
requestLongerTimeout(3);
add_task(async function testAllow() {
await runTest(async (params, observeAllPromise, apply) => {
assertListContents(params, []);
params.url.value = "test.com";
params.btnAllow.doCommand();
assertListContents(params, [
["http://test.com", params.allowL10nId],
]);
apply();
await observeAllPromise;
}, [{ type: "cookie", origin: "http://test.com", data: "added",
capability: Ci.nsIPermissionManager.ALLOW_ACTION }]);
});
add_task(async function testBlock() {
await runTest(async (params, observeAllPromise, apply) => {
params.url.value = "test.com";
params.btnBlock.doCommand();
assertListContents(params, [
["http://test.com", params.denyL10nId],
]);
apply();
await observeAllPromise;
}, [{ type: "cookie", origin: "http://test.com", data: "changed",
capability: Ci.nsIPermissionManager.DENY_ACTION }]);
});
add_task(async function testAllowAgain() {
await runTest(async (params, observeAllPromise, apply) => {
params.url.value = "test.com";
params.btnAllow.doCommand();
assertListContents(params, [
["http://test.com", params.allowL10nId],
]);
apply();
await observeAllPromise;
}, [{ type: "cookie", origin: "http://test.com", data: "changed",
capability: Ci.nsIPermissionManager.ALLOW_ACTION }]);
});
add_task(async function testRemove() {
await runTest(async (params, observeAllPromise, apply) => {
params.richlistbox.selectedIndex = 0;
params.btnRemove.doCommand();
assertListContents(params, []);
apply();
await observeAllPromise;
}, [{ type: "cookie", origin: "http://test.com", data: "deleted" }]);
});
add_task(async function testAdd() {
await runTest(async (params, observeAllPromise, apply) => {
let uri = Services.io.newURI("http://test.com");
Services.perms.add(uri, "popup", Ci.nsIPermissionManager.DENY_ACTION);
info("Adding unrelated permission should not change display.");
assertListContents(params, []);
apply();
await observeAllPromise;
Services.perms.remove(uri, "popup");
}, [{ type: "popup", origin: "http://test.com", data: "added",
capability: Ci.nsIPermissionManager.DENY_ACTION }]);
});
add_task(async function testAllowHTTPSWithPort() {
await runTest(async (params, observeAllPromise, apply) => {
params.url.value = "https://test.com:12345";
params.btnAllow.doCommand();
assertListContents(params, [
["https://test.com:12345", params.allowL10nId],
]);
apply();
await observeAllPromise;
}, [{ type: "cookie", origin: "https://test.com:12345", data: "added",
capability: Ci.nsIPermissionManager.ALLOW_ACTION }]);
});
add_task(async function testBlockHTTPSWithPort() {
await runTest(async (params, observeAllPromise, apply) => {
params.url.value = "https://test.com:12345";
params.btnBlock.doCommand();
assertListContents(params, [
["https://test.com:12345", params.denyL10nId],
]);
apply();
await observeAllPromise;
}, [{ type: "cookie", origin: "https://test.com:12345", data: "changed",
capability: Ci.nsIPermissionManager.DENY_ACTION }]);
});
add_task(async function testAllowAgainHTTPSWithPort() {
await runTest(async (params, observeAllPromise, apply) => {
params.url.value = "https://test.com:12345";
params.btnAllow.doCommand();
assertListContents(params, [
["https://test.com:12345", params.allowL10nId],
]);
apply();
await observeAllPromise;
}, [{ type: "cookie", origin: "https://test.com:12345", data: "changed",
capability: Ci.nsIPermissionManager.ALLOW_ACTION }]);
});
add_task(async function testRemoveHTTPSWithPort() {
await runTest(async (params, observeAllPromise, apply) => {
params.richlistbox.selectedIndex = 0;
params.btnRemove.doCommand();
assertListContents(params, []);
apply();
await observeAllPromise;
}, [{ type: "cookie", origin: "https://test.com:12345", data: "deleted" }]);
});
add_task(async function testAllowPort() {
await runTest(async (params, observeAllPromise, apply) => {
params.url.value = "localhost:12345";
params.btnAllow.doCommand();
assertListContents(params, [
["http://localhost:12345", params.allowL10nId],
]);
apply();
await observeAllPromise;
}, [{ type: "cookie", origin: "http://localhost:12345", data: "added",
capability: Ci.nsIPermissionManager.ALLOW_ACTION }]);
});
add_task(async function testBlockPort() {
await runTest(async (params, observeAllPromise, apply) => {
params.url.value = "localhost:12345";
params.btnBlock.doCommand();
assertListContents(params, [
["http://localhost:12345", params.denyL10nId],
]);
apply();
await observeAllPromise;
}, [{ type: "cookie", origin: "http://localhost:12345", data: "changed",
capability: Ci.nsIPermissionManager.DENY_ACTION }]);
});
add_task(async function testAllowAgainPort() {
await runTest(async (params, observeAllPromise, apply) => {
params.url.value = "localhost:12345";
params.btnAllow.doCommand();
assertListContents(params, [
["http://localhost:12345", params.allowL10nId],
]);
apply();
await observeAllPromise;
}, [{ type: "cookie", origin: "http://localhost:12345", data: "changed",
capability: Ci.nsIPermissionManager.ALLOW_ACTION }]);
});
add_task(async function testRemovePort() {
await runTest(async (params, observeAllPromise, apply) => {
params.richlistbox.selectedIndex = 0;
params.btnRemove.doCommand();
assertListContents(params, []);
apply();
await observeAllPromise;
}, [{ type: "cookie", origin: "http://localhost:12345", data: "deleted" }]);
});
add_task(async function testSort() {
await runTest(async (params, observeAllPromise, apply) => {
// Sort by site name.
EventUtils.synthesizeMouseAtCenter(params.doc.getElementById("siteCol"), {},
params.doc.defaultView);
for (let URL of ["http://a", "http://z", "http://b"]) {
let URI = Services.io.newURI(URL);
Services.perms.add(URI, "cookie", Ci.nsIPermissionManager.ALLOW_ACTION);
}
assertListContents(params, [
["http://a", params.allowL10nId],
["http://b", params.allowL10nId],
["http://z", params.allowL10nId],
]);
// Sort by site name in descending order.
EventUtils.synthesizeMouseAtCenter(params.doc.getElementById("siteCol"), {},
params.doc.defaultView);
assertListContents(params, [
["http://z", params.allowL10nId],
["http://b", params.allowL10nId],
["http://a", params.allowL10nId],
]);
apply();
await observeAllPromise;
for (let URL of ["http://a", "http://z", "http://b"]) {
let uri = Services.io.newURI(URL);
Services.perms.remove(uri, "cookie");
}
}, [{ type: "cookie", origin: "http://a", data: "added",
capability: Ci.nsIPermissionManager.ALLOW_ACTION },
{ type: "cookie", origin: "http://z", data: "added",
capability: Ci.nsIPermissionManager.ALLOW_ACTION },
{ type: "cookie", origin: "http://b", data: "added",
capability: Ci.nsIPermissionManager.ALLOW_ACTION }]);
});
function assertListContents(params, expected) {
Assert.equal(params.richlistbox.itemCount, expected.length);
for (let i = 0; i < expected.length; i++) {
let richlistitem = params.richlistbox.getItemAtIndex(i);
Assert.equal(richlistitem.getAttribute("origin"), expected[i][0]);
Assert.equal(richlistitem.querySelector(".website-name > label")
.getAttribute("value"), expected[i][0]);
Assert.equal(richlistitem.querySelector(".website-capability-value")
.getAttribute("data-l10n-id"), expected[i][1]);
}
}
async function runTest(test, observances) {
registerCleanupFunction(function() {
Services.prefs.clearUserPref("privacy.history.custom");
});
await openPreferencesViaOpenPreferencesAPI("panePrivacy", {leaveOpen: true});
let doc = gBrowser.contentDocument;
let historyMode = doc.getElementById("historyMode");
historyMode.value = "custom";
historyMode.doCommand();
let promiseSubDialogLoaded =
promiseLoadSubDialog("chrome://browser/content/preferences/permissions.xul");
doc.getElementById("cookieExceptions").doCommand();
let win = await promiseSubDialogLoaded;
doc = win.document;
let params = {
doc,
richlistbox: doc.getElementById("permissionsBox"),
url: doc.getElementById("url"),
btnAllow: doc.getElementById("btnAllow"),
btnBlock: doc.getElementById("btnBlock"),
btnRemove: doc.getElementById("removePermission"),
allowL10nId: win.gPermissionManager._getCapabilityL10nId(Ci.nsIPermissionManager.ALLOW_ACTION),
denyL10nId: win.gPermissionManager._getCapabilityL10nId(Ci.nsIPermissionManager.DENY_ACTION),
allow: Ci.nsIPermissionManager.ALLOW_ACTION,
deny: Ci.nsIPermissionManager.DENY_ACTION,
};
let btnApplyChanges = doc.getElementById("btnApplyChanges");
let observeAllPromise = createObserveAllPromise(observances);
await test(params, observeAllPromise, () => btnApplyChanges.doCommand());
BrowserTestUtils.removeTab(gBrowser.selectedTab);
}
function createObserveAllPromise(observances) {
return new Promise(resolve => {
let permObserver = {
observe(aSubject, aTopic, aData) {
if (aTopic != "perm-changed")
return;
if (observances.length == 0) {
// Should fail here as we are not expecting a notification, but we
// don't. See bug 1063410.
return;
}
info(`observed perm-changed (remaining ${observances.length - 1})`);
let permission = aSubject.QueryInterface(Ci.nsIPermission);
let expected = observances.shift();
is(aData, expected.data, "type of message should be the same");
for (let prop of ["type", "capability"]) {
if (expected[prop])
is(permission[prop], expected[prop],
"property: \"" + prop + "\" should be equal");
}
if (expected.origin) {
is(permission.principal.origin, expected.origin,
"property: \"origin\" should be equal");
}
if (observances.length == 0) {
Services.obs.removeObserver(permObserver, "perm-changed");
executeSoon(resolve);
}
},
};
Services.obs.addObserver(permObserver, "perm-changed");
});
}