forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			149 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Any copyright is dedicated to the Public Domain.
 | 
						|
 * http://creativecommons.org/publicdomain/zero/1.0/ */
 | 
						|
 | 
						|
"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: [
 | 
						|
        "http://s3.eu-central-1.amazonaws.com",
 | 
						|
        "https://s3.eu-central-1.amazonaws.com",
 | 
						|
      ],
 | 
						|
    },
 | 
						|
    {
 | 
						|
      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();
 | 
						|
});
 |