summaryrefslogtreecommitdiffstats
path: root/browser/components/preferences/tests/browser_cookies_exceptions.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/preferences/tests/browser_cookies_exceptions.js')
-rw-r--r--browser/components/preferences/tests/browser_cookies_exceptions.js568
1 files changed, 568 insertions, 0 deletions
diff --git a/browser/components/preferences/tests/browser_cookies_exceptions.js b/browser/components/preferences/tests/browser_cookies_exceptions.js
new file mode 100644
index 0000000000..d2d538a48a
--- /dev/null
+++ b/browser/components/preferences/tests/browser_cookies_exceptions.js
@@ -0,0 +1,568 @@
+/* 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],
+ ["https://test.com", params.allowL10nId],
+ ]);
+
+ apply();
+ await observeAllPromise;
+ },
+ params => {
+ return [
+ {
+ type: "cookie",
+ origin: "http://test.com",
+ data: "added",
+ capability: Ci.nsIPermissionManager.ALLOW_ACTION,
+ },
+ {
+ type: "cookie",
+ origin: "https://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],
+ ["https://test.com", params.denyL10nId],
+ ]);
+
+ apply();
+ await observeAllPromise;
+ },
+ params => {
+ return [
+ {
+ type: "cookie",
+ origin: "http://test.com",
+ data: "changed",
+ capability: Ci.nsIPermissionManager.DENY_ACTION,
+ },
+ {
+ type: "cookie",
+ origin: "https://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],
+ ["https://test.com", params.allowL10nId],
+ ]);
+
+ apply();
+ await observeAllPromise;
+ },
+ params => {
+ return [
+ {
+ type: "cookie",
+ origin: "http://test.com",
+ data: "changed",
+ capability: Ci.nsIPermissionManager.ALLOW_ACTION,
+ },
+ {
+ type: "cookie",
+ origin: "https://test.com",
+ data: "changed",
+ capability: Ci.nsIPermissionManager.ALLOW_ACTION,
+ },
+ ];
+ }
+ );
+});
+
+add_task(async function testRemove() {
+ await runTest(
+ async (params, observeAllPromise, apply) => {
+ while (params.richlistbox.itemCount) {
+ params.richlistbox.selectedIndex = 0;
+ params.btnRemove.doCommand();
+ }
+ assertListContents(params, []);
+
+ apply();
+ await observeAllPromise;
+ },
+ params => {
+ let richlistItems = params.richlistbox.getElementsByAttribute(
+ "origin",
+ "*"
+ );
+ let observances = [];
+ for (let item of richlistItems) {
+ observances.push({
+ type: "cookie",
+ origin: item.getAttribute("origin"),
+ data: "deleted",
+ });
+ }
+ return observances;
+ }
+ );
+});
+
+add_task(async function testAdd() {
+ await runTest(
+ async (params, observeAllPromise, apply) => {
+ let uri = Services.io.newURI("http://test.com");
+ PermissionTestUtils.add(
+ uri,
+ "popup",
+ Ci.nsIPermissionManager.DENY_ACTION
+ );
+
+ info("Adding unrelated permission should not change display.");
+ assertListContents(params, []);
+
+ apply();
+ await observeAllPromise;
+
+ PermissionTestUtils.remove(uri, "popup");
+ },
+ params => {
+ return [
+ {
+ 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;
+ },
+ params => {
+ return [
+ {
+ 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;
+ },
+ params => {
+ return [
+ {
+ 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;
+ },
+ params => {
+ return [
+ {
+ 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) => {
+ while (params.richlistbox.itemCount) {
+ params.richlistbox.selectedIndex = 0;
+ params.btnRemove.doCommand();
+ }
+
+ assertListContents(params, []);
+
+ apply();
+ await observeAllPromise;
+ },
+ params => {
+ let richlistItems = params.richlistbox.getElementsByAttribute(
+ "origin",
+ "*"
+ );
+ let observances = [];
+ for (let item of richlistItems) {
+ observances.push({
+ type: "cookie",
+ origin: item.getAttribute("origin"),
+ data: "deleted",
+ });
+ }
+ return observances;
+ }
+ );
+});
+
+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],
+ ["https://localhost:12345", params.allowL10nId],
+ ]);
+
+ apply();
+ await observeAllPromise;
+ },
+ params => {
+ return [
+ {
+ type: "cookie",
+ origin: "http://localhost:12345",
+ data: "added",
+ capability: Ci.nsIPermissionManager.ALLOW_ACTION,
+ },
+ {
+ type: "cookie",
+ origin: "https://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],
+ ["https://localhost:12345", params.denyL10nId],
+ ]);
+
+ apply();
+ await observeAllPromise;
+ },
+ params => {
+ return [
+ {
+ type: "cookie",
+ origin: "http://localhost:12345",
+ data: "changed",
+ capability: Ci.nsIPermissionManager.DENY_ACTION,
+ },
+ {
+ type: "cookie",
+ origin: "https://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],
+ ["https://localhost:12345", params.allowL10nId],
+ ]);
+
+ apply();
+ await observeAllPromise;
+ },
+ params => {
+ return [
+ {
+ type: "cookie",
+ origin: "http://localhost:12345",
+ data: "changed",
+ capability: Ci.nsIPermissionManager.ALLOW_ACTION,
+ },
+ {
+ type: "cookie",
+ origin: "https://localhost:12345",
+ data: "changed",
+ capability: Ci.nsIPermissionManager.ALLOW_ACTION,
+ },
+ ];
+ }
+ );
+});
+
+add_task(async function testRemovePort() {
+ await runTest(
+ async (params, observeAllPromise, apply) => {
+ while (params.richlistbox.itemCount) {
+ params.richlistbox.selectedIndex = 0;
+ params.btnRemove.doCommand();
+ }
+
+ assertListContents(params, []);
+
+ apply();
+ await observeAllPromise;
+ },
+ params => {
+ let richlistItems = params.richlistbox.getElementsByAttribute(
+ "origin",
+ "*"
+ );
+ let observances = [];
+ for (let item of richlistItems) {
+ observances.push({
+ type: "cookie",
+ origin: item.getAttribute("origin"),
+ data: "deleted",
+ });
+ }
+ return observances;
+ }
+ );
+});
+
+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);
+ PermissionTestUtils.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);
+ PermissionTestUtils.remove(uri, "cookie");
+ }
+ },
+ params => {
+ return [
+ {
+ 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,
+ },
+ ];
+ }
+ );
+});
+
+add_task(async function testPrivateBrowsingSessionPermissionsAreHidden() {
+ await runTest(
+ async (params, observeAllPromise, apply) => {
+ assertListContents(params, []);
+
+ let uri = Services.io.newURI("http://test.com");
+ let privateBrowsingPrincipal =
+ Services.scriptSecurityManager.createContentPrincipal(uri, {
+ privateBrowsingId: 1,
+ });
+
+ // Add a session permission for private browsing.
+ PermissionTestUtils.add(
+ privateBrowsingPrincipal,
+ "cookie",
+ Services.perms.ALLOW_ACTION,
+ Services.perms.EXPIRE_SESSION
+ );
+
+ assertListContents(params, []);
+
+ PermissionTestUtils.remove(uri, "cookie");
+ },
+ params => {
+ return [];
+ }
+ );
+});
+
+function assertListContents(params, expected) {
+ Assert.equal(params.richlistbox.itemCount, expected.length);
+
+ for (let i = 0; i < expected.length; i++) {
+ let website = expected[i][0];
+ let elements = params.richlistbox.getElementsByAttribute("origin", website);
+ Assert.equal(elements.length, 1); // "It should find only one coincidence"
+ Assert.equal(
+ elements[0]
+ .querySelector(".website-capability-value")
+ .getAttribute("data-l10n-id"),
+ expected[i][1]
+ );
+ }
+}
+
+async function runTest(test, getObservances) {
+ 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/dialogs/permissions.xhtml"
+ );
+ 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.querySelector("dialog").getButton("accept");
+ let observances = getObservances(params);
+ let observeAllPromise = createObserveAllPromise(observances);
+
+ await test(params, observeAllPromise, () => btnApplyChanges.doCommand());
+
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+}