1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/ */
4 requestLongerTimeout(3);
6 add_task(async function testAllow() {
8 async (params, observeAllPromise, apply) => {
9 assertListContents(params, []);
11 params.url.value = "test.com";
12 params.btnAllow.doCommand();
14 assertListContents(params, [
15 ["http://test.com", params.allowL10nId],
16 ["https://test.com", params.allowL10nId],
20 await observeAllPromise;
26 origin: "http://test.com",
28 capability: Ci.nsIPermissionManager.ALLOW_ACTION,
32 origin: "https://test.com",
34 capability: Ci.nsIPermissionManager.ALLOW_ACTION,
41 add_task(async function testBlock() {
43 async (params, observeAllPromise, apply) => {
44 params.url.value = "test.com";
45 params.btnBlock.doCommand();
47 assertListContents(params, [
48 ["http://test.com", params.denyL10nId],
49 ["https://test.com", params.denyL10nId],
53 await observeAllPromise;
59 origin: "http://test.com",
61 capability: Ci.nsIPermissionManager.DENY_ACTION,
65 origin: "https://test.com",
67 capability: Ci.nsIPermissionManager.DENY_ACTION,
74 add_task(async function testAllowAgain() {
76 async (params, observeAllPromise, apply) => {
77 params.url.value = "test.com";
78 params.btnAllow.doCommand();
80 assertListContents(params, [
81 ["http://test.com", params.allowL10nId],
82 ["https://test.com", params.allowL10nId],
86 await observeAllPromise;
92 origin: "http://test.com",
94 capability: Ci.nsIPermissionManager.ALLOW_ACTION,
98 origin: "https://test.com",
100 capability: Ci.nsIPermissionManager.ALLOW_ACTION,
107 add_task(async function testRemove() {
109 async (params, observeAllPromise, apply) => {
110 while (params.richlistbox.itemCount) {
111 params.richlistbox.selectedIndex = 0;
112 params.btnRemove.doCommand();
114 assertListContents(params, []);
117 await observeAllPromise;
120 let richlistItems = params.richlistbox.getElementsByAttribute(
124 let observances = [];
125 for (let item of richlistItems) {
128 origin: item.getAttribute("origin"),
137 add_task(async function testAdd() {
139 async (params, observeAllPromise, apply) => {
140 let uri = Services.io.newURI("http://test.com");
141 PermissionTestUtils.add(
144 Ci.nsIPermissionManager.DENY_ACTION
147 info("Adding unrelated permission should not change display.");
148 assertListContents(params, []);
151 await observeAllPromise;
153 PermissionTestUtils.remove(uri, "popup");
159 origin: "http://test.com",
161 capability: Ci.nsIPermissionManager.DENY_ACTION,
168 add_task(async function testAllowHTTPSWithPort() {
170 async (params, observeAllPromise, apply) => {
171 params.url.value = "https://test.com:12345";
172 params.btnAllow.doCommand();
174 assertListContents(params, [
175 ["https://test.com:12345", params.allowL10nId],
179 await observeAllPromise;
185 origin: "https://test.com:12345",
187 capability: Ci.nsIPermissionManager.ALLOW_ACTION,
194 add_task(async function testBlockHTTPSWithPort() {
196 async (params, observeAllPromise, apply) => {
197 params.url.value = "https://test.com:12345";
198 params.btnBlock.doCommand();
200 assertListContents(params, [
201 ["https://test.com:12345", params.denyL10nId],
205 await observeAllPromise;
211 origin: "https://test.com:12345",
213 capability: Ci.nsIPermissionManager.DENY_ACTION,
220 add_task(async function testAllowAgainHTTPSWithPort() {
222 async (params, observeAllPromise, apply) => {
223 params.url.value = "https://test.com:12345";
224 params.btnAllow.doCommand();
226 assertListContents(params, [
227 ["https://test.com:12345", params.allowL10nId],
231 await observeAllPromise;
237 origin: "https://test.com:12345",
239 capability: Ci.nsIPermissionManager.ALLOW_ACTION,
246 add_task(async function testRemoveHTTPSWithPort() {
248 async (params, observeAllPromise, apply) => {
249 while (params.richlistbox.itemCount) {
250 params.richlistbox.selectedIndex = 0;
251 params.btnRemove.doCommand();
254 assertListContents(params, []);
257 await observeAllPromise;
260 let richlistItems = params.richlistbox.getElementsByAttribute(
264 let observances = [];
265 for (let item of richlistItems) {
268 origin: item.getAttribute("origin"),
277 add_task(async function testAllowPort() {
279 async (params, observeAllPromise, apply) => {
280 params.url.value = "localhost:12345";
281 params.btnAllow.doCommand();
283 assertListContents(params, [
284 ["http://localhost:12345", params.allowL10nId],
285 ["https://localhost:12345", params.allowL10nId],
289 await observeAllPromise;
295 origin: "http://localhost:12345",
297 capability: Ci.nsIPermissionManager.ALLOW_ACTION,
301 origin: "https://localhost:12345",
303 capability: Ci.nsIPermissionManager.ALLOW_ACTION,
310 add_task(async function testBlockPort() {
312 async (params, observeAllPromise, apply) => {
313 params.url.value = "localhost:12345";
314 params.btnBlock.doCommand();
316 assertListContents(params, [
317 ["http://localhost:12345", params.denyL10nId],
318 ["https://localhost:12345", params.denyL10nId],
322 await observeAllPromise;
328 origin: "http://localhost:12345",
330 capability: Ci.nsIPermissionManager.DENY_ACTION,
334 origin: "https://localhost:12345",
336 capability: Ci.nsIPermissionManager.DENY_ACTION,
343 add_task(async function testAllowAgainPort() {
345 async (params, observeAllPromise, apply) => {
346 params.url.value = "localhost:12345";
347 params.btnAllow.doCommand();
349 assertListContents(params, [
350 ["http://localhost:12345", params.allowL10nId],
351 ["https://localhost:12345", params.allowL10nId],
355 await observeAllPromise;
361 origin: "http://localhost:12345",
363 capability: Ci.nsIPermissionManager.ALLOW_ACTION,
367 origin: "https://localhost:12345",
369 capability: Ci.nsIPermissionManager.ALLOW_ACTION,
376 add_task(async function testRemovePort() {
378 async (params, observeAllPromise, apply) => {
379 while (params.richlistbox.itemCount) {
380 params.richlistbox.selectedIndex = 0;
381 params.btnRemove.doCommand();
384 assertListContents(params, []);
387 await observeAllPromise;
390 let richlistItems = params.richlistbox.getElementsByAttribute(
394 let observances = [];
395 for (let item of richlistItems) {
398 origin: item.getAttribute("origin"),
407 add_task(async function testSort() {
409 async (params, observeAllPromise, apply) => {
410 // Sort by site name.
411 EventUtils.synthesizeMouseAtCenter(
412 params.doc.getElementById("siteCol"),
414 params.doc.defaultView
417 for (let URL of ["http://a", "http://z", "http://b"]) {
418 let URI = Services.io.newURI(URL);
419 PermissionTestUtils.add(
422 Ci.nsIPermissionManager.ALLOW_ACTION
426 assertListContents(params, [
427 ["http://a", params.allowL10nId],
428 ["http://b", params.allowL10nId],
429 ["http://z", params.allowL10nId],
432 // Sort by site name in descending order.
433 EventUtils.synthesizeMouseAtCenter(
434 params.doc.getElementById("siteCol"),
436 params.doc.defaultView
439 assertListContents(params, [
440 ["http://z", params.allowL10nId],
441 ["http://b", params.allowL10nId],
442 ["http://a", params.allowL10nId],
446 await observeAllPromise;
448 for (let URL of ["http://a", "http://z", "http://b"]) {
449 let uri = Services.io.newURI(URL);
450 PermissionTestUtils.remove(uri, "cookie");
459 capability: Ci.nsIPermissionManager.ALLOW_ACTION,
465 capability: Ci.nsIPermissionManager.ALLOW_ACTION,
471 capability: Ci.nsIPermissionManager.ALLOW_ACTION,
478 add_task(async function testPrivateBrowsingSessionPermissionsAreHidden() {
480 async (params, observeAllPromise, apply) => {
481 assertListContents(params, []);
483 let uri = Services.io.newURI("http://test.com");
484 let privateBrowsingPrincipal =
485 Services.scriptSecurityManager.createContentPrincipal(uri, {
486 privateBrowsingId: 1,
489 // Add a session permission for private browsing.
490 PermissionTestUtils.add(
491 privateBrowsingPrincipal,
493 Services.perms.ALLOW_ACTION,
494 Services.perms.EXPIRE_SESSION
497 assertListContents(params, []);
499 PermissionTestUtils.remove(uri, "cookie");
507 function assertListContents(params, expected) {
508 Assert.equal(params.richlistbox.itemCount, expected.length);
510 for (let i = 0; i < expected.length; i++) {
511 let website = expected[i][0];
512 let elements = params.richlistbox.getElementsByAttribute("origin", website);
513 Assert.equal(elements.length, 1); // "It should find only one coincidence"
516 .querySelector(".website-capability-value")
517 .getAttribute("data-l10n-id"),
523 async function runTest(test, getObservances) {
524 registerCleanupFunction(function () {
525 Services.prefs.clearUserPref("privacy.history.custom");
528 await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
532 let doc = gBrowser.contentDocument;
533 let historyMode = doc.getElementById("historyMode");
534 historyMode.value = "custom";
535 historyMode.doCommand();
537 let promiseSubDialogLoaded = promiseLoadSubDialog(
538 "chrome://browser/content/preferences/dialogs/permissions.xhtml"
540 doc.getElementById("cookieExceptions").doCommand();
542 let win = await promiseSubDialogLoaded;
547 richlistbox: doc.getElementById("permissionsBox"),
548 url: doc.getElementById("url"),
549 btnAllow: doc.getElementById("btnAllow"),
550 btnBlock: doc.getElementById("btnBlock"),
551 btnRemove: doc.getElementById("removePermission"),
552 allowL10nId: win.gPermissionManager._getCapabilityL10nId(
553 Ci.nsIPermissionManager.ALLOW_ACTION
555 denyL10nId: win.gPermissionManager._getCapabilityL10nId(
556 Ci.nsIPermissionManager.DENY_ACTION
558 allow: Ci.nsIPermissionManager.ALLOW_ACTION,
559 deny: Ci.nsIPermissionManager.DENY_ACTION,
561 let btnApplyChanges = doc.querySelector("dialog").getButton("accept");
562 let observances = getObservances(params);
563 let observeAllPromise = createObserveAllPromise(observances);
565 await test(params, observeAllPromise, () => btnApplyChanges.doCommand());
567 BrowserTestUtils.removeTab(gBrowser.selectedTab);