tor-browser

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

browser_cookie_exceptions_addRemove.js (7831B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 if (AppConstants.TSAN || AppConstants.DEBUG) {
      7  requestLongerTimeout(2);
      8 }
      9 
     10 const PERMISSIONS_URL =
     11  "chrome://browser/content/preferences/dialogs/permissions.xhtml";
     12 
     13 async function openCookiesDialog(doc) {
     14  let cookieExceptionsButton = doc.getElementById("cookieExceptions");
     15  ok(cookieExceptionsButton, "cookieExceptionsButton found");
     16  let dialogPromise = promiseLoadSubDialog(PERMISSIONS_URL);
     17  cookieExceptionsButton.click();
     18  let dialog = await dialogPromise;
     19  return dialog;
     20 }
     21 
     22 function checkCookiesDialog(dialog) {
     23  ok(dialog, "dialog loaded");
     24  let buttonIds = ["removePermission", "removeAllPermissions"];
     25 
     26  for (let buttonId of buttonIds) {
     27    let button = dialog.document.getElementById(buttonId);
     28    ok(button, `${buttonId} found`);
     29  }
     30 
     31  let dialogEl = dialog.document.querySelector("dialog");
     32  let acceptBtn = dialogEl.getButton("accept");
     33  let cancelBtn = dialogEl.getButton("cancel");
     34 
     35  ok(!acceptBtn.hidden, "acceptButton found");
     36  ok(!cancelBtn.hidden, "cancelButton found");
     37 }
     38 
     39 function addNewPermission(websiteAddress, dialog) {
     40  let url = dialog.document.getElementById("url");
     41  let buttonDialog = dialog.document.getElementById("btnBlock");
     42  let permissionsBox = dialog.document.getElementById("permissionsBox");
     43  let currentPermissions = permissionsBox.itemCount;
     44 
     45  url.value = websiteAddress;
     46  url.dispatchEvent(new Event("input", { bubbles: true }));
     47  is(
     48    buttonDialog.hasAttribute("disabled"),
     49    false,
     50    "When the user add an url the button should be clickable"
     51  );
     52  buttonDialog.click();
     53 
     54  is(
     55    permissionsBox.itemCount,
     56    currentPermissions + 1,
     57    "Website added in url should be in the list"
     58  );
     59 }
     60 
     61 async function cleanList(dialog) {
     62  let removeAllButton = dialog.document.getElementById("removeAllPermissions");
     63  if (!removeAllButton.hasAttribute("disabled")) {
     64    removeAllButton.click();
     65  }
     66 }
     67 
     68 function addData(websites, dialog) {
     69  for (let website of websites) {
     70    addNewPermission(website, dialog);
     71  }
     72 }
     73 
     74 function deletePermission(permission, dialog) {
     75  let permissionsBox = dialog.document.getElementById("permissionsBox");
     76  let elements = permissionsBox.getElementsByAttribute("origin", permission);
     77  is(elements.length, 1, "It should find only one entry");
     78  permissionsBox.selectItem(elements[0]);
     79  let removePermissionButton =
     80    dialog.document.getElementById("removePermission");
     81  is(
     82    removePermissionButton.hasAttribute("disabled"),
     83    false,
     84    "The button should be clickable to remove selected item"
     85  );
     86  removePermissionButton.click();
     87 }
     88 
     89 function save(dialog) {
     90  let saveButton = dialog.document.querySelector("dialog").getButton("accept");
     91  saveButton.click();
     92 }
     93 
     94 function cancel(dialog) {
     95  let cancelButton = dialog.document
     96    .querySelector("dialog")
     97    .getButton("cancel");
     98  ok(!cancelButton.hidden, "cancelButton found");
     99  cancelButton.click();
    100 }
    101 
    102 async function checkExpected(expected, doc) {
    103  let dialog = await openCookiesDialog(doc);
    104  let permissionsBox = dialog.document.getElementById("permissionsBox");
    105 
    106  is(
    107    permissionsBox.itemCount,
    108    expected.length,
    109    `There should be ${expected.length} elements in the list`
    110  );
    111 
    112  for (let website of expected) {
    113    let elements = permissionsBox.getElementsByAttribute("origin", website);
    114    is(elements.length, 1, "It should find only one entry");
    115  }
    116  return dialog;
    117 }
    118 
    119 async function runTest(test, websites, doc) {
    120  let dialog = await openCookiesDialog(doc);
    121  checkCookiesDialog(dialog);
    122 
    123  if (test.needPreviousData) {
    124    addData(websites, dialog);
    125    save(dialog);
    126    dialog = await openCookiesDialog(doc);
    127  }
    128 
    129  for (let step of test.steps) {
    130    switch (step) {
    131      case "addNewPermission":
    132        addNewPermission(test.newData, dialog);
    133        break;
    134      case "deletePermission":
    135        deletePermission(test.newData, dialog);
    136        break;
    137      case "deleteAllPermission":
    138        await cleanList(dialog);
    139        break;
    140      case "save":
    141        save(dialog);
    142        break;
    143      case "cancel":
    144        cancel(dialog);
    145        break;
    146      case "openPane":
    147        dialog = await openCookiesDialog(doc);
    148        break;
    149      default:
    150      // code block
    151    }
    152  }
    153  dialog = await checkExpected(test.expected, doc);
    154  await cleanList(dialog);
    155  save(dialog);
    156 }
    157 
    158 add_task(async function checkPermissions() {
    159  await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
    160    leaveOpen: true,
    161  });
    162  let win = gBrowser.selectedBrowser.contentWindow;
    163  let doc = win.document;
    164  let websites = ["http://test1.com", "http://test2.com"];
    165 
    166  let tests = [
    167    {
    168      needPreviousData: false,
    169      newData: "https://mytest.com",
    170      steps: ["addNewPermission", "save"],
    171      expected: ["https://mytest.com"], // when open the pane again it should find this in the list
    172    },
    173    {
    174      needPreviousData: false,
    175      newData: "https://mytest.com",
    176      steps: ["addNewPermission", "cancel"],
    177      expected: [],
    178    },
    179    {
    180      needPreviousData: false,
    181      newData: "https://mytest.com",
    182      steps: ["addNewPermission", "deletePermission", "save"],
    183      expected: [],
    184    },
    185    {
    186      needPreviousData: false,
    187      newData: "https://mytest.com",
    188      steps: ["addNewPermission", "deletePermission", "cancel"],
    189      expected: [],
    190    },
    191    {
    192      needPreviousData: false,
    193      newData: "https://mytest.com",
    194      steps: [
    195        "addNewPermission",
    196        "save",
    197        "openPane",
    198        "deletePermission",
    199        "save",
    200      ],
    201      expected: [],
    202    },
    203    {
    204      needPreviousData: false,
    205      newData: "https://mytest.com",
    206      steps: [
    207        "addNewPermission",
    208        "save",
    209        "openPane",
    210        "deletePermission",
    211        "cancel",
    212      ],
    213      expected: ["https://mytest.com"],
    214    },
    215    {
    216      needPreviousData: false,
    217      newData: "https://mytest.com",
    218      steps: ["addNewPermission", "deleteAllPermission", "save"],
    219      expected: [],
    220    },
    221    {
    222      needPreviousData: false,
    223      newData: "https://mytest.com",
    224      steps: ["addNewPermission", "deleteAllPermission", "cancel"],
    225      expected: [],
    226    },
    227    {
    228      needPreviousData: false,
    229      newData: "https://mytest.com",
    230      steps: [
    231        "addNewPermission",
    232        "save",
    233        "openPane",
    234        "deleteAllPermission",
    235        "save",
    236      ],
    237      expected: [],
    238    },
    239    {
    240      needPreviousData: false,
    241      newData: "https://mytest.com",
    242      steps: [
    243        "addNewPermission",
    244        "save",
    245        "openPane",
    246        "deleteAllPermission",
    247        "cancel",
    248      ],
    249      expected: ["https://mytest.com"],
    250    },
    251    {
    252      needPreviousData: true,
    253      newData: "https://mytest.com",
    254      steps: ["deleteAllPermission", "save"],
    255      expected: [],
    256    },
    257    {
    258      needPreviousData: true,
    259      newData: "https://mytest.com",
    260      steps: ["deleteAllPermission", "cancel"],
    261      expected: websites,
    262    },
    263    {
    264      needPreviousData: true,
    265      newData: "https://mytest.com",
    266      steps: ["addNewPermission", "save"],
    267      expected: (function () {
    268        let result = websites.slice();
    269        result.push("https://mytest.com");
    270        return result;
    271      })(),
    272    },
    273    {
    274      needPreviousData: true,
    275      newData: "https://mytest.com",
    276      steps: ["addNewPermission", "cancel"],
    277      expected: websites,
    278    },
    279    {
    280      needPreviousData: false,
    281      newData: "https://mytest.com",
    282      steps: [
    283        "addNewPermission",
    284        "save",
    285        "openPane",
    286        "deleteAllPermission",
    287        "addNewPermission",
    288        "save",
    289      ],
    290      expected: ["https://mytest.com"],
    291    },
    292  ];
    293 
    294  for (let test of tests) {
    295    await runTest(test, websites, doc);
    296  }
    297 
    298  gBrowser.removeCurrentTab();
    299 });