tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

browser_permissions_checkPermissionsWereAdded.js (4373B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const PERMISSIONS_URL =
      7  "chrome://browser/content/preferences/dialogs/permissions.xhtml";
      8 
      9 const _checkAndOpenCookiesDialog = async doc => {
     10  let cookieExceptionsButton = doc.getElementById("cookieExceptions");
     11  ok(cookieExceptionsButton, "cookieExceptionsButton found");
     12  let dialogPromise = promiseLoadSubDialog(PERMISSIONS_URL);
     13  cookieExceptionsButton.click();
     14  let dialog = await dialogPromise;
     15  return dialog;
     16 };
     17 
     18 const _checkCookiesDialog = (dialog, buttonIds) => {
     19  ok(dialog, "dialog loaded");
     20  let urlLabel = dialog.document.getElementById("urlLabel");
     21  ok(!urlLabel.hidden, "urlLabel should be visible");
     22  let url = dialog.document.getElementById("url");
     23  ok(!url.hidden, "url should be visible");
     24  for (let buttonId of buttonIds) {
     25    let buttonDialog = dialog.document.getElementById(buttonId);
     26    ok(buttonDialog, "blockButtonDialog found");
     27    is(
     28      buttonDialog.hasAttribute("disabled"),
     29      true,
     30      "If the user hasn't added an url the button shouldn't be clickable"
     31    );
     32  }
     33  return dialog;
     34 };
     35 
     36 const _addWebsiteAddressToPermissionBox = (
     37  websiteAddress,
     38  dialog,
     39  buttonId,
     40  expectError
     41 ) => {
     42  let url = dialog.document.getElementById("url");
     43  let buttonDialog = dialog.document.getElementById(buttonId);
     44  url.value = websiteAddress;
     45  url.dispatchEvent(new Event("input", { bubbles: true }));
     46  is(
     47    buttonDialog.hasAttribute("disabled"),
     48    false,
     49    "When the user add an url the button should be clickable"
     50  );
     51  buttonDialog.click();
     52  let permissionsBox = dialog.document.getElementById("permissionsBox");
     53  let children = permissionsBox.getElementsByAttribute("origin", "*");
     54  is(
     55    !!children.length,
     56    !expectError,
     57    "Website added in url should be in the list"
     58  );
     59 };
     60 
     61 const _checkIfPermissionsWereAdded = (dialog, expectedResult) => {
     62  let permissionsBox = dialog.document.getElementById("permissionsBox");
     63  for (let website of expectedResult) {
     64    let elements = permissionsBox.getElementsByAttribute("origin", website);
     65    is(elements.length, 1, "It should find only one coincidence");
     66  }
     67 };
     68 
     69 const _removesAllSitesInPermissionBox = (dialog, shouldBePossible) => {
     70  let removeAllWebsitesButton = dialog.document.getElementById(
     71    "removeAllPermissions"
     72  );
     73  ok(removeAllWebsitesButton, "removeAllWebsitesButton found");
     74  const isDisabled = removeAllWebsitesButton.hasAttribute("disabled");
     75  is(
     76    !removeAllWebsitesButton.hasAttribute("disabled"),
     77    shouldBePossible,
     78    "There should be websites in the list"
     79  );
     80  if (!isDisabled) {
     81    removeAllWebsitesButton.click();
     82  }
     83 };
     84 
     85 add_task(async function checkCookiePermissions() {
     86  await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
     87    leaveOpen: true,
     88  });
     89  let win = gBrowser.selectedBrowser.contentWindow;
     90  let doc = win.document;
     91  let buttonIds = ["btnBlock", "btnCookieSession", "btnAllow"];
     92 
     93  let dialog = await _checkAndOpenCookiesDialog(doc);
     94  _checkCookiesDialog(dialog, buttonIds);
     95 
     96  let tests = [
     97    {
     98      inputWebsite: "google.com",
     99      expectedResult: ["http://google.com", "https://google.com"],
    100    },
    101    {
    102      inputWebsite: "https://google.com",
    103      expectedResult: ["https://google.com"],
    104    },
    105    {
    106      inputWebsite: "s3.eu-central-1.amazonaws.com",
    107      expectedResult: [
    108        "http://s3.eu-central-1.amazonaws.com",
    109        "https://s3.eu-central-1.amazonaws.com",
    110      ],
    111    },
    112    {
    113      inputWebsite: "file://",
    114      expectedResult: ["file:///"],
    115    },
    116    {
    117      inputWebsite: "about:config",
    118      expectedResult: ["about:config"],
    119    },
    120    // Invalid inputs, expected to not be added
    121    {
    122      inputWebsite: "http://",
    123      expectedResult: [],
    124    },
    125    {
    126      inputWebsite: "*.example.com",
    127      expectedResult: [],
    128    },
    129    {
    130      inputWebsite: "http://*.example.com",
    131      expectedResult: [],
    132    },
    133  ];
    134 
    135  for (let buttonId of buttonIds) {
    136    for (let test of tests) {
    137      _addWebsiteAddressToPermissionBox(
    138        test.inputWebsite,
    139        dialog,
    140        buttonId,
    141        test.expectedResult.length === 0
    142      );
    143      _checkIfPermissionsWereAdded(dialog, test.expectedResult);
    144      _removesAllSitesInPermissionBox(dialog, !!test.expectedResult.length);
    145    }
    146  }
    147 
    148  gBrowser.removeCurrentTab();
    149 });