forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			300 lines
		
	
	
	
		
			7.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			300 lines
		
	
	
	
		
			7.7 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();
 | |
| });
 | 
